netwerk/base/CaptivePortalService.h
author Edwin Gao <egao@mozilla.com>
Wed, 13 Mar 2019 19:47:25 +0000
changeset 463893 15c16889e3b7f6e871a518b5f3254459ed5e0213
parent 448947 6f3709b3878117466168c40affa7bca0b60cf75b
permissions -rw-r--r--
Bug 1531590, 1531598, 1534811, 1336075, 1531571, 1531572, 1531572, 1531574, 1534855, 1534857, 1535082 - skip tests in mochitest-dev-tools and mochitest-browser-chrome suites for windows10-aarch64 r=jmaher Bug 1531598 - disable browser_markup_copy_image_data.js Bug 1531598 - disable browser_markup_links_04.js Bug 1531598 - disable browser_inspector_menu-01-sensitivity.js Bug 1534811 - disable accessible/tests/browser/general Bug 1336075 - disable browser_largeAllocation_non_win32.js Bug 1531571 - disable browser_jsterm_context_menu_labels.js Bug 1531572 - disable browser_jsterm_helper_dollar_x.js Bug 1531573 - disable browser_jsterm_no_input_and_tab_key_pressed.js Bug 1531574 - disable browser_jsterm_syntax_highlight_output.js Bug 1534855 - disable accessible/tests/browser/ Bug 1534857 - disable browser_ext_slow_script.js Bug 1535082 - disable browser_jsterm_helper_dollar_dollar.js Differential Revision: https://phabricator.services.mozilla.com/D23369

/* 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/. */

#ifndef CaptivePortalService_h_
#define CaptivePortalService_h_

#include "nsICaptivePortalService.h"
#include "nsICaptivePortalDetector.h"
#include "nsINamed.h"
#include "nsIObserver.h"
#include "nsWeakReference.h"
#include "nsITimer.h"
#include "nsCOMArray.h"
#include "mozilla/TimeStamp.h"

namespace mozilla {
namespace net {

class CaptivePortalService : public nsICaptivePortalService,
                             public nsIObserver,
                             public nsSupportsWeakReference,
                             public nsITimerCallback,
                             public nsICaptivePortalCallback,
                             public nsINamed {
 public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSICAPTIVEPORTALSERVICE
  NS_DECL_NSIOBSERVER
  NS_DECL_NSITIMERCALLBACK
  NS_DECL_NSICAPTIVEPORTALCALLBACK
  NS_DECL_NSINAMED

  nsresult Initialize();
  nsresult Start();
  nsresult Stop();

  static already_AddRefed<nsICaptivePortalService> GetSingleton();

  // This method is only called in the content process, in order to mirror
  // the captive portal state in the parent process.
  void SetStateInChild(int32_t aState);

 private:
  CaptivePortalService();
  virtual ~CaptivePortalService();
  nsresult PerformCheck();
  nsresult RearmTimer();
  void NotifyConnectivityAvailable(bool aCaptive);

  nsCOMPtr<nsICaptivePortalDetector> mCaptivePortalDetector;
  int32_t mState;

  nsCOMPtr<nsITimer> mTimer;
  bool mStarted;
  bool mInitialized;
  bool mRequestInProgress;
  bool mEverBeenCaptive;

  uint32_t mDelay;
  int32_t mSlackCount;

  uint32_t mMinInterval;
  uint32_t mMaxInterval;
  float mBackoffFactor;

  // This holds a timestamp when the last time when the captive portal check
  // has changed state.
  mozilla::TimeStamp mLastChecked;
};

}  // namespace net
}  // namespace mozilla

#endif  // CaptivePortalService_h_