Index: chrome/browser/chromeos/net/network_portal_notification_controller.cc |
diff --git a/chrome/browser/chromeos/net/network_portal_notification_controller.cc b/chrome/browser/chromeos/net/network_portal_notification_controller.cc |
index 17ad3559ba1da68cc749bb1557051dd739856ecd..1bd8d536194b34535e1ce1af8a3421015fca4751 100644 |
--- a/chrome/browser/chromeos/net/network_portal_notification_controller.cc |
+++ b/chrome/browser/chromeos/net/network_portal_notification_controller.cc |
@@ -16,7 +16,10 @@ |
#include "base/strings/string16.h" |
#include "base/strings/utf_string_conversions.h" |
#include "chrome/browser/chromeos/mobile/mobile_activator.h" |
+#include "chrome/browser/chromeos/net/network_portal_web_dialog.h" |
+#include "chrome/browser/chromeos/profiles/profile_helper.h" |
#include "chrome/browser/profiles/profile_manager.h" |
+#include "chrome/browser/ui/browser_dialogs.h" |
#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" |
#include "chrome/browser/ui/singleton_tabs.h" |
#include "chrome/grit/generated_resources.h" |
@@ -30,6 +33,7 @@ |
#include "ui/message_center/notification.h" |
#include "ui/message_center/notification_types.h" |
#include "ui/message_center/notifier_settings.h" |
+#include "ui/views/widget/widget.h" |
using message_center::Notification; |
@@ -51,7 +55,9 @@ void CloseNotification() { |
class NetworkPortalNotificationControllerDelegate |
: public message_center::NotificationDelegate { |
public: |
- NetworkPortalNotificationControllerDelegate(): clicked_(false) {} |
+ explicit NetworkPortalNotificationControllerDelegate( |
+ base::WeakPtr<NetworkPortalNotificationController> controller) |
+ : clicked_(false), controller_(controller) {} |
// Overridden from message_center::NotificationDelegate: |
virtual void Display() override; |
@@ -63,6 +69,8 @@ class NetworkPortalNotificationControllerDelegate |
bool clicked_; |
+ base::WeakPtr<NetworkPortalNotificationController> controller_; |
+ |
DISALLOW_COPY_AND_ASSIGN(NetworkPortalNotificationControllerDelegate); |
}; |
@@ -93,15 +101,23 @@ void NetworkPortalNotificationControllerDelegate::Click() { |
NetworkPortalNotificationController::USER_ACTION_METRIC_CLICKED, |
NetworkPortalNotificationController::USER_ACTION_METRIC_COUNT); |
+ if (CommandLine::ForCurrentProcess()->HasSwitch( |
+ chromeos::switches::kEnableCaptivePortalBypassProxy)) { |
+ if (controller_) |
+ controller_->ShowDialog(); |
+ |
+ CloseNotification(); |
+ return; |
+ } |
+ |
Profile* profile = ProfileManager::GetActiveUserProfile(); |
if (!profile) |
return; |
+ |
chrome::ScopedTabbedBrowserDisplayer displayer(profile, |
chrome::HOST_DESKTOP_TYPE_ASH); |
GURL url(captive_portal::CaptivePortalDetector::kDefaultURL); |
chrome::ShowSingletonTab(displayer.browser(), url); |
- |
- CloseNotification(); |
} |
} // namespace |
@@ -118,7 +134,9 @@ const char NetworkPortalNotificationController::kNotificationMetric[] = |
const char NetworkPortalNotificationController::kUserActionMetric[] = |
"CaptivePortal.Notification.UserAction"; |
-NetworkPortalNotificationController::NetworkPortalNotificationController() {} |
+NetworkPortalNotificationController::NetworkPortalNotificationController() |
+ : dialog_(nullptr) { |
+} |
NetworkPortalNotificationController::~NetworkPortalNotificationController() {} |
@@ -131,6 +149,10 @@ void NetworkPortalNotificationController::OnPortalDetectionCompleted( |
if (!network || |
state.status != NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL) { |
last_network_path_.clear(); |
+ |
+ if (dialog_) |
+ dialog_->Close(); |
+ |
CloseNotification(); |
return; |
} |
@@ -152,16 +174,13 @@ void NetworkPortalNotificationController::OnPortalDetectionCompleted( |
ash::system_notifier::kNotifierNetworkPortalDetector); |
scoped_ptr<Notification> notification(new Notification( |
- message_center::NOTIFICATION_TYPE_SIMPLE, |
- kNotificationId, |
+ message_center::NOTIFICATION_TYPE_SIMPLE, kNotificationId, |
l10n_util::GetStringUTF16(IDS_PORTAL_DETECTION_NOTIFICATION_TITLE), |
l10n_util::GetStringFUTF16(IDS_PORTAL_DETECTION_NOTIFICATION_MESSAGE, |
base::UTF8ToUTF16(network->name())), |
- icon, |
- base::string16() /* display_source */, |
- notifier_id, |
+ icon, base::string16() /* display_source */, notifier_id, |
message_center::RichNotificationData(), |
- new NetworkPortalNotificationControllerDelegate())); |
+ new NetworkPortalNotificationControllerDelegate(AsWeakPtr()))); |
notification->SetSystemPriority(); |
if (ash::Shell::HasInstance()) { |
@@ -173,4 +192,22 @@ void NetworkPortalNotificationController::OnPortalDetectionCompleted( |
message_center::MessageCenter::Get()->AddNotification(notification.Pass()); |
} |
+void NetworkPortalNotificationController::ShowDialog() { |
+ if (dialog_) |
+ return; |
+ |
+ Profile* signin_profile = ProfileHelper::GetSigninProfile(); |
+ dialog_ = new NetworkPortalWebDialog(AsWeakPtr()); |
+ dialog_->SetWidget(views::Widget::GetWidgetForNativeWindow( |
+ chrome::ShowWebDialog(NULL, signin_profile, dialog_))); |
+} |
+ |
+void NetworkPortalNotificationController::OnDialogDestroyed( |
+ const NetworkPortalWebDialog* dialog) { |
+ if (dialog == dialog_) { |
+ dialog_ = NULL; |
+ ProfileHelper::Get()->ClearSigninProfile(base::Closure()); |
+ } |
+} |
+ |
} // namespace chromeos |