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

Side by Side Diff: chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc

Issue 8043024: [cros,webui] Captive portal on login screen proper handling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merged Created 9 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" 5 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/hash_tables.h"
8 #include "base/stringprintf.h" 9 #include "base/stringprintf.h"
9 #include "base/task.h" 10 #include "base/task.h"
10 #include "base/values.h" 11 #include "base/values.h"
11 #include "chrome/browser/browser_process.h" 12 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/browser_shutdown.h" 13 #include "chrome/browser/browser_shutdown.h"
13 #include "chrome/browser/io_thread.h" 14 #include "chrome/browser/io_thread.h"
14 #include "chrome/browser/chromeos/cros/cros_library.h" 15 #include "chrome/browser/chromeos/cros/cros_library.h"
16 #include "chrome/browser/chromeos/cros/network_library.h"
15 #include "chrome/browser/chromeos/cros/power_library.h" 17 #include "chrome/browser/chromeos/cros/power_library.h"
16 #include "chrome/browser/chromeos/login/user_manager.h" 18 #include "chrome/browser/chromeos/login/user_manager.h"
17 #include "chrome/browser/chromeos/login/webui_login_display.h" 19 #include "chrome/browser/chromeos/login/webui_login_display.h"
18 #include "chrome/browser/profiles/profile.h" 20 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/chromeos/user_cros_settings_provider.h" 21 #include "chrome/browser/chromeos/user_cros_settings_provider.h"
20 #include "chrome/common/chrome_notification_types.h" 22 #include "chrome/common/chrome_notification_types.h"
21 #include "chrome/common/chrome_switches.h" 23 #include "chrome/common/chrome_switches.h"
22 #include "chrome/common/net/gaia/gaia_urls.h" 24 #include "chrome/common/net/gaia/gaia_urls.h"
23 #include "chrome/common/url_constants.h" 25 #include "chrome/common/url_constants.h"
24 #include "content/browser/tab_contents/tab_contents.h" 26 #include "content/browser/tab_contents/tab_contents.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 if (sanitized.find('@') == std::string::npos) 61 if (sanitized.find('@') == std::string::npos)
60 sanitized += kDefaultDomain; 62 sanitized += kDefaultDomain;
61 63
62 return sanitized; 64 return sanitized;
63 } 65 }
64 66
65 } // namespace 67 } // namespace
66 68
67 namespace chromeos { 69 namespace chromeos {
68 70
71 // Class which observes network state changes and calls registerd callbacks.
72 // State is considered changed if connection or the active network has been
73 // changed. Also, it answers to the requests about current network state.
74 class NetworkStateInformer
75 : public chromeos::NetworkLibrary::NetworkManagerObserver {
76 public:
77 explicit NetworkStateInformer(WebUI* web_ui);
78 virtual ~NetworkStateInformer();
79
80 // Adds observer's callback to be called when network state has been changed.
81 void AddObserver(const std::string& callback);
82
83 // Removes observer's callback.
84 void RemoveObserver(const std::string& callback);
85
86 // Sends current network state using the callback.
87 void SendState(const std::string& callback);
88
89 // NetworkLibrary::NetworkManagerObserver implementation:
90 virtual void OnNetworkManagerChanged(chromeos::NetworkLibrary* cros) OVERRIDE;
91
92 private:
93 enum State {OFFLINE, ONLINE, CAPTIVE_PORTAL};
94
95 bool UpdateState(chromeos::NetworkLibrary* cros);
96
97 base::hash_set<std::string> observers_;
98 std::string active_network_;
99 State state_;
100 WebUI* web_ui_;
101 };
102
69 // Clears DNS cache on IO thread. 103 // Clears DNS cache on IO thread.
70 class ClearDnsCacheTaskOnIOThread : public Task { 104 class ClearDnsCacheTaskOnIOThread : public Task {
71 public: 105 public:
72 ClearDnsCacheTaskOnIOThread(Task* callback, IOThread* io_thread) 106 ClearDnsCacheTaskOnIOThread(Task* callback, IOThread* io_thread)
73 : callback_(callback), io_thread_(io_thread) { 107 : callback_(callback), io_thread_(io_thread) {
74 } 108 }
75 virtual ~ClearDnsCacheTaskOnIOThread() {} 109 virtual ~ClearDnsCacheTaskOnIOThread() {}
76 110
77 // Task overrides. 111 // Task overrides.
78 virtual void Run() OVERRIDE { 112 virtual void Run() OVERRIDE {
79 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 113 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
80 if (browser_shutdown::IsTryingToQuit()) 114 if (browser_shutdown::IsTryingToQuit())
81 return; 115 return;
82 116
83 io_thread_->globals()->dnsrr_resolver.get()->OnIPAddressChanged(); 117 io_thread_->globals()->dnsrr_resolver.get()->OnIPAddressChanged();
84 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback_); 118 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback_);
85 } 119 }
86 120
87 private: 121 private:
88 Task* callback_; 122 Task* callback_;
89 IOThread* io_thread_; 123 IOThread* io_thread_;
90 DISALLOW_COPY_AND_ASSIGN(ClearDnsCacheTaskOnIOThread); 124 DISALLOW_COPY_AND_ASSIGN(ClearDnsCacheTaskOnIOThread);
91 }; 125 };
92 126
127 // NetworkStateInformer implementation -----------------------------------------
128
129 NetworkStateInformer::NetworkStateInformer(WebUI* web_ui) : web_ui_(web_ui) {
130 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
131 UpdateState(cros);
132 cros->AddNetworkManagerObserver(this);
133 }
134
135 NetworkStateInformer::~NetworkStateInformer() {
136 CrosLibrary::Get()->GetNetworkLibrary()->
137 RemoveNetworkManagerObserver(this);
138 }
139
140 void NetworkStateInformer::AddObserver(const std::string& callback) {
141 observers_.insert(callback);
142 }
143
144 void NetworkStateInformer::RemoveObserver(const std::string& callback) {
145 observers_.erase(callback);
146 }
147
148 void NetworkStateInformer::SendState(const std::string& callback) {
149 base::FundamentalValue state_value(state_);
150 web_ui_->CallJavascriptFunction(callback, state_value);
151 }
152
153 void NetworkStateInformer::OnNetworkManagerChanged(NetworkLibrary* cros) {
154 if (UpdateState(cros)) {
155 for (base::hash_set<std::string>::iterator it = observers_.begin();
156 it != observers_.end(); ++it) {
157 SendState(*it);
158 }
159 }
160 }
161
162 bool NetworkStateInformer::UpdateState(NetworkLibrary* cros) {
163 State new_state;
164 std::string new_active_network;
165 if (!cros->Connected()) {
166 new_state = OFFLINE;
167 } else {
168 const Network* active_network = cros->active_network();
169 new_active_network = active_network->unique_id();
170 if (active_network && active_network->restricted_pool()) {
171 new_state = CAPTIVE_PORTAL;
172 } else {
173 new_state = ONLINE;
174 }
175 }
176 bool updated = (new_state != state_) ||
177 (active_network_ != new_active_network);
178 state_ = new_state;
179 active_network_ = new_active_network;
180 return updated;
181 }
182
183 // SigninScreenHandler implementation ------------------------------------------
93 184
94 SigninScreenHandler::SigninScreenHandler() 185 SigninScreenHandler::SigninScreenHandler()
95 : delegate_(WebUILoginDisplay::GetInstance()), 186 : delegate_(WebUILoginDisplay::GetInstance()),
96 show_on_init_(false), 187 show_on_init_(false),
97 oobe_ui_(false), 188 oobe_ui_(false),
98 dns_cleared_(false), 189 dns_cleared_(false),
99 dns_clear_task_running_(false), 190 dns_clear_task_running_(false),
100 cookies_cleared_(false), 191 cookies_cleared_(false),
101 extension_driven_( 192 extension_driven_(
102 CommandLine::ForCurrentProcess()->HasSwitch( 193 CommandLine::ForCurrentProcess()->HasSwitch(
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 // SigninScreenHandler, private: ----------------------------------------------- 266 // SigninScreenHandler, private: -----------------------------------------------
176 267
177 void SigninScreenHandler::Initialize() { 268 void SigninScreenHandler::Initialize() {
178 if (show_on_init_) { 269 if (show_on_init_) {
179 show_on_init_ = false; 270 show_on_init_ = false;
180 Show(oobe_ui_); 271 Show(oobe_ui_);
181 } 272 }
182 } 273 }
183 274
184 void SigninScreenHandler::RegisterMessages() { 275 void SigninScreenHandler::RegisterMessages() {
276 network_state_informer_.reset(new NetworkStateInformer(web_ui_));
277
185 web_ui_->RegisterMessageCallback("authenticateUser", 278 web_ui_->RegisterMessageCallback("authenticateUser",
186 NewCallback(this, &SigninScreenHandler::HandleAuthenticateUser)); 279 NewCallback(this, &SigninScreenHandler::HandleAuthenticateUser));
187 web_ui_->RegisterMessageCallback("completeLogin", 280 web_ui_->RegisterMessageCallback("completeLogin",
188 NewCallback(this, &SigninScreenHandler::HandleCompleteLogin)); 281 NewCallback(this, &SigninScreenHandler::HandleCompleteLogin));
189 web_ui_->RegisterMessageCallback("getUsers", 282 web_ui_->RegisterMessageCallback("getUsers",
190 NewCallback(this, &SigninScreenHandler::HandleGetUsers)); 283 NewCallback(this, &SigninScreenHandler::HandleGetUsers));
191 web_ui_->RegisterMessageCallback("launchIncognito", 284 web_ui_->RegisterMessageCallback("launchIncognito",
192 NewCallback(this, &SigninScreenHandler::HandleLaunchIncognito)); 285 NewCallback(this, &SigninScreenHandler::HandleLaunchIncognito));
193 web_ui_->RegisterMessageCallback("fixCaptivePortal", 286 web_ui_->RegisterMessageCallback("fixCaptivePortal",
194 NewCallback(this, &SigninScreenHandler::HandleFixCaptivePortal)); 287 NewCallback(this, &SigninScreenHandler::HandleFixCaptivePortal));
195 web_ui_->RegisterMessageCallback("showAddUser", 288 web_ui_->RegisterMessageCallback("showAddUser",
196 NewCallback(this, &SigninScreenHandler::HandleShowAddUser)); 289 NewCallback(this, &SigninScreenHandler::HandleShowAddUser));
197 web_ui_->RegisterMessageCallback("shutdownSystem", 290 web_ui_->RegisterMessageCallback("shutdownSystem",
198 NewCallback(this, &SigninScreenHandler::HandleShutdownSystem)); 291 NewCallback(this, &SigninScreenHandler::HandleShutdownSystem));
199 web_ui_->RegisterMessageCallback("removeUser", 292 web_ui_->RegisterMessageCallback("removeUser",
200 NewCallback(this, &SigninScreenHandler::HandleRemoveUser)); 293 NewCallback(this, &SigninScreenHandler::HandleRemoveUser));
201 web_ui_->RegisterMessageCallback("toggleEnrollmentScreen", 294 web_ui_->RegisterMessageCallback("toggleEnrollmentScreen",
202 NewCallback(this, &SigninScreenHandler::HandleToggleEnrollmentScreen)); 295 NewCallback(this, &SigninScreenHandler::HandleToggleEnrollmentScreen));
203 web_ui_->RegisterMessageCallback("launchHelpApp", 296 web_ui_->RegisterMessageCallback("launchHelpApp",
204 NewCallback(this, &SigninScreenHandler::HandleLaunchHelpApp)); 297 NewCallback(this, &SigninScreenHandler::HandleLaunchHelpApp));
205 web_ui_->RegisterMessageCallback("createAccount", 298 web_ui_->RegisterMessageCallback("createAccount",
206 NewCallback(this, &SigninScreenHandler::HandleCreateAccount)); 299 NewCallback(this, &SigninScreenHandler::HandleCreateAccount));
207 web_ui_->RegisterMessageCallback("loginWebuiReady", 300 web_ui_->RegisterMessageCallback("loginWebuiReady",
208 NewCallback(this, &SigninScreenHandler::HandleLoginWebuiReady)); 301 NewCallback(this, &SigninScreenHandler::HandleLoginWebuiReady));
302 web_ui_->RegisterMessageCallback("loginRequestNetworkState",
303 NewCallback(this, &SigninScreenHandler::HandleLoginRequestNetworkState));
304 web_ui_->RegisterMessageCallback("loginAddNetworkStateObserver",
305 NewCallback(this,
306 &SigninScreenHandler::HandleLoginAddNetworkStateObserver));
307 web_ui_->RegisterMessageCallback("loginRemoveNetworkStateObserver",
308 NewCallback(this,
309 &SigninScreenHandler::HandleLoginRemoveNetworkStateObserver));
209 } 310 }
210 311
211 void SigninScreenHandler::HandleGetUsers(const base::ListValue* args) { 312 void SigninScreenHandler::HandleGetUsers(const base::ListValue* args) {
212 SendUserList(false); 313 SendUserList(false);
213 } 314 }
214 315
215 void SigninScreenHandler::ClearAndEnablePassword() { 316 void SigninScreenHandler::ClearAndEnablePassword() {
216 web_ui_->CallJavascriptFunction("cr.ui.Oobe.resetSigninUI"); 317 web_ui_->CallJavascriptFunction("cr.ui.Oobe.resetSigninUI");
217 } 318 }
218 319
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 users_list, animated_value); 551 users_list, animated_value);
451 } 552 }
452 553
453 void SigninScreenHandler::HandleLoginWebuiReady(const base::ListValue* args) { 554 void SigninScreenHandler::HandleLoginWebuiReady(const base::ListValue* args) {
454 NotificationService::current()->Notify( 555 NotificationService::current()->Notify(
455 chrome::NOTIFICATION_LOGIN_WEBUI_READY, 556 chrome::NOTIFICATION_LOGIN_WEBUI_READY,
456 NotificationService::AllSources(), 557 NotificationService::AllSources(),
457 NotificationService::NoDetails()); 558 NotificationService::NoDetails());
458 } 559 }
459 560
561 void SigninScreenHandler::HandleLoginRequestNetworkState(
562 const base::ListValue* args) {
563 std::string callback;
564 if (!args->GetString(0, &callback)) {
565 NOTREACHED();
566 return;
567 }
568 network_state_informer_->SendState(callback);
569 }
570
571 void SigninScreenHandler::HandleLoginAddNetworkStateObserver(
572 const base::ListValue* args) {
573 std::string callback;
574 if (!args->GetString(0, &callback)) {
575 NOTREACHED();
576 return;
577 }
578 network_state_informer_->AddObserver(callback);
579 }
580
581 void SigninScreenHandler::HandleLoginRemoveNetworkStateObserver(
582 const base::ListValue* args) {
583 std::string callback;
584 if (!args->GetString(0, &callback)) {
585 NOTREACHED();
586 return;
587 }
588 network_state_informer_->RemoveObserver(callback);
589 }
590
460 void SigninScreenHandler::HandleCreateAccount(const base::ListValue* args) { 591 void SigninScreenHandler::HandleCreateAccount(const base::ListValue* args) {
461 delegate_->CreateAccount(); 592 delegate_->CreateAccount();
462 } 593 }
463 594
464 void SigninScreenHandler::StartClearingDnsCache() { 595 void SigninScreenHandler::StartClearingDnsCache() {
465 if (dns_clear_task_running_ || !g_browser_process->io_thread()) 596 if (dns_clear_task_running_ || !g_browser_process->io_thread())
466 return; 597 return;
467 598
468 dns_cleared_ = false; 599 dns_cleared_ = false;
469 ClearDnsCacheTaskOnIOThread* clear_dns_task = new ClearDnsCacheTaskOnIOThread( 600 ClearDnsCacheTaskOnIOThread* clear_dns_task = new ClearDnsCacheTaskOnIOThread(
(...skipping 10 matching lines...) Expand all
480 611
481 cookie_remover_ = new BrowsingDataRemover( 612 cookie_remover_ = new BrowsingDataRemover(
482 Profile::FromBrowserContext(web_ui_->tab_contents()->browser_context()), 613 Profile::FromBrowserContext(web_ui_->tab_contents()->browser_context()),
483 BrowsingDataRemover::EVERYTHING, 614 BrowsingDataRemover::EVERYTHING,
484 base::Time()); 615 base::Time());
485 cookie_remover_->AddObserver(this); 616 cookie_remover_->AddObserver(this);
486 cookie_remover_->Remove(BrowsingDataRemover::REMOVE_SITE_DATA); 617 cookie_remover_->Remove(BrowsingDataRemover::REMOVE_SITE_DATA);
487 } 618 }
488 619
489 } // namespace chromeos 620 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698