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

Side by Side Diff: chrome/browser/chrome_to_mobile_service.cc

Issue 13197004: Draft: InvalidationService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Passes tests Created 7 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) 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/chrome_to_mobile_service.h" 5 #include "chrome/browser/chrome_to_mobile_service.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/guid.h" 10 #include "base/guid.h"
11 #include "base/json/json_reader.h" 11 #include "base/json/json_reader.h"
12 #include "base/json/json_writer.h" 12 #include "base/json/json_writer.h"
13 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
14 #include "base/prefs/pref_service.h" 14 #include "base/prefs/pref_service.h"
15 #include "base/utf_string_conversions.h" 15 #include "base/utf_string_conversions.h"
16 #include "chrome/app/chrome_command_ids.h" 16 #include "chrome/app/chrome_command_ids.h"
17 #include "chrome/browser/chrome_to_mobile_service_factory.h" 17 #include "chrome/browser/chrome_to_mobile_service_factory.h"
18 #include "chrome/browser/invalidation_service.h"
19 #include "chrome/browser/invalidation_service_factory.h"
18 #include "chrome/browser/printing/cloud_print/cloud_print_url.h" 20 #include "chrome/browser/printing/cloud_print/cloud_print_url.h"
19 #include "chrome/browser/profiles/profile.h" 21 #include "chrome/browser/profiles/profile.h"
20 #include "chrome/browser/signin/token_service.h" 22 #include "chrome/browser/signin/token_service.h"
21 #include "chrome/browser/signin/token_service_factory.h" 23 #include "chrome/browser/signin/token_service_factory.h"
22 #include "chrome/browser/sync/profile_sync_service.h"
23 #include "chrome/browser/sync/profile_sync_service_factory.h"
24 #include "chrome/browser/ui/browser.h" 24 #include "chrome/browser/ui/browser.h"
25 #include "chrome/browser/ui/browser_command_controller.h" 25 #include "chrome/browser/ui/browser_command_controller.h"
26 #include "chrome/browser/ui/browser_finder.h" 26 #include "chrome/browser/ui/browser_finder.h"
27 #include "chrome/browser/ui/browser_navigator.h" 27 #include "chrome/browser/ui/browser_navigator.h"
28 #include "chrome/browser/ui/tabs/tab_strip_model.h" 28 #include "chrome/browser/ui/tabs/tab_strip_model.h"
29 #include "chrome/common/chrome_notification_types.h" 29 #include "chrome/common/chrome_notification_types.h"
30 #include "chrome/common/chrome_switches.h" 30 #include "chrome/common/chrome_switches.h"
31 #include "chrome/common/cloud_print/cloud_print_constants.h" 31 #include "chrome/common/cloud_print/cloud_print_constants.h"
32 #include "chrome/common/cloud_print/cloud_print_helpers.h" 32 #include "chrome/common/cloud_print/cloud_print_helpers.h"
33 #include "chrome/common/extensions/feature_switch.h" 33 #include "chrome/common/extensions/feature_switch.h"
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 252
253 // static 253 // static
254 void ChromeToMobileService::RegisterUserPrefs(PrefRegistrySyncable* registry) { 254 void ChromeToMobileService::RegisterUserPrefs(PrefRegistrySyncable* registry) {
255 registry->RegisterListPref(prefs::kChromeToMobileDeviceList, 255 registry->RegisterListPref(prefs::kChromeToMobileDeviceList,
256 PrefRegistrySyncable::UNSYNCABLE_PREF); 256 PrefRegistrySyncable::UNSYNCABLE_PREF);
257 } 257 }
258 258
259 ChromeToMobileService::ChromeToMobileService(Profile* profile) 259 ChromeToMobileService::ChromeToMobileService(Profile* profile)
260 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)), 260 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)),
261 profile_(profile), 261 profile_(profile),
262 sync_invalidation_enabled_(false) { 262 invalidation_enabled_(false) {
263 // TODO(msw): Unit tests do not provide profiles; see http://crbug.com/122183 263 // TODO(msw): Unit tests do not provide profiles; see http://crbug.com/122183
264 ProfileSyncService* profile_sync_service = 264 InvalidationService* invalidation_service =
265 profile_ ? ProfileSyncServiceFactory::GetForProfile(profile_) : NULL; 265 profile_ ? InvalidationServiceFactory::GetForProfile(profile_) : NULL;
266 if (profile_sync_service) { 266 if (invalidation_service) {
267 CloudPrintURL cloud_print_url(profile_); 267 CloudPrintURL cloud_print_url(profile_);
268 cloud_print_url_ = cloud_print_url.GetCloudPrintServiceURL(); 268 cloud_print_url_ = cloud_print_url.GetCloudPrintServiceURL();
269 sync_invalidation_enabled_ = 269 invalidation_enabled_ =
270 (profile_sync_service->GetInvalidatorState() == 270 (invalidation_service->GetInvalidatorState() ==
271 syncer::INVALIDATIONS_ENABLED); 271 syncer::INVALIDATIONS_ENABLED);
272 // Register for cloud print device list invalidation notifications. 272 // Register for cloud print device list invalidation notifications.
273 profile_sync_service->RegisterInvalidationHandler(this); 273 invalidation_service->RegisterInvalidationHandler(this);
274 syncer::ObjectIdSet ids; 274 syncer::ObjectIdSet ids;
275 ids.insert(invalidation::ObjectId( 275 ids.insert(invalidation::ObjectId(
276 ipc::invalidation::ObjectSource::CHROME_COMPONENTS, 276 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
277 kSyncInvalidationObjectIdChromeToMobileDeviceList)); 277 kSyncInvalidationObjectIdChromeToMobileDeviceList));
278 profile_sync_service->UpdateRegisteredInvalidationIds(this, ids); 278 invalidation_service->UpdateRegisteredInvalidationIds(this, ids);
279 } 279 }
280 } 280 }
281 281
282 ChromeToMobileService::~ChromeToMobileService() { 282 ChromeToMobileService::~ChromeToMobileService() {
283 while (!snapshots_.empty()) 283 while (!snapshots_.empty())
284 DeleteSnapshot(*snapshots_.begin()); 284 DeleteSnapshot(*snapshots_.begin());
285 } 285 }
286 286
287 bool ChromeToMobileService::HasMobiles() const { 287 bool ChromeToMobileService::HasMobiles() const {
288 const base::ListValue* mobiles = GetMobiles(); 288 const base::ListValue* mobiles = GetMobiles();
289 return mobiles && !mobiles->empty(); 289 return mobiles && !mobiles->empty();
290 } 290 }
291 291
292 const base::ListValue* ChromeToMobileService::GetMobiles() const { 292 const base::ListValue* ChromeToMobileService::GetMobiles() const {
293 return sync_invalidation_enabled_ ? 293 return invalidation_enabled_ ?
294 profile_->GetPrefs()->GetList(prefs::kChromeToMobileDeviceList) : NULL; 294 profile_->GetPrefs()->GetList(prefs::kChromeToMobileDeviceList) : NULL;
295 } 295 }
296 296
297 void ChromeToMobileService::GenerateSnapshot(Browser* browser, 297 void ChromeToMobileService::GenerateSnapshot(Browser* browser,
298 base::WeakPtr<Observer> observer) { 298 base::WeakPtr<Observer> observer) {
299 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 299 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
300 // Callback SnapshotFileCreated from CreateSnapshotFile to continue. 300 // Callback SnapshotFileCreated from CreateSnapshotFile to continue.
301 CreateSnapshotFileCallback callback = 301 CreateSnapshotFileCallback callback =
302 base::Bind(&ChromeToMobileService::SnapshotFileCreated, 302 base::Bind(&ChromeToMobileService::SnapshotFileCreated,
303 weak_ptr_factory_.GetWeakPtr(), observer, 303 weak_ptr_factory_.GetWeakPtr(), observer,
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 LogMetric(LEARN_MORE_CLICKED); 375 LogMetric(LEARN_MORE_CLICKED);
376 chrome::NavigateParams params(browser, 376 chrome::NavigateParams params(browser,
377 GURL(chrome::kChromeToMobileLearnMoreURL), content::PAGE_TRANSITION_LINK); 377 GURL(chrome::kChromeToMobileLearnMoreURL), content::PAGE_TRANSITION_LINK);
378 params.disposition = NEW_FOREGROUND_TAB; 378 params.disposition = NEW_FOREGROUND_TAB;
379 chrome::Navigate(&params); 379 chrome::Navigate(&params);
380 } 380 }
381 381
382 void ChromeToMobileService::Shutdown() { 382 void ChromeToMobileService::Shutdown() {
383 // TODO(msw): Unit tests do not provide profiles; see http://crbug.com/122183 383 // TODO(msw): Unit tests do not provide profiles; see http://crbug.com/122183
384 // Unregister for cloud print device list invalidation notifications. 384 // Unregister for cloud print device list invalidation notifications.
385 ProfileSyncService* profile_sync_service = 385 InvalidationService* invalidation_service =
386 profile_ ? ProfileSyncServiceFactory::GetForProfile(profile_) : NULL; 386 profile_ ? InvalidationServiceFactory::GetForProfile(profile_) : NULL;
387 if (profile_sync_service) 387 if (invalidation_service)
388 profile_sync_service->UnregisterInvalidationHandler(this); 388 invalidation_service->UnregisterInvalidationHandler(this);
389 } 389 }
390 390
391 void ChromeToMobileService::OnURLFetchComplete(const net::URLFetcher* source) { 391 void ChromeToMobileService::OnURLFetchComplete(const net::URLFetcher* source) {
392 if (source->GetOriginalURL() == GetSearchURL(cloud_print_url_)) 392 if (source->GetOriginalURL() == GetSearchURL(cloud_print_url_))
393 HandleSearchResponse(source); 393 HandleSearchResponse(source);
394 else if (source->GetOriginalURL() == GetSubmitURL(cloud_print_url_)) 394 else if (source->GetOriginalURL() == GetSubmitURL(cloud_print_url_))
395 HandleSubmitResponse(source); 395 HandleSubmitResponse(source);
396 else 396 else
397 NOTREACHED(); 397 NOTREACHED();
398 398
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 auth_retry_timer_.Start(FROM_HERE, delay, this, 463 auth_retry_timer_.Start(FROM_HERE, delay, this,
464 &ChromeToMobileService::RequestAccessToken); 464 &ChromeToMobileService::RequestAccessToken);
465 465
466 // Clear the mobile list, which may be (or become) out of date. 466 // Clear the mobile list, which may be (or become) out of date.
467 ListValue empty; 467 ListValue empty;
468 profile_->GetPrefs()->Set(prefs::kChromeToMobileDeviceList, empty); 468 profile_->GetPrefs()->Set(prefs::kChromeToMobileDeviceList, empty);
469 } 469 }
470 470
471 void ChromeToMobileService::OnInvalidatorStateChange( 471 void ChromeToMobileService::OnInvalidatorStateChange(
472 syncer::InvalidatorState state) { 472 syncer::InvalidatorState state) {
473 sync_invalidation_enabled_ = (state == syncer::INVALIDATIONS_ENABLED); 473 invalidation_enabled_ = (state == syncer::INVALIDATIONS_ENABLED);
474 } 474 }
475 475
476 void ChromeToMobileService::OnIncomingInvalidation( 476 void ChromeToMobileService::OnIncomingInvalidation(
477 const syncer::ObjectIdInvalidationMap& invalidation_map) { 477 const syncer::ObjectIdInvalidationMap& invalidation_map) {
478 DCHECK_EQ(1U, invalidation_map.size()); 478 DCHECK_EQ(1U, invalidation_map.size());
479 DCHECK_EQ(1U, invalidation_map.count(invalidation::ObjectId( 479 DCHECK_EQ(1U, invalidation_map.count(invalidation::ObjectId(
480 ipc::invalidation::ObjectSource::CHROME_COMPONENTS, 480 ipc::invalidation::ObjectSource::CHROME_COMPONENTS,
481 kSyncInvalidationObjectIdChromeToMobileDeviceList))); 481 kSyncInvalidationObjectIdChromeToMobileDeviceList)));
482 // TODO(msw): Unit tests do not provide profiles; see http://crbug.com/122183 482 // TODO(msw): Unit tests do not provide profiles; see http://crbug.com/122183
483 ProfileSyncService* profile_sync_service = 483 InvalidationService* invalidation_service =
484 profile_ ? ProfileSyncServiceFactory::GetForProfile(profile_) : NULL; 484 profile_ ? InvalidationServiceFactory::GetForProfile(profile_) : NULL;
485 if (profile_sync_service) { 485 if (invalidation_service) {
486 // TODO(dcheng): Only acknowledge the invalidation once the device search 486 // TODO(dcheng): Only acknowledge the invalidation once the device search
487 // has finished. http://crbug.com/156843. 487 // has finished. http://crbug.com/156843.
488 profile_sync_service->AcknowledgeInvalidation( 488 invalidation_service->AcknowledgeInvalidation(
489 invalidation_map.begin()->first, 489 invalidation_map.begin()->first,
490 invalidation_map.begin()->second.ack_handle); 490 invalidation_map.begin()->second.ack_handle);
491 } 491 }
492 RequestDeviceSearch(); 492 RequestDeviceSearch();
493 } 493 }
494 494
495 const std::string& ChromeToMobileService::GetAccessTokenForTest() const { 495 const std::string& ChromeToMobileService::GetAccessTokenForTest() const {
496 return access_token_; 496 return access_token_;
497 } 497 }
498 498
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
752 752
753 // Report failure below and ignore the second response. 753 // Report failure below and ignore the second response.
754 request_observer_map_.erase(other); 754 request_observer_map_.erase(other);
755 break; 755 break;
756 } 756 }
757 } 757 }
758 758
759 if (observer.get()) 759 if (observer.get())
760 observer->OnSendComplete(success); 760 observer->OnSendComplete(success);
761 } 761 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698