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

Side by Side Diff: chrome/browser/chromeos/system/ash_system_tray_delegate.cc

Issue 10214013: Created uber tray UI for monitoring ongoing WebDrive sync operations (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 7 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/chromeos/gdata/gdata_util.cc ('k') | ui/resources/ui_resources.grd » ('j') | 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/system/ash_system_tray_delegate.h" 5 #include "chrome/browser/chromeos/system/ash_system_tray_delegate.h"
6 6
7 #include "ash/shell.h" 7 #include "ash/shell.h"
8 #include "ash/shell_window_ids.h" 8 #include "ash/shell_window_ids.h"
9 #include "ash/system/audio/audio_observer.h" 9 #include "ash/system/audio/audio_observer.h"
10 #include "ash/system/bluetooth/bluetooth_observer.h" 10 #include "ash/system/bluetooth/bluetooth_observer.h"
11 #include "ash/system/brightness/brightness_observer.h" 11 #include "ash/system/brightness/brightness_observer.h"
12 #include "ash/system/date/clock_observer.h" 12 #include "ash/system/date/clock_observer.h"
13 #include "ash/system/drive/drive_observer.h"
13 #include "ash/system/ime/ime_observer.h" 14 #include "ash/system/ime/ime_observer.h"
14 #include "ash/system/network/network_observer.h" 15 #include "ash/system/network/network_observer.h"
15 #include "ash/system/power/power_status_observer.h" 16 #include "ash/system/power/power_status_observer.h"
16 #include "ash/system/tray/system_tray.h" 17 #include "ash/system/tray/system_tray.h"
17 #include "ash/system/tray/system_tray_delegate.h" 18 #include "ash/system/tray/system_tray_delegate.h"
18 #include "ash/system/tray_accessibility.h" 19 #include "ash/system/tray_accessibility.h"
19 #include "ash/system/tray_caps_lock.h" 20 #include "ash/system/tray_caps_lock.h"
20 #include "ash/system/user/update_observer.h" 21 #include "ash/system/user/update_observer.h"
21 #include "ash/system/user/user_observer.h" 22 #include "ash/system/user/user_observer.h"
22 #include "base/chromeos/chromeos_version.h" 23 #include "base/chromeos/chromeos_version.h"
23 #include "base/logging.h" 24 #include "base/logging.h"
25 #include "base/memory/weak_ptr.h"
24 #include "base/utf_string_conversions.h" 26 #include "base/utf_string_conversions.h"
25 #include "chrome/browser/browser_process.h" 27 #include "chrome/browser/browser_process.h"
26 #include "chrome/browser/chromeos/audio/audio_handler.h" 28 #include "chrome/browser/chromeos/audio/audio_handler.h"
27 #include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" 29 #include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h"
28 #include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" 30 #include "chrome/browser/chromeos/bluetooth/bluetooth_device.h"
29 #include "chrome/browser/chromeos/cros/cros_library.h" 31 #include "chrome/browser/chromeos/cros/cros_library.h"
30 #include "chrome/browser/chromeos/cros/network_library.h" 32 #include "chrome/browser/chromeos/cros/network_library.h"
33 #include "chrome/browser/chromeos/gdata/gdata_system_service.h"
34 #include "chrome/browser/chromeos/gdata/gdata_util.h"
31 #include "chrome/browser/chromeos/input_method/input_method_manager.h" 35 #include "chrome/browser/chromeos/input_method/input_method_manager.h"
32 #include "chrome/browser/chromeos/input_method/input_method_util.h" 36 #include "chrome/browser/chromeos/input_method/input_method_util.h"
33 #include "chrome/browser/chromeos/input_method/input_method_whitelist.h" 37 #include "chrome/browser/chromeos/input_method/input_method_whitelist.h"
34 #include "chrome/browser/chromeos/input_method/xkeyboard.h" 38 #include "chrome/browser/chromeos/input_method/xkeyboard.h"
35 #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" 39 #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h"
36 #include "chrome/browser/chromeos/login/base_login_display_host.h" 40 #include "chrome/browser/chromeos/login/base_login_display_host.h"
37 #include "chrome/browser/chromeos/login/login_display_host.h" 41 #include "chrome/browser/chromeos/login/login_display_host.h"
38 #include "chrome/browser/chromeos/login/message_bubble.h" 42 #include "chrome/browser/chromeos/login/message_bubble.h"
39 #include "chrome/browser/chromeos/login/user.h" 43 #include "chrome/browser/chromeos/login/user.h"
40 #include "chrome/browser/chromeos/login/user_manager.h" 44 #include "chrome/browser/chromeos/login/user_manager.h"
41 #include "chrome/browser/chromeos/mobile_config.h" 45 #include "chrome/browser/chromeos/mobile_config.h"
42 #include "chrome/browser/chromeos/status/data_promo_notification.h" 46 #include "chrome/browser/chromeos/status/data_promo_notification.h"
43 #include "chrome/browser/chromeos/status/network_menu.h" 47 #include "chrome/browser/chromeos/status/network_menu.h"
44 #include "chrome/browser/chromeos/status/network_menu_icon.h" 48 #include "chrome/browser/chromeos/status/network_menu_icon.h"
45 #include "chrome/browser/chromeos/system/timezone_settings.h" 49 #include "chrome/browser/chromeos/system/timezone_settings.h"
46 #include "chrome/browser/chromeos/system_key_event_listener.h" 50 #include "chrome/browser/chromeos/system_key_event_listener.h"
47 #include "chrome/browser/prefs/pref_service.h" 51 #include "chrome/browser/prefs/pref_service.h"
48 #include "chrome/browser/profiles/profile_manager.h" 52 #include "chrome/browser/profiles/profile_manager.h"
49 #include "chrome/browser/ui/browser.h" 53 #include "chrome/browser/ui/browser.h"
50 #include "chrome/browser/ui/browser_list.h" 54 #include "chrome/browser/ui/browser_list.h"
51 #include "chrome/browser/upgrade_detector.h" 55 #include "chrome/browser/upgrade_detector.h"
52 #include "chrome/common/chrome_notification_types.h" 56 #include "chrome/common/chrome_notification_types.h"
53 #include "chrome/common/pref_names.h" 57 #include "chrome/common/pref_names.h"
54 #include "chrome/common/url_constants.h" 58 #include "chrome/common/url_constants.h"
55 #include "chromeos/dbus/dbus_thread_manager.h" 59 #include "chromeos/dbus/dbus_thread_manager.h"
56 #include "chromeos/dbus/power_manager_client.h" 60 #include "chromeos/dbus/power_manager_client.h"
61 #include "content/public/browser/browser_thread.h"
57 #include "content/public/browser/notification_observer.h" 62 #include "content/public/browser/notification_observer.h"
58 #include "content/public/browser/notification_service.h" 63 #include "content/public/browser/notification_service.h"
59 #include "content/public/browser/user_metrics.h" 64 #include "content/public/browser/user_metrics.h"
60 #include "grit/generated_resources.h" 65 #include "grit/generated_resources.h"
61 #include "ui/base/l10n/l10n_util.h" 66 #include "ui/base/l10n/l10n_util.h"
62 67
68 using gdata::GDataFileSystem;
69 using gdata::GDataOperationRegistry;
70 using gdata::GDataSystemService;
71 using gdata::GDataSystemServiceFactory;
72
63 namespace chromeos { 73 namespace chromeos {
64 74
65 namespace { 75 namespace {
66 76
77 // Time delay for rechecking gdata operation when we suspect that there will
78 // be no upcoming activity notifications that need to be pushed to UI.
79 const int kGDataOperationRecheckDelayMs = 5000;
80
67 bool ShouldShowNetworkIconInTray(const Network* network) { 81 bool ShouldShowNetworkIconInTray(const Network* network) {
68 if (!network) 82 if (!network)
69 return true; 83 return true;
70 return !network->connected() || network->type() != TYPE_ETHERNET; 84 return !network->connected() || network->type() != TYPE_ETHERNET;
71 } 85 }
72 86
73 ash::NetworkIconInfo CreateNetworkIconInfo(const Network* network, 87 ash::NetworkIconInfo CreateNetworkIconInfo(const Network* network,
74 NetworkMenuIcon* network_icon, 88 NetworkMenuIcon* network_icon,
75 NetworkMenu* network_menu) { 89 NetworkMenu* network_menu) {
76 ash::NetworkIconInfo info; 90 ash::NetworkIconInfo info;
77 info.name = UTF8ToUTF16(network->name()); 91 info.name = UTF8ToUTF16(network->name());
78 info.image = network_icon->GetBitmap(network, NetworkMenuIcon::COLOR_DARK); 92 info.image = network_icon->GetBitmap(network, NetworkMenuIcon::COLOR_DARK);
79 info.service_path = network->service_path(); 93 info.service_path = network->service_path();
80 info.highlight = network_menu->ShouldHighlightNetwork(network); 94 info.highlight = network_menu->ShouldHighlightNetwork(network);
81 info.tray_icon_visible = ShouldShowNetworkIconInTray(network); 95 info.tray_icon_visible = ShouldShowNetworkIconInTray(network);
82 return info; 96 return info;
83 } 97 }
84 98
85 void ExtractIMEInfo(const input_method::InputMethodDescriptor& ime, 99 void ExtractIMEInfo(const input_method::InputMethodDescriptor& ime,
86 const input_method::InputMethodUtil& util, 100 const input_method::InputMethodUtil& util,
87 ash::IMEInfo* info) { 101 ash::IMEInfo* info) {
88 info->id = ime.id(); 102 info->id = ime.id();
89 info->name = util.GetInputMethodLongName(ime); 103 info->name = util.GetInputMethodLongName(ime);
90 info->short_name = util.GetInputMethodShortName(ime); 104 info->short_name = util.GetInputMethodShortName(ime);
91 } 105 }
92 106
107 ash::DriveOperationStatusList GetDriveStatusList(
108 const std::vector<GDataOperationRegistry::ProgressStatus>& list) {
109 ash::DriveOperationStatusList results;
110 for (GDataOperationRegistry::ProgressStatusList::const_iterator it =
111 list.begin();
112 it != list.end(); ++it) {
113 ash::DriveOperationStatus status;
114 status.file_path = it->file_path;
115 status.progress = it->progress_total == 0 ? 0.0 :
116 static_cast<double>(it->progress_current) /
117 static_cast<double>(it->progress_total);
118 status.type = static_cast<ash::DriveOperationStatus::OperationType>(
119 it->operation_type);
120 status.state = static_cast<ash::DriveOperationStatus::OperationState>(
121 it->transfer_state);
122 results.push_back(status);
123 }
124 return results;
125 }
93 126
94 void BluetoothPowerFailure() { 127 void BluetoothPowerFailure() {
95 // TODO(sad): Show an error bubble? 128 // TODO(sad): Show an error bubble?
96 } 129 }
97 130
98 void BluetoothDiscoveryFailure() { 131 void BluetoothDiscoveryFailure() {
99 // TODO(sad): Show an error bubble? 132 // TODO(sad): Show an error bubble?
100 } 133 }
101 134
102 void BluetoothDeviceDisconnectError() { 135 void BluetoothDeviceDisconnectError() {
103 // TODO(sad): Do something? 136 // TODO(sad): Do something?
104 } 137 }
105 138
106 void BluetoothDeviceConnectError() { 139 void BluetoothDeviceConnectError() {
107 // TODO(sad): Do something? 140 // TODO(sad): Do something?
108 } 141 }
109 142
110 class SystemTrayDelegate : public ash::SystemTrayDelegate, 143 class SystemTrayDelegate : public ash::SystemTrayDelegate,
111 public AudioHandler::VolumeObserver, 144 public AudioHandler::VolumeObserver,
112 public PowerManagerClient::Observer, 145 public PowerManagerClient::Observer,
113 public NetworkMenuIcon::Delegate, 146 public NetworkMenuIcon::Delegate,
114 public NetworkMenu::Delegate, 147 public NetworkMenu::Delegate,
115 public NetworkLibrary::NetworkManagerObserver, 148 public NetworkLibrary::NetworkManagerObserver,
116 public NetworkLibrary::NetworkObserver, 149 public NetworkLibrary::NetworkObserver,
117 public NetworkLibrary::CellularDataPlanObserver, 150 public NetworkLibrary::CellularDataPlanObserver,
151 public gdata::GDataOperationRegistry::Observer,
118 public content::NotificationObserver, 152 public content::NotificationObserver,
119 public input_method::InputMethodManager::Observer, 153 public input_method::InputMethodManager::Observer,
120 public system::TimezoneSettings::Observer, 154 public system::TimezoneSettings::Observer,
121 public BluetoothAdapter::Observer, 155 public BluetoothAdapter::Observer,
122 public SystemKeyEventListener::CapsLockObserver, 156 public SystemKeyEventListener::CapsLockObserver,
123 public MessageBubbleLinkListener { 157 public MessageBubbleLinkListener {
124 public: 158 public:
125 explicit SystemTrayDelegate(ash::SystemTray* tray) 159 explicit SystemTrayDelegate(ash::SystemTray* tray)
126 : tray_(tray), 160 : tray_(tray),
161 ui_weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(
162 new base::WeakPtrFactory<SystemTrayDelegate>(this))),
127 network_icon_(ALLOW_THIS_IN_INITIALIZER_LIST( 163 network_icon_(ALLOW_THIS_IN_INITIALIZER_LIST(
128 new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE))), 164 new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE))),
129 network_icon_dark_(ALLOW_THIS_IN_INITIALIZER_LIST( 165 network_icon_dark_(ALLOW_THIS_IN_INITIALIZER_LIST(
130 new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE))), 166 new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE))),
131 network_menu_(ALLOW_THIS_IN_INITIALIZER_LIST(new NetworkMenu(this))), 167 network_menu_(ALLOW_THIS_IN_INITIALIZER_LIST(new NetworkMenu(this))),
132 clock_type_(base::k24HourClock), 168 clock_type_(base::k24HourClock),
133 search_key_mapped_to_(input_method::kSearchKey), 169 search_key_mapped_to_(input_method::kSearchKey),
134 screen_locked_(false), 170 screen_locked_(false),
135 data_promo_notification_(new DataPromoNotification()) { 171 data_promo_notification_(new DataPromoNotification()) {
136 AudioHandler::GetInstance()->AddVolumeObserver(this); 172 AudioHandler::GetInstance()->AddVolumeObserver(this);
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 virtual void ShowNetworkSettings() OVERRIDE { 299 virtual void ShowNetworkSettings() OVERRIDE {
264 content::RecordAction( 300 content::RecordAction(
265 content::UserMetricsAction("OpenInternetOptionsDialog")); 301 content::UserMetricsAction("OpenInternetOptionsDialog"));
266 GetAppropriateBrowser()->ShowOptionsTab(chrome::kInternetOptionsSubPage); 302 GetAppropriateBrowser()->ShowOptionsTab(chrome::kInternetOptionsSubPage);
267 } 303 }
268 304
269 virtual void ShowBluetoothSettings() OVERRIDE { 305 virtual void ShowBluetoothSettings() OVERRIDE {
270 // TODO(sad): Make this work. 306 // TODO(sad): Make this work.
271 } 307 }
272 308
309 virtual void ShowDriveSettings() OVERRIDE {
310 // TODO(zelidrag): Show settings once we put them in.
311 }
312
273 virtual void ShowIMESettings() OVERRIDE { 313 virtual void ShowIMESettings() OVERRIDE {
274 content::RecordAction( 314 content::RecordAction(
275 content::UserMetricsAction("OpenLanguageOptionsDialog")); 315 content::UserMetricsAction("OpenLanguageOptionsDialog"));
276 GetAppropriateBrowser()->ShowOptionsTab(chrome::kLanguageOptionsSubPage); 316 GetAppropriateBrowser()->ShowOptionsTab(chrome::kLanguageOptionsSubPage);
277 } 317 }
278 318
279 virtual void ShowHelp() OVERRIDE { 319 virtual void ShowHelp() OVERRIDE {
280 GetAppropriateBrowser()->ShowHelpTab(); 320 GetAppropriateBrowser()->ShowHelpTab();
281 } 321 }
282 322
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 437
398 virtual void SwitchIME(const std::string& ime_id) OVERRIDE { 438 virtual void SwitchIME(const std::string& ime_id) OVERRIDE {
399 input_method::InputMethodManager::GetInstance()->ChangeInputMethod(ime_id); 439 input_method::InputMethodManager::GetInstance()->ChangeInputMethod(ime_id);
400 } 440 }
401 441
402 virtual void ActivateIMEProperty(const std::string& key) OVERRIDE { 442 virtual void ActivateIMEProperty(const std::string& key) OVERRIDE {
403 input_method::InputMethodManager::GetInstance()-> 443 input_method::InputMethodManager::GetInstance()->
404 ActivateInputMethodProperty(key); 444 ActivateInputMethodProperty(key);
405 } 445 }
406 446
447 virtual void CancelDriveOperation(const FilePath& file_path) OVERRIDE {
448 Profile* profile = ProfileManager::GetDefaultProfile();
449 if (!gdata::util::IsGDataAvailable(profile))
450 return;
451
452 GDataSystemService* system_service =
453 GDataSystemServiceFactory::FindForProfile(profile);
454 if (!system_service)
455 return;
456
457 system_service->file_system()->GetOperationRegistry()->CancelForFilePath(
458 file_path);
459 }
460
461 virtual void GetDriveOperationStatusList(
462 ash::DriveOperationStatusList* list) OVERRIDE {
463 Profile* profile = ProfileManager::GetDefaultProfile();
464 if (!gdata::util::IsGDataAvailable(profile))
465 return;
466
467 GDataSystemService* system_service =
468 GDataSystemServiceFactory::FindForProfile(profile);
469 if (!system_service)
470 return;
471
472 *list = GetDriveStatusList(
473 system_service->file_system()->GetOperationRegistry()->
474 GetProgressStatusList());
475 }
476
477
407 virtual void GetMostRelevantNetworkIcon(ash::NetworkIconInfo* info, 478 virtual void GetMostRelevantNetworkIcon(ash::NetworkIconInfo* info,
408 bool dark) OVERRIDE { 479 bool dark) OVERRIDE {
409 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary(); 480 NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary();
410 info->image = !dark ? network_icon_->GetIconAndText(&info->description) : 481 info->image = !dark ? network_icon_->GetIconAndText(&info->description) :
411 network_icon_dark_->GetIconAndText(&info->description); 482 network_icon_dark_->GetIconAndText(&info->description);
412 info->tray_icon_visible = 483 info->tray_icon_visible =
413 ShouldShowNetworkIconInTray(crosnet->connected_network()); 484 ShouldShowNetworkIconInTray(crosnet->connected_network());
414 } 485 }
415 486
416 virtual void GetAvailableNetworks( 487 virtual void GetAvailableNetworks(
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 } 719 }
649 720
650 void SetProfile(Profile* profile) { 721 void SetProfile(Profile* profile) {
651 pref_registrar_.reset(new PrefChangeRegistrar); 722 pref_registrar_.reset(new PrefChangeRegistrar);
652 pref_registrar_->Init(profile->GetPrefs()); 723 pref_registrar_->Init(profile->GetPrefs());
653 pref_registrar_->Add(prefs::kUse24HourClock, this); 724 pref_registrar_->Add(prefs::kUse24HourClock, this);
654 pref_registrar_->Add(prefs::kLanguageXkbRemapSearchKeyTo, this); 725 pref_registrar_->Add(prefs::kLanguageXkbRemapSearchKeyTo, this);
655 UpdateClockType(profile->GetPrefs()); 726 UpdateClockType(profile->GetPrefs());
656 search_key_mapped_to_ = 727 search_key_mapped_to_ =
657 profile->GetPrefs()->GetInteger(prefs::kLanguageXkbRemapSearchKeyTo); 728 profile->GetPrefs()->GetInteger(prefs::kLanguageXkbRemapSearchKeyTo);
729
730 if (gdata::util::IsGDataAvailable(profile)) {
731 GDataSystemService* system_service =
732 GDataSystemServiceFactory::FindForProfile(profile);
733 system_service->file_system()->GetOperationRegistry()->
734 AddObserver(this);
735 }
658 } 736 }
659 737
660 void UpdateClockType(PrefService* service) { 738 void UpdateClockType(PrefService* service) {
661 clock_type_ = service->GetBoolean(prefs::kUse24HourClock) ? 739 clock_type_ = service->GetBoolean(prefs::kUse24HourClock) ?
662 base::k24HourClock : base::k12HourClock; 740 base::k24HourClock : base::k12HourClock;
663 ash::ClockObserver* observer = tray_->clock_observer(); 741 ash::ClockObserver* observer = tray_->clock_observer();
664 if (observer) 742 if (observer)
665 observer->OnDateFormatChanged(); 743 observer->OnDateFormatChanged();
666 } 744 }
667 745
(...skipping 20 matching lines...) Expand all
688 if (observer) 766 if (observer)
689 observer->OnBluetoothRefresh(); 767 observer->OnBluetoothRefresh();
690 } 768 }
691 769
692 void NotifyRefreshIME() { 770 void NotifyRefreshIME() {
693 ash::IMEObserver* observer = tray_->ime_observer(); 771 ash::IMEObserver* observer = tray_->ime_observer();
694 if (observer) 772 if (observer)
695 observer->OnIMERefresh(); 773 observer->OnIMERefresh();
696 } 774 }
697 775
776 void NotifyRefreshDrive(ash::DriveOperationStatusList& list) {
777 ash::DriveObserver* observer = tray_->drive_observer();
778 if (observer)
779 observer->OnDriveRefresh(list);
780 }
781
698 void RefreshNetworkObserver(NetworkLibrary* crosnet) { 782 void RefreshNetworkObserver(NetworkLibrary* crosnet) {
699 const Network* network = crosnet->active_network(); 783 const Network* network = crosnet->active_network();
700 std::string new_path = network ? network->service_path() : std::string(); 784 std::string new_path = network ? network->service_path() : std::string();
701 if (active_network_path_ != new_path) { 785 if (active_network_path_ != new_path) {
702 if (!active_network_path_.empty()) 786 if (!active_network_path_.empty())
703 crosnet->RemoveNetworkObserver(active_network_path_, this); 787 crosnet->RemoveNetworkObserver(active_network_path_, this);
704 if (!new_path.empty()) 788 if (!new_path.empty())
705 crosnet->AddNetworkObserver(new_path, this); 789 crosnet->AddNetworkObserver(new_path, this);
706 active_network_path_ = new_path; 790 active_network_path_ = new_path;
707 } 791 }
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 virtual void InputMethodChanged( 949 virtual void InputMethodChanged(
866 input_method::InputMethodManager* manager) OVERRIDE { 950 input_method::InputMethodManager* manager) OVERRIDE {
867 NotifyRefreshIME(); 951 NotifyRefreshIME();
868 } 952 }
869 953
870 virtual void InputMethodPropertyChanged( 954 virtual void InputMethodPropertyChanged(
871 input_method::InputMethodManager* manager) OVERRIDE { 955 input_method::InputMethodManager* manager) OVERRIDE {
872 NotifyRefreshIME(); 956 NotifyRefreshIME();
873 } 957 }
874 958
959 // gdata::GDataOperationRegistry::Observer overrides.
960 virtual void OnProgressUpdate(
961 const GDataOperationRegistry::ProgressStatusList& list) {
962 std::vector<ash::DriveOperationStatus> ui_list = GetDriveStatusList(list);
963 NotifyRefreshDrive(ui_list);
964
965 // If we have something to report right now (i.e. completion status only),
966 // we need to delayed re-check the status in few seconds to ensure we
967 // raise events that will let us properly clear the uber tray state.
968 if (list.size() > 0) {
969 bool has_in_progress_items = false;
970 for (GDataOperationRegistry::ProgressStatusList::const_iterator it =
971 list.begin();
972 it != list.end(); ++it) {
973 if (it->transfer_state ==
974 GDataOperationRegistry::OPERATION_STARTED ||
975 it->transfer_state ==
976 GDataOperationRegistry::OPERATION_IN_PROGRESS ||
977 it->transfer_state ==
978 GDataOperationRegistry::OPERATION_SUSPENDED) {
979 has_in_progress_items = true;
980 break;
981 }
982 }
983
984 if (!has_in_progress_items) {
985 content::BrowserThread::PostDelayedTask(
986 content::BrowserThread::UI,
987 FROM_HERE,
988 base::Bind(&SystemTrayDelegate::RecheckGDataOperations,
989 ui_weak_ptr_factory_->GetWeakPtr()),
990 base::TimeDelta::FromMilliseconds(kGDataOperationRecheckDelayMs));
991 }
992 }
993
994 }
995
996 // Pulls the list of ongoing drive operations and initiates status update.
997 // This method is needed to ensure delayed cleanup of the latest reported
998 // status in UI in cases when there are no new changes coming (i.e. when the
999 // last set of transfer operations completed).
1000 void RecheckGDataOperations() {
1001 Profile* profile = ProfileManager::GetDefaultProfile();
1002 if (!gdata::util::IsGDataAvailable(profile))
1003 return;
1004
1005 GDataSystemService* system_service =
1006 GDataSystemServiceFactory::FindForProfile(profile);
1007 if (!system_service)
1008 return;
1009
1010 OnProgressUpdate(system_service->file_system()->GetOperationRegistry()->
1011 GetProgressStatusList());
1012 }
1013
875 // Overridden from system::TimezoneSettings::Observer. 1014 // Overridden from system::TimezoneSettings::Observer.
876 virtual void TimezoneChanged(const icu::TimeZone& timezone) OVERRIDE { 1015 virtual void TimezoneChanged(const icu::TimeZone& timezone) OVERRIDE {
877 NotifyRefreshClock(); 1016 NotifyRefreshClock();
878 } 1017 }
879 1018
880 // Overridden from BluetoothAdapter::Observer. 1019 // Overridden from BluetoothAdapter::Observer.
881 virtual void AdapterPresentChanged(BluetoothAdapter* adapter, 1020 virtual void AdapterPresentChanged(BluetoothAdapter* adapter,
882 bool present) OVERRIDE { 1021 bool present) OVERRIDE {
883 NotifyRefreshBluetooth(); 1022 NotifyRefreshBluetooth();
884 } 1023 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
950 1089
951 if (!deal_url_to_open.empty()) { 1090 if (!deal_url_to_open.empty()) {
952 Browser* browser = GetAppropriateBrowser(); 1091 Browser* browser = GetAppropriateBrowser();
953 if (!browser) 1092 if (!browser)
954 return; 1093 return;
955 browser->ShowSingletonTab(GURL(deal_url_to_open)); 1094 browser->ShowSingletonTab(GURL(deal_url_to_open));
956 } 1095 }
957 } 1096 }
958 1097
959 ash::SystemTray* tray_; 1098 ash::SystemTray* tray_;
1099 scoped_ptr<base::WeakPtrFactory<SystemTrayDelegate> > ui_weak_ptr_factory_;
960 scoped_ptr<NetworkMenuIcon> network_icon_; 1100 scoped_ptr<NetworkMenuIcon> network_icon_;
961 scoped_ptr<NetworkMenuIcon> network_icon_dark_; 1101 scoped_ptr<NetworkMenuIcon> network_icon_dark_;
962 scoped_ptr<NetworkMenu> network_menu_; 1102 scoped_ptr<NetworkMenu> network_menu_;
963 content::NotificationRegistrar registrar_; 1103 content::NotificationRegistrar registrar_;
964 scoped_ptr<PrefChangeRegistrar> pref_registrar_; 1104 scoped_ptr<PrefChangeRegistrar> pref_registrar_;
965 std::string cellular_device_path_; 1105 std::string cellular_device_path_;
966 std::string active_network_path_; 1106 std::string active_network_path_;
967 PowerSupplyStatus power_supply_status_; 1107 PowerSupplyStatus power_supply_status_;
968 base::HourClockType clock_type_; 1108 base::HourClockType clock_type_;
969 int search_key_mapped_to_; 1109 int search_key_mapped_to_;
970 bool screen_locked_; 1110 bool screen_locked_;
971 1111
972 scoped_ptr<BluetoothAdapter> bluetooth_adapter_; 1112 scoped_ptr<BluetoothAdapter> bluetooth_adapter_;
973 1113
974 BooleanPrefMember accessibility_enabled_; 1114 BooleanPrefMember accessibility_enabled_;
975 1115
976 scoped_ptr<DataPromoNotification> data_promo_notification_; 1116 scoped_ptr<DataPromoNotification> data_promo_notification_;
977 1117
978 DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegate); 1118 DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegate);
979 }; 1119 };
980 1120
981 } // namespace 1121 } // namespace
982 1122
983 ash::SystemTrayDelegate* CreateSystemTrayDelegate(ash::SystemTray* tray) { 1123 ash::SystemTrayDelegate* CreateSystemTrayDelegate(ash::SystemTray* tray) {
984 return new chromeos::SystemTrayDelegate(tray); 1124 return new chromeos::SystemTrayDelegate(tray);
985 } 1125 }
986 1126
987 } // namespace chromeos 1127 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/gdata/gdata_util.cc ('k') | ui/resources/ui_resources.grd » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698