summaryrefslogtreecommitdiffstats
path: root/netwerk/base/nsICaptivePortalService.idl
blob: 0814ecb6651d297952aa7a74b72d2d728036f41d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

[scriptable, uuid(b5fd5629-d04c-4138-9529-9311f291ecd4)]
interface nsICaptivePortalServiceCallback : nsISupports
{
  /**
   * Invoke callbacks after captive portal detection finished.
   */
  void complete(in boolean success, in nsresult error);
};

/**
 * Service used for captive portal detection.
 * The service is only active in the main process. It is also available in the
 * content process, but only to mirror the captive portal state from the main
 * process.
 */
[scriptable, uuid(bdbe0555-fc3d-4f7b-9205-c309ceb2d641)]
interface nsICaptivePortalService : nsISupports
{
  const long UNKNOWN          = 0;
  const long NOT_CAPTIVE      = 1;
  const long UNLOCKED_PORTAL  = 2;
  const long LOCKED_PORTAL    = 3;

  /**
   * Called from XPCOM to trigger a captive portal recheck.
   * A network request will only be performed if no other checks are currently
   * ongoing.
   * Will not do anything if called in the content process.
   */
  void recheckCaptivePortal();

  /**
   * Returns the state of the captive portal.
   */
  readonly attribute long state;

%{C++
  int32_t State() {
    int32_t result = nsICaptivePortalService::UNKNOWN;
    GetState(&result);
    return result;
  }
%}

  /**
   * Returns the time difference between NOW and the last time a request was
   * completed in milliseconds.
   */
  readonly attribute unsigned long long lastChecked;
};

%{C++
/**
 * This observer notification will be emitted when the captive portal state
 * changes. After receiving it, the ContentParent will send an IPC message
 * to the ContentChild, which will set the state in the captive portal service
 * in the child.
 */
#define NS_IPC_CAPTIVE_PORTAL_SET_STATE "ipc:network:captive-portal-set-state"

/**
 * This notification will be emitted when the captive portal service has
 * determined that we can connect to the internet.
 * The service will pass either "captive" if there is an unlocked captive portal
 * present, or "clear" if no captive portal was detected.
 * Note: this notification only gets sent in the parent process.
 */
#define NS_CAPTIVE_PORTAL_CONNECTIVITY "network:captive-portal-connectivity"

/**
 * Similar to NS_CAPTIVE_PORTAL_CONNECTIVITY but only gets dispatched when
 * the connectivity changes from UNKNOWN to NOT_CAPTIVE or from LOCKED_PORTAL
 * to UNLOCKED_PORTAL.
 */
#define NS_CAPTIVE_PORTAL_CONNECTIVITY_CHANGED "network:captive-portal-connectivity-changed"

%}