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

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

Issue 99223009: Fixed current OOBE captive portal metrics. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix. Created 6 years, 12 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/callback.h" 7 #include "base/callback.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 117
118 namespace { 118 namespace {
119 119
120 bool IsOnline(NetworkStateInformer::State state, 120 bool IsOnline(NetworkStateInformer::State state,
121 ErrorScreenActor::ErrorReason reason) { 121 ErrorScreenActor::ErrorReason reason) {
122 return state == NetworkStateInformer::ONLINE && 122 return state == NetworkStateInformer::ONLINE &&
123 reason != ErrorScreenActor::ERROR_REASON_PORTAL_DETECTED && 123 reason != ErrorScreenActor::ERROR_REASON_PORTAL_DETECTED &&
124 reason != ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT; 124 reason != ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT;
125 } 125 }
126 126
127 bool IsUnderCaptivePortal(NetworkStateInformer::State state, 127 bool IsBehindCaptivePortal(NetworkStateInformer::State state,
128 ErrorScreenActor::ErrorReason reason) { 128 ErrorScreenActor::ErrorReason reason) {
129 return state == NetworkStateInformer::CAPTIVE_PORTAL || 129 return state == NetworkStateInformer::CAPTIVE_PORTAL ||
130 reason == ErrorScreenActor::ERROR_REASON_PORTAL_DETECTED; 130 reason == ErrorScreenActor::ERROR_REASON_PORTAL_DETECTED;
131 } 131 }
132 132
133 bool IsProxyError(NetworkStateInformer::State state, 133 bool IsProxyError(NetworkStateInformer::State state,
134 ErrorScreenActor::ErrorReason reason, 134 ErrorScreenActor::ErrorReason reason,
135 net::Error frame_error) { 135 net::Error frame_error) {
136 return state == NetworkStateInformer::PROXY_AUTH_REQUIRED || 136 return state == NetworkStateInformer::PROXY_AUTH_REQUIRED ||
137 reason == ErrorScreenActor::ERROR_REASON_PROXY_AUTH_CANCELLED || 137 reason == ErrorScreenActor::ERROR_REASON_PROXY_AUTH_CANCELLED ||
138 reason == ErrorScreenActor::ERROR_REASON_PROXY_CONNECTION_FAILED || 138 reason == ErrorScreenActor::ERROR_REASON_PROXY_CONNECTION_FAILED ||
(...skipping 16 matching lines...) Expand all
155 155
156 // Returns network name by service path. 156 // Returns network name by service path.
157 std::string GetNetworkName(const std::string& service_path) { 157 std::string GetNetworkName(const std::string& service_path) {
158 const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> 158 const NetworkState* network = NetworkHandler::Get()->network_state_handler()->
159 GetNetworkState(service_path); 159 GetNetworkState(service_path);
160 if (!network) 160 if (!network)
161 return std::string(); 161 return std::string();
162 return network->name(); 162 return network->name();
163 } 163 }
164 164
165 // Returns captive portal state for a network by its service path.
166 NetworkPortalDetector::CaptivePortalState GetCaptivePortalState(
167 const std::string& service_path) {
168 NetworkPortalDetector* detector = NetworkPortalDetector::Get();
169 const NetworkState* network = NetworkHandler::Get()->network_state_handler()->
170 GetNetworkState(service_path);
171 if (!detector || !network)
172 return NetworkPortalDetector::CaptivePortalState();
173 return detector->GetCaptivePortalState(network);
174 }
175
176 void RecordDiscrepancyWithShill(
177 const NetworkState* network,
178 const NetworkPortalDetector::CaptivePortalStatus status) {
179 if (network->connection_state() == shill::kStateOnline) {
180 UMA_HISTOGRAM_ENUMERATION(
181 "CaptivePortal.OOBE.DiscrepancyWithShill_Online",
182 status,
183 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT);
184 } else if (network->connection_state() == shill::kStatePortal) {
185 UMA_HISTOGRAM_ENUMERATION(
186 "CaptivePortal.OOBE.DiscrepancyWithShill_RestrictedPool",
187 status,
188 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT);
189 } else {
190 UMA_HISTOGRAM_ENUMERATION(
191 "CaptivePortal.OOBE.DiscrepancyWithShill_Offline",
192 status,
193 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT);
194 }
195 }
196
197 // Record state and descripancies with shill (e.g. shill thinks that
198 // network is online but NetworkPortalDetector claims that it's behind
199 // portal) for the network identified by |service_path|.
200 void RecordNetworkPortalDetectorStats(const std::string& service_path) {
201 const NetworkState* network = NetworkHandler::Get()->network_state_handler()->
202 GetNetworkState(service_path);
203 if (!network)
204 return;
205 NetworkPortalDetector::CaptivePortalState state =
206 GetCaptivePortalState(service_path);
207 if (state.status == NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_UNKNOWN)
208 return;
209
210 UMA_HISTOGRAM_ENUMERATION("CaptivePortal.OOBE.DetectionResult",
211 state.status,
212 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT);
213
214 switch (state.status) {
215 case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_UNKNOWN:
216 NOTREACHED();
217 break;
218 case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_OFFLINE:
219 if (network->connection_state() == shill::kStateOnline ||
220 network->connection_state() == shill::kStatePortal)
221 RecordDiscrepancyWithShill(network, state.status);
222 break;
223 case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE:
224 if (network->connection_state() != shill::kStateOnline)
225 RecordDiscrepancyWithShill(network, state.status);
226 break;
227 case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL:
228 if (network->connection_state() != shill::kStatePortal)
229 RecordDiscrepancyWithShill(network, state.status);
230 break;
231 case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED:
232 if (network->connection_state() != shill::kStateOnline)
233 RecordDiscrepancyWithShill(network, state.status);
234 break;
235 case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT:
236 NOTREACHED();
237 break;
238 }
239 }
240
241 static bool SetUserInputMethodImpl( 165 static bool SetUserInputMethodImpl(
242 const std::string& username, 166 const std::string& username,
243 chromeos::input_method::InputMethodManager* manager) { 167 chromeos::input_method::InputMethodManager* manager) {
244 PrefService* const local_state = g_browser_process->local_state(); 168 PrefService* const local_state = g_browser_process->local_state();
245 169
246 const base::DictionaryValue* users_lru_input_methods = 170 const base::DictionaryValue* users_lru_input_methods =
247 local_state->GetDictionary(prefs::kUsersLRUInputMethod); 171 local_state->GetDictionary(prefs::kUsersLRUInputMethod);
248 172
249 if (users_lru_input_methods == NULL) { 173 if (users_lru_input_methods == NULL) {
250 DLOG(WARNING) << "SetUserInputMethod('" << username 174 DLOG(WARNING) << "SetUserInputMethod('" << username
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 base::MessageLoop::current()->PostDelayedTask( 523 base::MessageLoop::current()->PostDelayedTask(
600 FROM_HERE, 524 FROM_HERE,
601 connecting_closure_.callback(), 525 connecting_closure_.callback(),
602 base::TimeDelta::FromSeconds(kConnectingTimeoutSec)); 526 base::TimeDelta::FromSeconds(kConnectingTimeoutSec));
603 } 527 }
604 return; 528 return;
605 } 529 }
606 connecting_closure_.Cancel(); 530 connecting_closure_.Cancel();
607 531
608 const bool is_online = IsOnline(state, reason); 532 const bool is_online = IsOnline(state, reason);
609 const bool is_under_captive_portal = IsUnderCaptivePortal(state, reason); 533 const bool is_behind_captive_portal = IsBehindCaptivePortal(state, reason);
610 const bool is_gaia_loading_timeout = 534 const bool is_gaia_loading_timeout =
611 (reason == ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT); 535 (reason == ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT);
612 const bool is_gaia_error = 536 const bool is_gaia_error =
613 FrameError() != net::OK && FrameError() != net::ERR_NETWORK_CHANGED; 537 FrameError() != net::OK && FrameError() != net::ERR_NETWORK_CHANGED;
614 const bool is_gaia_signin = IsGaiaVisible() || IsGaiaHiddenByError(); 538 const bool is_gaia_signin = IsGaiaVisible() || IsGaiaHiddenByError();
615 const bool error_screen_should_overlay = 539 const bool error_screen_should_overlay =
616 !offline_login_active_ && IsGaiaVisible(); 540 !offline_login_active_ && IsGaiaVisible();
617 const bool from_not_online_to_online_transition = 541 const bool from_not_online_to_online_transition =
618 is_online && last_network_state_ != NetworkStateInformer::ONLINE; 542 is_online && last_network_state_ != NetworkStateInformer::ONLINE;
619 last_network_state_ = state; 543 last_network_state_ = state;
620 544
621 if (is_online || !is_under_captive_portal) 545 if (is_online || !is_behind_captive_portal)
622 error_screen_actor_->HideCaptivePortal(); 546 error_screen_actor_->HideCaptivePortal();
623 547
624 // Hide offline message (if needed) and return if current screen is 548 // Hide offline message (if needed) and return if current screen is
625 // not a Gaia frame. 549 // not a Gaia frame.
626 if (!is_gaia_signin) { 550 if (!is_gaia_signin) {
627 if (!IsSigninScreenHiddenByError()) 551 if (!IsSigninScreenHiddenByError())
628 HideOfflineMessage(state, reason); 552 HideOfflineMessage(state, reason);
629 return; 553 return;
630 } 554 }
631 555
(...skipping 24 matching lines...) Expand all
656 SetupAndShowOfflineMessage(state, reason); 580 SetupAndShowOfflineMessage(state, reason);
657 } else { 581 } else {
658 HideOfflineMessage(state, reason); 582 HideOfflineMessage(state, reason);
659 } 583 }
660 } 584 }
661 585
662 void SigninScreenHandler::SetupAndShowOfflineMessage( 586 void SigninScreenHandler::SetupAndShowOfflineMessage(
663 NetworkStateInformer:: State state, 587 NetworkStateInformer:: State state,
664 ErrorScreenActor::ErrorReason reason) { 588 ErrorScreenActor::ErrorReason reason) {
665 const std::string network_path = network_state_informer_->network_path(); 589 const std::string network_path = network_state_informer_->network_path();
666 const bool is_under_captive_portal = IsUnderCaptivePortal(state, reason); 590 const bool is_behind_captive_portal = IsBehindCaptivePortal(state, reason);
667 const bool is_proxy_error = IsProxyError(state, reason, FrameError()); 591 const bool is_proxy_error = IsProxyError(state, reason, FrameError());
668 const bool is_gaia_loading_timeout = 592 const bool is_gaia_loading_timeout =
669 (reason == ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT); 593 (reason == ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT);
670 594
671 // Record portal detection stats only if we're going to show or
672 // change state of the error screen.
673 RecordNetworkPortalDetectorStats(network_path);
674
675 if (is_proxy_error) { 595 if (is_proxy_error) {
676 error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_PROXY, 596 error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_PROXY,
677 std::string()); 597 std::string());
678 } else if (is_under_captive_portal) { 598 } else if (is_behind_captive_portal) {
679 // Do not bother a user with obsessive captive portal showing. This 599 // Do not bother a user with obsessive captive portal showing. This
680 // check makes captive portal being shown only once: either when error 600 // check makes captive portal being shown only once: either when error
681 // screen is shown for the first time or when switching from another 601 // screen is shown for the first time or when switching from another
682 // error screen (offline, proxy). 602 // error screen (offline, proxy).
683 if (IsGaiaVisible() || 603 if (IsGaiaVisible() ||
684 (error_screen_actor_->error_state() != 604 (error_screen_actor_->error_state() !=
685 ErrorScreen::ERROR_STATE_PORTAL)) { 605 ErrorScreen::ERROR_STATE_PORTAL)) {
686 error_screen_actor_->FixCaptivePortal(); 606 error_screen_actor_->FixCaptivePortal();
687 } 607 }
688 const std::string network_name = GetNetworkName(network_path); 608 const std::string network_name = GetNetworkName(network_path);
(...skipping 1016 matching lines...) Expand 10 before | Expand all | Expand 10 after
1705 DCHECK(gaia_screen_handler_); 1625 DCHECK(gaia_screen_handler_);
1706 return gaia_screen_handler_->frame_state(); 1626 return gaia_screen_handler_->frame_state();
1707 } 1627 }
1708 1628
1709 net::Error SigninScreenHandler::FrameError() const { 1629 net::Error SigninScreenHandler::FrameError() const {
1710 DCHECK(gaia_screen_handler_); 1630 DCHECK(gaia_screen_handler_);
1711 return gaia_screen_handler_->frame_error(); 1631 return gaia_screen_handler_->frame_error();
1712 } 1632 }
1713 1633
1714 } // namespace chromeos 1634 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698