Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1174)

Unified Diff: chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc

Issue 225413005: Added event to networkingPrivate extension that portal detection is completed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc b/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc
index 9984c21c845fd1ca87c422352549e505195e3efd..69ed66db2d2332cbf734eacf88ed9e9a83bde686 100644
--- a/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc
@@ -6,6 +6,7 @@
#include "base/json/json_writer.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/net/network_portal_detector.h"
#include "chrome/browser/extensions/api/networking_private/networking_private_api.h"
#include "chrome/browser/extensions/event_router_forwarder.h"
#include "chrome/browser/profiles/profile.h"
@@ -22,6 +23,7 @@
#include "third_party/cros_system_api/dbus/service_constants.h"
using chromeos::NetworkHandler;
+using chromeos::NetworkPortalDetector;
using chromeos::NetworkState;
using chromeos::NetworkStateHandler;
@@ -29,7 +31,8 @@ namespace extensions {
class NetworkingPrivateEventRouterImpl
: public NetworkingPrivateEventRouter,
- public chromeos::NetworkStateHandlerObserver {
+ public chromeos::NetworkStateHandlerObserver,
+ public NetworkPortalDetector::Observer {
public:
explicit NetworkingPrivateEventRouterImpl(Profile* profile);
virtual ~NetworkingPrivateEventRouterImpl();
@@ -46,6 +49,11 @@ class NetworkingPrivateEventRouterImpl
virtual void NetworkListChanged() OVERRIDE;
virtual void NetworkPropertiesUpdated(const NetworkState* network) OVERRIDE;
+ // NetworkPortalDetector::Observer overrides:
+ virtual void OnPortalDetectionCompleted(
+ const NetworkState* network,
+ const NetworkPortalDetector::CaptivePortalState& state) OVERRIDE;
+
private:
// Decide if we should listen for network changes or not. If there are any
// JavaScript listeners registered for the onNetworkChanged event, then we
@@ -72,6 +80,8 @@ NetworkingPrivateEventRouterImpl::NetworkingPrivateEventRouterImpl(
this, api::networking_private::OnNetworksChanged::kEventName);
event_router->RegisterObserver(
this, api::networking_private::OnNetworkListChanged::kEventName);
+ event_router->RegisterObserver(
+ this, api::networking_private::OnPortalDetectionCompleted::kEventName);
StartOrStopListeningForNetworkChanges();
}
}
@@ -114,14 +124,18 @@ void NetworkingPrivateEventRouterImpl::StartOrStopListeningForNetworkChanges() {
event_router->HasEventListener(
api::networking_private::OnNetworksChanged::kEventName) ||
event_router->HasEventListener(
- api::networking_private::OnNetworkListChanged::kEventName);
+ api::networking_private::OnNetworkListChanged::kEventName) ||
+ event_router->HasEventListener(
+ api::networking_private::OnPortalDetectionCompleted::kEventName);
if (should_listen && !listening_) {
NetworkHandler::Get()->network_state_handler()->AddObserver(
this, FROM_HERE);
+ NetworkPortalDetector::Get()->AddObserver(this);
} else if (!should_listen && listening_) {
NetworkHandler::Get()->network_state_handler()->RemoveObserver(
this, FROM_HERE);
+ NetworkPortalDetector::Get()->RemoveObserver(this);
}
listening_ = should_listen;
}
@@ -177,6 +191,53 @@ void NetworkingPrivateEventRouterImpl::NetworkPropertiesUpdated(
event_router->BroadcastEvent(extension_event.Pass());
}
+void NetworkingPrivateEventRouterImpl::OnPortalDetectionCompleted(
+ const NetworkState* network,
+ const NetworkPortalDetector::CaptivePortalState& state) {
+ const std::string path = network ? network->path() : std::string();
+
+ EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+ if (!event_router->HasEventListener(
+ api::networking_private::OnPortalDetectionCompleted::kEventName)) {
+ NET_LOG_EVENT("NetworkingPrivate.OnPortalDetectionCompleted: No Listeners",
+ path);
+ return;
+ }
+ NET_LOG_EVENT("NetworkingPrivate.OnPortalDetectionCompleted", path);
+
+ api::networking_private::CaptivePortalStatus status =
+ api::networking_private::CAPTIVE_PORTAL_STATUS_UNKNOWN;
+ switch (state.status) {
+ case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_UNKNOWN:
+ status = api::networking_private::CAPTIVE_PORTAL_STATUS_UNKNOWN;
+ break;
+ case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_OFFLINE:
+ status = api::networking_private::CAPTIVE_PORTAL_STATUS_OFFLINE;
+ break;
+ case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE:
+ status = api::networking_private::CAPTIVE_PORTAL_STATUS_ONLINE;
+ break;
+ case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL:
+ status = api::networking_private::CAPTIVE_PORTAL_STATUS_PORTAL;
+ break;
+ case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED:
+ status =
+ api::networking_private::CAPTIVE_PORTAL_STATUS_PROXYAUTHREQUIRED;
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+
+ scoped_ptr<base::ListValue> args(
+ api::networking_private::OnPortalDetectionCompleted::Create(
+ path, status));
+ scoped_ptr<Event> extension_event(
+ new Event(api::networking_private::OnPortalDetectionCompleted::kEventName,
+ args.Pass()));
+ event_router->BroadcastEvent(extension_event.Pass());
+}
+
NetworkingPrivateEventRouter* NetworkingPrivateEventRouter::Create(
Profile* profile) {
return new NetworkingPrivateEventRouterImpl(profile);

Powered by Google App Engine
This is Rietveld 408576698