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

Side by Side Diff: chrome/browser/chromeos/proxy_config_service_impl.cc

Issue 8727037: Signed settings refactoring: Proper caching and more tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased to ToT and removed some debug output left. Created 9 years 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) 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/chromeos/proxy_config_service_impl.h" 5 #include "chrome/browser/chromeos/proxy_config_service_impl.h"
6 6
7 #include <ostream> 7 #include <ostream>
8 8
9 #include "base/bind.h"
9 #include "base/json/json_value_serializer.h" 10 #include "base/json/json_value_serializer.h"
10 #include "base/logging.h" 11 #include "base/logging.h"
11 #include "base/string_util.h" 12 #include "base/string_util.h"
12 #include "chrome/browser/chromeos/cros/cros_library.h" 13 #include "chrome/browser/chromeos/cros/cros_library.h"
14 #include "chrome/browser/chromeos/cros_settings.h"
13 #include "chrome/browser/chromeos/cros_settings_names.h" 15 #include "chrome/browser/chromeos/cros_settings_names.h"
14 #include "chrome/browser/chromeos/login/user_manager.h" 16 #include "chrome/browser/chromeos/login/user_manager.h"
15 #include "chrome/browser/policy/proto/chrome_device_policy.pb.h" 17 #include "chrome/browser/policy/proto/chrome_device_policy.pb.h"
16 #include "chrome/browser/prefs/pref_service.h" 18 #include "chrome/browser/prefs/pref_service.h"
17 #include "chrome/browser/prefs/proxy_config_dictionary.h" 19 #include "chrome/browser/prefs/proxy_config_dictionary.h"
18 #include "chrome/browser/prefs/proxy_prefs.h" 20 #include "chrome/browser/prefs/proxy_prefs.h"
19 #include "chrome/browser/profiles/profile_manager.h" 21 #include "chrome/browser/profiles/profile_manager.h"
20 #include "chrome/common/chrome_notification_types.h" 22 #include "chrome/common/chrome_notification_types.h"
21 #include "chrome/common/pref_names.h" 23 #include "chrome/common/pref_names.h"
22 #include "content/public/browser/notification_service.h" 24 #include "content/public/browser/notification_service.h"
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 *spec += scheme; 347 *spec += scheme;
346 *spec += "="; 348 *spec += "=";
347 } 349 }
348 *spec += server.ToURI(); 350 *spec += server.ToURI();
349 } 351 }
350 352
351 //------------------- ProxyConfigServiceImpl: public methods ------------------- 353 //------------------- ProxyConfigServiceImpl: public methods -------------------
352 354
353 ProxyConfigServiceImpl::ProxyConfigServiceImpl(PrefService* pref_service) 355 ProxyConfigServiceImpl::ProxyConfigServiceImpl(PrefService* pref_service)
354 : PrefProxyConfigTrackerImpl(pref_service), 356 : PrefProxyConfigTrackerImpl(pref_service),
355 active_config_state_(ProxyPrefs::CONFIG_UNSET) { 357 active_config_state_(ProxyPrefs::CONFIG_UNSET),
358 pointer_factory_(this) {
356 359
357 // Register for notification when user logs in, so that we can activate the 360 // Register for notification when user logs in, so that we can activate the
358 // new proxy config. 361 // new proxy config.
359 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_CHANGED, 362 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_CHANGED,
360 content::NotificationService::AllSources()); 363 content::NotificationService::AllSources());
361 364
362 // Register for notifications of UseSharedProxies user preference. 365 // Register for notifications of UseSharedProxies user preference.
363 if (pref_service->FindPreference(prefs::kUseSharedProxies)) 366 if (pref_service->FindPreference(prefs::kUseSharedProxies))
364 use_shared_proxies_.Init(prefs::kUseSharedProxies, pref_service, this); 367 use_shared_proxies_.Init(prefs::kUseSharedProxies, pref_service, this);
365 368
366 // Start async fetch of proxy config from settings persisted on device. 369 if (CrosSettings::Get()->GetTrusted(
367 if (CrosLibrary::Get()->libcros_loaded()) { 370 kSettingProxyEverywhere,
368 retrieve_property_op_ = SignedSettings::CreateRetrievePropertyOp( 371 base::Bind(&ProxyConfigServiceImpl::FetchProxyPolicy,
369 kSettingProxyEverywhere, this); 372 pointer_factory_.GetWeakPtr()))) {
370 if (retrieve_property_op_) { 373 FetchProxyPolicy();
371 retrieve_property_op_->Execute();
372 VLOG(1) << this << ": Start retrieving proxy setting from device";
373 } else {
374 VLOG(1) << this << ": Fail to retrieve proxy setting from device";
375 }
376 } 374 }
377 375
378 // Register for flimflam network notifications. 376 // Register for flimflam network notifications.
379 NetworkLibrary* network_lib = CrosLibrary::Get()->GetNetworkLibrary(); 377 NetworkLibrary* network_lib = CrosLibrary::Get()->GetNetworkLibrary();
380 OnActiveNetworkChanged(network_lib, network_lib->active_network()); 378 OnActiveNetworkChanged(network_lib, network_lib->active_network());
381 network_lib->AddNetworkManagerObserver(this); 379 network_lib->AddNetworkManagerObserver(this);
382 } 380 }
383 381
384 ProxyConfigServiceImpl::~ProxyConfigServiceImpl() { 382 ProxyConfigServiceImpl::~ProxyConfigServiceImpl() {
385 NetworkLibrary* netlib = CrosLibrary::Get()->GetNetworkLibrary(); 383 NetworkLibrary* netlib = CrosLibrary::Get()->GetNetworkLibrary();
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 Network* network = NULL; 515 Network* network = NULL;
518 if (!active_network_.empty()) { 516 if (!active_network_.empty()) {
519 network = CrosLibrary::Get()->GetNetworkLibrary()->FindNetworkByPath( 517 network = CrosLibrary::Get()->GetNetworkLibrary()->FindNetworkByPath(
520 active_network_); 518 active_network_);
521 if (!network) 519 if (!network)
522 LOG(ERROR) << "can't find requested network " << active_network_; 520 LOG(ERROR) << "can't find requested network " << active_network_;
523 } 521 }
524 DetermineEffectiveConfig(network, true); 522 DetermineEffectiveConfig(network, true);
525 } 523 }
526 524
527 void ProxyConfigServiceImpl::OnSettingsOpCompleted(
528 SignedSettings::ReturnCode code,
529 const base::Value* value) {
530 retrieve_property_op_ = NULL;
531 if (code != SignedSettings::SUCCESS) {
532 LOG(WARNING) << this << ": Error retrieving proxy setting from device";
533 device_config_.clear();
534 return;
535 }
536 std::string policy_value;
537 value->GetAsString(&policy_value);
538 VLOG(1) << "Retrieved proxy setting from device, value=["
539 << policy_value << "]";
540 ProxyConfig device_config;
541 if (!device_config.DeserializeForDevice(policy_value) ||
542 !device_config.SerializeForNetwork(&device_config_)) {
543 LOG(WARNING) << "Can't deserialize device setting or serialize for network";
544 device_config_.clear();
545 return;
546 }
547 if (!active_network_.empty()) {
548 VLOG(1) << this << ": try migrating device config to " << active_network_;
549 SetProxyConfigForNetwork(active_network_, device_config_, true);
550 }
551 }
552
553 void ProxyConfigServiceImpl::OnNetworkManagerChanged( 525 void ProxyConfigServiceImpl::OnNetworkManagerChanged(
554 NetworkLibrary* network_lib) { 526 NetworkLibrary* network_lib) {
555 VLOG(1) << this << " OnNetworkManagerChanged: use-shared-proxies=" 527 VLOG(1) << this << " OnNetworkManagerChanged: use-shared-proxies="
556 << GetUseSharedProxies(); 528 << GetUseSharedProxies();
557 OnActiveNetworkChanged(network_lib, network_lib->active_network()); 529 OnActiveNetworkChanged(network_lib, network_lib->active_network());
558 } 530 }
559 531
560 void ProxyConfigServiceImpl::OnNetworkChanged(NetworkLibrary* network_lib, 532 void ProxyConfigServiceImpl::OnNetworkChanged(NetworkLibrary* network_lib,
561 const Network* network) { 533 const Network* network) {
562 if (!network) 534 if (!network)
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 ++iter; 784 ++iter;
813 } 785 }
814 } 786 }
815 } 787 }
816 788
817 void ProxyConfigServiceImpl::ResetUICache() { 789 void ProxyConfigServiceImpl::ResetUICache() {
818 current_ui_network_.clear(); 790 current_ui_network_.clear();
819 current_ui_config_ = ProxyConfig(); 791 current_ui_config_ = ProxyConfig();
820 } 792 }
821 793
794 void ProxyConfigServiceImpl::FetchProxyPolicy() {
795 // We assume ownership here to make sure this gets deleted no matter where
796 // this function ends.
Mattias Nissler (ping if slow) 2011/11/30 12:25:50 ?
pastarmovj 2011/11/30 17:21:16 Dead comment :)
797 std::string policy_value = "";
798 if (!CrosSettings::Get()->GetString(kSettingProxyEverywhere,
799 &policy_value)) {
800 LOG(WARNING) << this << ": Error retrieving proxy setting from device";
801 device_config_.clear();
802 return;
803 }
804
805 VLOG(1) << "Retrieved proxy setting from device, value=["
806 << policy_value << "]";
807 ProxyConfig device_config;
808 if (!device_config.DeserializeForDevice(policy_value) ||
809 !device_config.SerializeForNetwork(&device_config_)) {
810 LOG(WARNING) << "Can't deserialize device setting or serialize for network";
811 device_config_.clear();
812 return;
813 }
814 if (!active_network_.empty()) {
815 VLOG(1) << this << ": try migrating device config to " << active_network_;
816 SetProxyConfigForNetwork(active_network_, device_config_, true);
817 }
818 }
819
822 } // namespace chromeos 820 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698