| 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
|
|
|