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

Side by Side Diff: chrome/browser/chromeos/net/network_portal_detector_impl.cc

Issue 242483003: Move CaptivePortalDetector to src/components/captive_portal (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move CaptivePortalDetector to a component Created 6 years, 8 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/chromeos/net/network_portal_detector_impl.h" 5 #include "chrome/browser/chromeos/net/network_portal_detector_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 22 matching lines...) Expand all
33 const int kProxyChangeDelaySec = 1; 33 const int kProxyChangeDelaySec = 1;
34 34
35 const NetworkState* DefaultNetwork() { 35 const NetworkState* DefaultNetwork() {
36 return NetworkHandler::Get()->network_state_handler()->DefaultNetwork(); 36 return NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
37 } 37 }
38 38
39 bool InSession() { 39 bool InSession() {
40 return UserManager::IsInitialized() && UserManager::Get()->IsUserLoggedIn(); 40 return UserManager::IsInitialized() && UserManager::Get()->IsUserLoggedIn();
41 } 41 }
42 42
43 void RecordDetectionResult(NetworkPortalDetector::CaptivePortalStatus status) { 43 void RecordDetectionResult(captive_portal::CaptivePortalStatus status) {
44 if (InSession()) { 44 if (InSession()) {
45 UMA_HISTOGRAM_ENUMERATION( 45 UMA_HISTOGRAM_ENUMERATION(
46 NetworkPortalDetectorImpl::kSessionDetectionResultHistogram, 46 NetworkPortalDetectorImpl::kSessionDetectionResultHistogram,
47 status, 47 status,
48 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT); 48 captive_portal::CAPTIVE_PORTAL_STATUS_COUNT);
49 } else { 49 } else {
50 UMA_HISTOGRAM_ENUMERATION( 50 UMA_HISTOGRAM_ENUMERATION(
51 NetworkPortalDetectorImpl::kOobeDetectionResultHistogram, 51 NetworkPortalDetectorImpl::kOobeDetectionResultHistogram,
52 status, 52 status,
53 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT); 53 captive_portal::CAPTIVE_PORTAL_STATUS_COUNT);
54 } 54 }
55 } 55 }
56 56
57 void RecordDetectionDuration(const base::TimeDelta& duration) { 57 void RecordDetectionDuration(const base::TimeDelta& duration) {
58 if (InSession()) { 58 if (InSession()) {
59 UMA_HISTOGRAM_MEDIUM_TIMES( 59 UMA_HISTOGRAM_MEDIUM_TIMES(
60 NetworkPortalDetectorImpl::kSessionDetectionDurationHistogram, 60 NetworkPortalDetectorImpl::kSessionDetectionDurationHistogram,
61 duration); 61 duration);
62 } else { 62 } else {
63 UMA_HISTOGRAM_MEDIUM_TIMES( 63 UMA_HISTOGRAM_MEDIUM_TIMES(
64 NetworkPortalDetectorImpl::kOobeDetectionDurationHistogram, duration); 64 NetworkPortalDetectorImpl::kOobeDetectionDurationHistogram, duration);
65 } 65 }
66 } 66 }
67 67
68 void RecordDiscrepancyWithShill( 68 void RecordDiscrepancyWithShill(
69 const NetworkState* network, 69 const NetworkState* network,
70 const NetworkPortalDetector::CaptivePortalStatus status) { 70 const captive_portal::CaptivePortalStatus status) {
71 if (InSession()) { 71 if (InSession()) {
72 if (network->connection_state() == shill::kStateOnline) { 72 if (network->connection_state() == shill::kStateOnline) {
73 UMA_HISTOGRAM_ENUMERATION( 73 UMA_HISTOGRAM_ENUMERATION(
74 NetworkPortalDetectorImpl::kSessionShillOnlineHistogram, 74 NetworkPortalDetectorImpl::kSessionShillOnlineHistogram,
75 status, 75 status,
76 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT); 76 captive_portal::CAPTIVE_PORTAL_STATUS_COUNT);
77 } else if (network->connection_state() == shill::kStatePortal) { 77 } else if (network->connection_state() == shill::kStatePortal) {
78 UMA_HISTOGRAM_ENUMERATION( 78 UMA_HISTOGRAM_ENUMERATION(
79 NetworkPortalDetectorImpl::kSessionShillPortalHistogram, 79 NetworkPortalDetectorImpl::kSessionShillPortalHistogram,
80 status, 80 status,
81 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT); 81 captive_portal::CAPTIVE_PORTAL_STATUS_COUNT);
82 } else if (network->connection_state() == shill::kStateOffline) { 82 } else if (network->connection_state() == shill::kStateOffline) {
83 UMA_HISTOGRAM_ENUMERATION( 83 UMA_HISTOGRAM_ENUMERATION(
84 NetworkPortalDetectorImpl::kSessionShillOfflineHistogram, 84 NetworkPortalDetectorImpl::kSessionShillOfflineHistogram,
85 status, 85 status,
86 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT); 86 captive_portal::CAPTIVE_PORTAL_STATUS_COUNT);
87 } 87 }
88 } else { 88 } else {
89 if (network->connection_state() == shill::kStateOnline) { 89 if (network->connection_state() == shill::kStateOnline) {
90 UMA_HISTOGRAM_ENUMERATION( 90 UMA_HISTOGRAM_ENUMERATION(
91 NetworkPortalDetectorImpl::kOobeShillOnlineHistogram, 91 NetworkPortalDetectorImpl::kOobeShillOnlineHistogram,
92 status, 92 status,
93 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT); 93 captive_portal::CAPTIVE_PORTAL_STATUS_COUNT);
94 } else if (network->connection_state() == shill::kStatePortal) { 94 } else if (network->connection_state() == shill::kStatePortal) {
95 UMA_HISTOGRAM_ENUMERATION( 95 UMA_HISTOGRAM_ENUMERATION(
96 NetworkPortalDetectorImpl::kOobeShillPortalHistogram, 96 NetworkPortalDetectorImpl::kOobeShillPortalHistogram,
97 status, 97 status,
98 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT); 98 captive_portal::CAPTIVE_PORTAL_STATUS_COUNT);
99 } else if (network->connection_state() == shill::kStateOffline) { 99 } else if (network->connection_state() == shill::kStateOffline) {
100 UMA_HISTOGRAM_ENUMERATION( 100 UMA_HISTOGRAM_ENUMERATION(
101 NetworkPortalDetectorImpl::kOobeShillOfflineHistogram, 101 NetworkPortalDetectorImpl::kOobeShillOfflineHistogram,
102 status, 102 status,
103 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT); 103 captive_portal::CAPTIVE_PORTAL_STATUS_COUNT);
104 } 104 }
105 } 105 }
106 } 106 }
107 107
108 void RecordPortalToOnlineTransition(const base::TimeDelta& duration) { 108 void RecordPortalToOnlineTransition(const base::TimeDelta& duration) {
109 if (InSession()) { 109 if (InSession()) {
110 UMA_HISTOGRAM_LONG_TIMES( 110 UMA_HISTOGRAM_LONG_TIMES(
111 NetworkPortalDetectorImpl::kSessionPortalToOnlineHistogram, 111 NetworkPortalDetectorImpl::kSessionPortalToOnlineHistogram,
112 duration); 112 duration);
113 } else { 113 } else {
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 const NetworkState* default_network) { 256 const NetworkState* default_network) {
257 DCHECK(CalledOnValidThread()); 257 DCHECK(CalledOnValidThread());
258 258
259 if (!default_network) { 259 if (!default_network) {
260 default_network_name_.clear(); 260 default_network_name_.clear();
261 default_network_id_.clear(); 261 default_network_id_.clear();
262 262
263 StopDetection(); 263 StopDetection();
264 264
265 CaptivePortalState state; 265 CaptivePortalState state;
266 state.status = CAPTIVE_PORTAL_STATUS_OFFLINE; 266 state.status = captive_portal::CAPTIVE_PORTAL_STATUS_OFFLINE;
267 OnDetectionCompleted(NULL, state); 267 OnDetectionCompleted(NULL, state);
268 return; 268 return;
269 } 269 }
270 270
271 default_network_name_ = default_network->name(); 271 default_network_name_ = default_network->name();
272 default_network_id_ = default_network->guid(); 272 default_network_id_ = default_network->guid();
273 273
274 bool network_changed = (default_service_path_ != default_network->path()); 274 bool network_changed = (default_service_path_ != default_network->path());
275 default_service_path_ = default_network->path(); 275 default_service_path_ = default_network->path();
276 276
277 bool connection_state_changed = 277 bool connection_state_changed =
278 (default_connection_state_ != default_network->connection_state()); 278 (default_connection_state_ != default_network->connection_state());
279 default_connection_state_ = default_network->connection_state(); 279 default_connection_state_ = default_network->connection_state();
280 280
281 if (network_changed || connection_state_changed) 281 if (network_changed || connection_state_changed)
282 StopDetection(); 282 StopDetection();
283 283
284 if (CanPerformAttempt() && 284 if (CanPerformAttempt() &&
285 NetworkState::StateIsConnected(default_connection_state_)) { 285 NetworkState::StateIsConnected(default_connection_state_)) {
286 // Initiate Captive Portal detection if network's captive 286 // Initiate Captive Portal detection if network's captive
287 // portal state is unknown (e.g. for freshly created networks), 287 // portal state is unknown (e.g. for freshly created networks),
288 // offline or if network connection state was changed. 288 // offline or if network connection state was changed.
289 CaptivePortalState state = GetCaptivePortalState(default_network->path()); 289 CaptivePortalState state = GetCaptivePortalState(default_network->path());
290 if (state.status == CAPTIVE_PORTAL_STATUS_UNKNOWN || 290 if (state.status == captive_portal::CAPTIVE_PORTAL_STATUS_UNKNOWN ||
291 state.status == CAPTIVE_PORTAL_STATUS_OFFLINE || 291 state.status == captive_portal::CAPTIVE_PORTAL_STATUS_OFFLINE ||
292 (!network_changed && connection_state_changed)) { 292 (!network_changed && connection_state_changed)) {
293 ScheduleAttempt(base::TimeDelta()); 293 ScheduleAttempt(base::TimeDelta());
294 } 294 }
295 } 295 }
296 } 296 }
297 297
298 int NetworkPortalDetectorImpl::AttemptCount() { return attempt_count_; } 298 int NetworkPortalDetectorImpl::AttemptCount() { return attempt_count_; }
299 299
300 base::TimeTicks NetworkPortalDetectorImpl::AttemptStartTime() { 300 base::TimeTicks NetworkPortalDetectorImpl::AttemptStartTime() {
301 return attempt_start_time_; 301 return attempt_start_time_;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 << "id=" << default_network_id_; 384 << "id=" << default_network_id_;
385 385
386 captive_portal_detector_->Cancel(); 386 captive_portal_detector_->Cancel();
387 CaptivePortalDetector::Results results; 387 CaptivePortalDetector::Results results;
388 results.result = captive_portal::RESULT_NO_RESPONSE; 388 results.result = captive_portal::RESULT_NO_RESPONSE;
389 OnAttemptCompleted(results); 389 OnAttemptCompleted(results);
390 } 390 }
391 391
392 void NetworkPortalDetectorImpl::OnAttemptCompleted( 392 void NetworkPortalDetectorImpl::OnAttemptCompleted(
393 const CaptivePortalDetector::Results& results) { 393 const CaptivePortalDetector::Results& results) {
394 captive_portal::Result result = results.result; 394 captive_portal::CaptivePortalResult result = results.result;
395 int response_code = results.response_code; 395 int response_code = results.response_code;
396 396
397 DCHECK(CalledOnValidThread()); 397 DCHECK(CalledOnValidThread());
398 DCHECK(is_checking_for_portal()); 398 DCHECK(is_checking_for_portal());
399 399
400 VLOG(1) << "Detection attempt completed: " 400 VLOG(1) << "Detection attempt completed: "
401 << "name=" << default_network_name_ << ", " 401 << "name=" << default_network_name_ << ", "
402 << "id=" << default_network_id_ << ", " 402 << "id=" << default_network_id_ << ", "
403 << "result=" 403 << "result="
404 << CaptivePortalDetector::CaptivePortalResultToString(results.result) 404 << captive_portal::CaptivePortalResultToString(results.result)
405 << ", " 405 << ", "
406 << "response_code=" << results.response_code; 406 << "response_code=" << results.response_code;
407 407
408 state_ = STATE_IDLE; 408 state_ = STATE_IDLE;
409 attempt_timeout_.Cancel(); 409 attempt_timeout_.Cancel();
410 ++attempt_count_; 410 ++attempt_count_;
411 411
412 const NetworkState* network = DefaultNetwork(); 412 const NetworkState* network = DefaultNetwork();
413 413
414 // If using a fake profile client, also fake being behind a captive portal 414 // If using a fake profile client, also fake being behind a captive portal
415 // if the default network is in portal state. 415 // if the default network is in portal state.
416 if (result != captive_portal::RESULT_NO_RESPONSE && 416 if (result != captive_portal::RESULT_NO_RESPONSE &&
417 DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface() && 417 DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface() &&
418 network && network->connection_state() == shill::kStatePortal) { 418 network && network->connection_state() == shill::kStatePortal) {
419 result = captive_portal::RESULT_BEHIND_CAPTIVE_PORTAL; 419 result = captive_portal::RESULT_BEHIND_CAPTIVE_PORTAL;
420 response_code = 200; 420 response_code = 200;
421 } 421 }
422 422
423 CaptivePortalState state; 423 CaptivePortalState state;
424 state.response_code = response_code; 424 state.response_code = response_code;
425 state.time = GetCurrentTimeTicks(); 425 state.time = GetCurrentTimeTicks();
426 switch (result) { 426 switch (result) {
427 case captive_portal::RESULT_NO_RESPONSE: 427 case captive_portal::RESULT_NO_RESPONSE:
428 if (state.response_code == net::HTTP_PROXY_AUTHENTICATION_REQUIRED) { 428 if (state.response_code == net::HTTP_PROXY_AUTHENTICATION_REQUIRED) {
429 state.status = CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED; 429 state.status =
430 captive_portal::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED;
430 } else if (CanPerformAttempt()) { 431 } else if (CanPerformAttempt()) {
431 ScheduleAttempt(results.retry_after_delta); 432 ScheduleAttempt(results.retry_after_delta);
432 return; 433 return;
433 } else if (network && 434 } else if (network &&
434 (network->connection_state() == shill::kStatePortal)) { 435 (network->connection_state() == shill::kStatePortal)) {
435 // Take into account shill's detection results. 436 // Take into account shill's detection results.
436 state.status = CAPTIVE_PORTAL_STATUS_PORTAL; 437 state.status = captive_portal::CAPTIVE_PORTAL_STATUS_PORTAL;
437 LOG(WARNING) << "Network name=" << network->name() << ", " 438 LOG(WARNING) << "Network name=" << network->name() << ", "
438 << "id=" << network->guid() << " " 439 << "id=" << network->guid() << " is marked as "
439 << "is marked as " 440 << captive_portal::CaptivePortalStatusString(state.status)
440 << CaptivePortalStatusString(state.status) << " " 441 << " despite no response from CaptivePortalDetector.";
441 << "despite the fact that CaptivePortalDetector "
442 << "received no response";
443 } else { 442 } else {
444 state.status = CAPTIVE_PORTAL_STATUS_OFFLINE; 443 state.status = captive_portal::CAPTIVE_PORTAL_STATUS_OFFLINE;
445 } 444 }
446 break; 445 break;
447 case captive_portal::RESULT_INTERNET_CONNECTED: 446 case captive_portal::RESULT_INTERNET_CONNECTED:
448 state.status = CAPTIVE_PORTAL_STATUS_ONLINE; 447 state.status = captive_portal::CAPTIVE_PORTAL_STATUS_ONLINE;
449 break; 448 break;
450 case captive_portal::RESULT_BEHIND_CAPTIVE_PORTAL: 449 case captive_portal::RESULT_BEHIND_CAPTIVE_PORTAL:
451 state.status = CAPTIVE_PORTAL_STATUS_PORTAL; 450 state.status = captive_portal::CAPTIVE_PORTAL_STATUS_PORTAL;
452 break; 451 break;
453 default: 452 default:
454 break; 453 break;
455 } 454 }
456 455
457 OnDetectionCompleted(network, state); 456 OnDetectionCompleted(network, state);
458 if (CanPerformAttempt() && strategy_->CanPerformAttemptAfterDetection()) 457 if (CanPerformAttempt() && strategy_->CanPerformAttemptAfterDetection())
459 ScheduleAttempt(base::TimeDelta()); 458 ScheduleAttempt(base::TimeDelta());
460 } 459 }
461 460
(...skipping 22 matching lines...) Expand all
484 NotifyDetectionCompleted(network, state); 483 NotifyDetectionCompleted(network, state);
485 return; 484 return;
486 } 485 }
487 486
488 CaptivePortalStateMap::const_iterator it = 487 CaptivePortalStateMap::const_iterator it =
489 portal_state_map_.find(network->path()); 488 portal_state_map_.find(network->path());
490 if (it == portal_state_map_.end() || it->second.status != state.status || 489 if (it == portal_state_map_.end() || it->second.status != state.status ||
491 it->second.response_code != state.response_code) { 490 it->second.response_code != state.response_code) {
492 VLOG(1) << "Updating Chrome Captive Portal state: " 491 VLOG(1) << "Updating Chrome Captive Portal state: "
493 << "name=" << network->name() << ", " 492 << "name=" << network->name() << ", "
494 << "id=" << network->guid() << ", " 493 << "id=" << network->guid() << ", status="
495 << "status=" << CaptivePortalStatusString(state.status) << ", " 494 << captive_portal::CaptivePortalStatusString(state.status)
496 << "response_code=" << state.response_code; 495 << ", response_code=" << state.response_code;
497 496
498 // Record detection duration iff detection result differs from the 497 // Record detection duration iff detection result differs from the
499 // previous one for this network. The reason is to record all stats 498 // previous one for this network. The reason is to record all stats
500 // only when network changes it's state. 499 // only when network changes it's state.
501 RecordDetectionStats(network, state.status); 500 RecordDetectionStats(network, state.status);
502 if (it != portal_state_map_.end() && 501 if (it != portal_state_map_.end() &&
503 it->second.status == CAPTIVE_PORTAL_STATUS_PORTAL && 502 it->second.status == captive_portal::CAPTIVE_PORTAL_STATUS_PORTAL &&
504 state.status == CAPTIVE_PORTAL_STATUS_ONLINE) { 503 state.status == captive_portal::CAPTIVE_PORTAL_STATUS_ONLINE) {
505 RecordPortalToOnlineTransition(state.time - it->second.time); 504 RecordPortalToOnlineTransition(state.time - it->second.time);
506 } 505 }
507 506
508 portal_state_map_[network->path()] = state; 507 portal_state_map_[network->path()] = state;
509 } 508 }
510 NotifyDetectionCompleted(network, state); 509 NotifyDetectionCompleted(network, state);
511 } 510 }
512 511
513 void NetworkPortalDetectorImpl::NotifyDetectionCompleted( 512 void NetworkPortalDetectorImpl::NotifyDetectionCompleted(
514 const NetworkState* network, 513 const NetworkState* network,
515 const CaptivePortalState& state) { 514 const CaptivePortalState& state) {
516 FOR_EACH_OBSERVER( 515 FOR_EACH_OBSERVER(
517 Observer, observers_, OnPortalDetectionCompleted(network, state)); 516 Observer, observers_, OnPortalDetectionCompleted(network, state));
518 notification_controller_.OnPortalDetectionCompleted(network, state); 517 notification_controller_.OnPortalDetectionCompleted(network, state);
519 } 518 }
520 519
521 bool NetworkPortalDetectorImpl::AttemptTimeoutIsCancelledForTesting() const { 520 bool NetworkPortalDetectorImpl::AttemptTimeoutIsCancelledForTesting() const {
522 return attempt_timeout_.IsCancelled(); 521 return attempt_timeout_.IsCancelled();
523 } 522 }
524 523
525 void NetworkPortalDetectorImpl::RecordDetectionStats( 524 void NetworkPortalDetectorImpl::RecordDetectionStats(
526 const NetworkState* network, 525 const NetworkState* network,
527 CaptivePortalStatus status) { 526 captive_portal::CaptivePortalStatus status) {
528 // Don't record stats for offline state. 527 // Don't record stats for offline state.
529 if (!network) 528 if (!network)
530 return; 529 return;
531 530
532 if (!detection_start_time_.is_null()) 531 if (!detection_start_time_.is_null())
533 RecordDetectionDuration(GetCurrentTimeTicks() - detection_start_time_); 532 RecordDetectionDuration(GetCurrentTimeTicks() - detection_start_time_);
534 RecordDetectionResult(status); 533 RecordDetectionResult(status);
535 534
536 switch (status) { 535 switch (status) {
537 case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_UNKNOWN: 536 case captive_portal::CAPTIVE_PORTAL_STATUS_UNKNOWN:
538 NOTREACHED(); 537 NOTREACHED();
539 break; 538 break;
540 case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_OFFLINE: 539 case captive_portal::CAPTIVE_PORTAL_STATUS_OFFLINE:
541 if (network->connection_state() == shill::kStateOnline || 540 if (network->connection_state() == shill::kStateOnline ||
542 network->connection_state() == shill::kStatePortal) { 541 network->connection_state() == shill::kStatePortal) {
543 RecordDiscrepancyWithShill(network, status); 542 RecordDiscrepancyWithShill(network, status);
544 } 543 }
545 break; 544 break;
546 case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE: 545 case captive_portal::CAPTIVE_PORTAL_STATUS_ONLINE:
547 if (network->connection_state() != shill::kStateOnline) 546 if (network->connection_state() != shill::kStateOnline)
548 RecordDiscrepancyWithShill(network, status); 547 RecordDiscrepancyWithShill(network, status);
549 break; 548 break;
550 case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL: 549 case captive_portal::CAPTIVE_PORTAL_STATUS_PORTAL:
551 if (network->connection_state() != shill::kStatePortal) 550 if (network->connection_state() != shill::kStatePortal)
552 RecordDiscrepancyWithShill(network, status); 551 RecordDiscrepancyWithShill(network, status);
553 break; 552 break;
554 case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED: 553 case captive_portal::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED:
555 if (network->connection_state() != shill::kStateOnline) 554 if (network->connection_state() != shill::kStateOnline)
556 RecordDiscrepancyWithShill(network, status); 555 RecordDiscrepancyWithShill(network, status);
557 break; 556 break;
558 case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT: 557 case captive_portal::CAPTIVE_PORTAL_STATUS_COUNT:
559 NOTREACHED(); 558 NOTREACHED();
560 break; 559 break;
561 } 560 }
562 } 561 }
563 562
564 void NetworkPortalDetectorImpl::UpdateCurrentStrategy() { 563 void NetworkPortalDetectorImpl::UpdateCurrentStrategy() {
565 if (InSession()) { 564 if (InSession()) {
566 SetStrategy(PortalDetectorStrategy::STRATEGY_ID_SESSION); 565 SetStrategy(PortalDetectorStrategy::STRATEGY_ID_SESSION);
567 return; 566 return;
568 } 567 }
569 if (error_screen_displayed_) { 568 if (error_screen_displayed_) {
570 SetStrategy(PortalDetectorStrategy::STRATEGY_ID_ERROR_SCREEN); 569 SetStrategy(PortalDetectorStrategy::STRATEGY_ID_ERROR_SCREEN);
571 return; 570 return;
572 } 571 }
573 SetStrategy(PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN); 572 SetStrategy(PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN);
574 } 573 }
575 574
576 void NetworkPortalDetectorImpl::SetStrategy( 575 void NetworkPortalDetectorImpl::SetStrategy(
577 PortalDetectorStrategy::StrategyId id) { 576 PortalDetectorStrategy::StrategyId id) {
578 if (id == strategy_->Id()) 577 if (id == strategy_->Id())
579 return; 578 return;
580 strategy_.reset(PortalDetectorStrategy::CreateById(id).release()); 579 strategy_.reset(PortalDetectorStrategy::CreateById(id).release());
581 strategy_->set_delegate(this); 580 strategy_->set_delegate(this);
582 StopDetection(); 581 StopDetection();
583 StartDetectionIfIdle(); 582 StartDetectionIfIdle();
584 } 583 }
585 584
586 } // namespace chromeos 585 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698