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

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: nits2 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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 // figure out how to make it fast enough. 257 // figure out how to make it fast enough.
167 SendUserList(false); 258 SendUserList(false);
168 259
169 ShowScreen(kAccountPickerScreen, NULL); 260 ShowScreen(kAccountPickerScreen, NULL);
170 } 261 }
171 } 262 }
172 263
173 // SigninScreenHandler, private: ----------------------------------------------- 264 // SigninScreenHandler, private: -----------------------------------------------
174 265
175 void SigninScreenHandler::Initialize() { 266 void SigninScreenHandler::Initialize() {
267 network_state_informer_.reset(new NetworkStateInformer(web_ui_));
176 if (show_on_init_) { 268 if (show_on_init_) {
177 show_on_init_ = false; 269 show_on_init_ = false;
178 Show(oobe_ui_); 270 Show(oobe_ui_);
179 } 271 }
180 } 272 }
181 273
182 void SigninScreenHandler::RegisterMessages() { 274 void SigninScreenHandler::RegisterMessages() {
183 web_ui_->RegisterMessageCallback("authenticateUser", 275 web_ui_->RegisterMessageCallback("authenticateUser",
184 NewCallback(this, &SigninScreenHandler::HandleAuthenticateUser)); 276 NewCallback(this, &SigninScreenHandler::HandleAuthenticateUser));
185 web_ui_->RegisterMessageCallback("completeLogin", 277 web_ui_->RegisterMessageCallback("completeLogin",
186 NewCallback(this, &SigninScreenHandler::HandleCompleteLogin)); 278 NewCallback(this, &SigninScreenHandler::HandleCompleteLogin));
187 web_ui_->RegisterMessageCallback("getUsers", 279 web_ui_->RegisterMessageCallback("getUsers",
188 NewCallback(this, &SigninScreenHandler::HandleGetUsers)); 280 NewCallback(this, &SigninScreenHandler::HandleGetUsers));
189 web_ui_->RegisterMessageCallback("launchIncognito", 281 web_ui_->RegisterMessageCallback("launchIncognito",
190 NewCallback(this, &SigninScreenHandler::HandleLaunchIncognito)); 282 NewCallback(this, &SigninScreenHandler::HandleLaunchIncognito));
191 web_ui_->RegisterMessageCallback("showAddUser", 283 web_ui_->RegisterMessageCallback("showAddUser",
192 NewCallback(this, &SigninScreenHandler::HandleShowAddUser)); 284 NewCallback(this, &SigninScreenHandler::HandleShowAddUser));
193 web_ui_->RegisterMessageCallback("shutdownSystem", 285 web_ui_->RegisterMessageCallback("shutdownSystem",
194 NewCallback(this, &SigninScreenHandler::HandleShutdownSystem)); 286 NewCallback(this, &SigninScreenHandler::HandleShutdownSystem));
195 web_ui_->RegisterMessageCallback("removeUser", 287 web_ui_->RegisterMessageCallback("removeUser",
196 NewCallback(this, &SigninScreenHandler::HandleRemoveUser)); 288 NewCallback(this, &SigninScreenHandler::HandleRemoveUser));
197 web_ui_->RegisterMessageCallback("toggleEnrollmentScreen", 289 web_ui_->RegisterMessageCallback("toggleEnrollmentScreen",
198 NewCallback(this, &SigninScreenHandler::HandleToggleEnrollmentScreen)); 290 NewCallback(this, &SigninScreenHandler::HandleToggleEnrollmentScreen));
199 web_ui_->RegisterMessageCallback("launchHelpApp", 291 web_ui_->RegisterMessageCallback("launchHelpApp",
200 NewCallback(this, &SigninScreenHandler::HandleLaunchHelpApp)); 292 NewCallback(this, &SigninScreenHandler::HandleLaunchHelpApp));
201 web_ui_->RegisterMessageCallback("createAccount", 293 web_ui_->RegisterMessageCallback("createAccount",
202 NewCallback(this, &SigninScreenHandler::HandleCreateAccount)); 294 NewCallback(this, &SigninScreenHandler::HandleCreateAccount));
203 web_ui_->RegisterMessageCallback("loginWebuiReady", 295 web_ui_->RegisterMessageCallback("loginWebuiReady",
204 NewCallback(this, &SigninScreenHandler::HandleLoginWebuiReady)); 296 NewCallback(this, &SigninScreenHandler::HandleLoginWebuiReady));
297 web_ui_->RegisterMessageCallback("loginRequestNetworkState",
298 NewCallback(this, &SigninScreenHandler::HandleLoginRequestNetworkState));
299 web_ui_->RegisterMessageCallback("loginAddNetworkStateObserver",
300 NewCallback(this,
301 &SigninScreenHandler::HandleLoginAddNetworkStateObserver));
302 web_ui_->RegisterMessageCallback("loginRemoveNetworkStateObserver",
303 NewCallback(this,
304 &SigninScreenHandler::HandleLoginRemoveNetworkStateObserver));
205 } 305 }
206 306
207 void SigninScreenHandler::HandleGetUsers(const base::ListValue* args) { 307 void SigninScreenHandler::HandleGetUsers(const base::ListValue* args) {
208 SendUserList(false); 308 SendUserList(false);
209 } 309 }
210 310
211 void SigninScreenHandler::ClearAndEnablePassword() { 311 void SigninScreenHandler::ClearAndEnablePassword() {
212 web_ui_->CallJavascriptFunction("cr.ui.Oobe.resetSigninUI"); 312 web_ui_->CallJavascriptFunction("cr.ui.Oobe.resetSigninUI");
213 } 313 }
214 314
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 users_list, animated_value); 542 users_list, animated_value);
443 } 543 }
444 544
445 void SigninScreenHandler::HandleLoginWebuiReady(const base::ListValue* args) { 545 void SigninScreenHandler::HandleLoginWebuiReady(const base::ListValue* args) {
446 NotificationService::current()->Notify( 546 NotificationService::current()->Notify(
447 chrome::NOTIFICATION_LOGIN_WEBUI_READY, 547 chrome::NOTIFICATION_LOGIN_WEBUI_READY,
448 NotificationService::AllSources(), 548 NotificationService::AllSources(),
449 NotificationService::NoDetails()); 549 NotificationService::NoDetails());
450 } 550 }
451 551
552 void SigninScreenHandler::HandleLoginRequestNetworkState(
553 const base::ListValue* args) {
554 std::string callback;
555 if (!args->GetString(0, &callback)) {
556 NOTREACHED();
557 return;
558 }
559 if (network_state_informer_ == NULL)
560 network_state_informer_.reset(new NetworkStateInformer(web_ui_));
xiyuan 2011/09/26 17:06:14 nit: This should not happen since Initialize shoul
altimofeev 2011/09/26 18:11:41 Initialize() is called after JS was loaded, but JS
561 network_state_informer_->SendState(callback);
562 }
563
564 void SigninScreenHandler::HandleLoginAddNetworkStateObserver(
565 const base::ListValue* args) {
566 std::string callback;
567 if (!args->GetString(0, &callback)) {
568 NOTREACHED();
569 return;
570 }
571 if (network_state_informer_ == NULL)
572 network_state_informer_.reset(new NetworkStateInformer(web_ui_));
573 network_state_informer_->AddObserver(callback);
574 }
575
576 void SigninScreenHandler::HandleLoginRemoveNetworkStateObserver(
577 const base::ListValue* args) {
578 std::string callback;
579 if (!args->GetString(0, &callback)) {
580 NOTREACHED();
581 return;
582 }
583 if (network_state_informer_ == NULL)
584 network_state_informer_.reset(new NetworkStateInformer(web_ui_));
585 network_state_informer_->RemoveObserver(callback);
586 }
587
452 void SigninScreenHandler::HandleCreateAccount(const base::ListValue* args) { 588 void SigninScreenHandler::HandleCreateAccount(const base::ListValue* args) {
453 delegate_->CreateAccount(); 589 delegate_->CreateAccount();
454 } 590 }
455 591
456 void SigninScreenHandler::StartClearingDnsCache() { 592 void SigninScreenHandler::StartClearingDnsCache() {
457 if (dns_clear_task_running_ || !g_browser_process->io_thread()) 593 if (dns_clear_task_running_ || !g_browser_process->io_thread())
458 return; 594 return;
459 595
460 dns_cleared_ = false; 596 dns_cleared_ = false;
461 ClearDnsCacheTaskOnIOThread* clear_dns_task = new ClearDnsCacheTaskOnIOThread( 597 ClearDnsCacheTaskOnIOThread* clear_dns_task = new ClearDnsCacheTaskOnIOThread(
(...skipping 10 matching lines...) Expand all
472 608
473 cookie_remover_ = new BrowsingDataRemover( 609 cookie_remover_ = new BrowsingDataRemover(
474 Profile::FromBrowserContext(web_ui_->tab_contents()->browser_context()), 610 Profile::FromBrowserContext(web_ui_->tab_contents()->browser_context()),
475 BrowsingDataRemover::EVERYTHING, 611 BrowsingDataRemover::EVERYTHING,
476 base::Time()); 612 base::Time());
477 cookie_remover_->AddObserver(this); 613 cookie_remover_->AddObserver(this);
478 cookie_remover_->Remove(BrowsingDataRemover::REMOVE_SITE_DATA); 614 cookie_remover_->Remove(BrowsingDataRemover::REMOVE_SITE_DATA);
479 } 615 }
480 616
481 } // namespace chromeos 617 } // 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