12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/web_history_service_factory.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/content_settings/cookie_settings.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/web_history_service.h" 104311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync/profile_sync_service.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync/profile_sync_service_factory.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Returns true if the user is signed in and full history sync is enabled, 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// and false otherwise. 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool IsHistorySyncEnabled(Profile* profile) { 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!CommandLine::ForCurrentProcess()->HasSwitch( 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) switches::kHistoryDisableFullHistorySync)) { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProfileSyncService* sync = 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile); 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return sync && 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sync->sync_initialized() && 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) sync->GetActiveDataTypes().Has(syncer::HISTORY_DELETE_DIRECTIVES); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebHistoryServiceFactory* WebHistoryServiceFactory::GetInstance() { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Singleton<WebHistoryServiceFactory>::get(); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)history::WebHistoryService* WebHistoryServiceFactory::GetForProfile( 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile) { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (IsHistorySyncEnabled(profile)) { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return static_cast<history::WebHistoryService*>( 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetInstance()->GetServiceForBrowserContext(profile, true)); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)BrowserContextKeyedService* WebHistoryServiceFactory::BuildServiceInstanceFor( 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) const { 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile = static_cast<Profile*>(context); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that the service is not instantiated or used if the user is not 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // signed into sync, or if web history is not enabled. 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsHistorySyncEnabled(profile) ? 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new history::WebHistoryService(profile) : NULL; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebHistoryServiceFactory::WebHistoryServiceFactory() 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : BrowserContextKeyedServiceFactory( 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "WebHistoryServiceFactory", 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()) { 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DependsOn(CookieSettings::Factory::GetInstance()); 634311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance()); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebHistoryServiceFactory::~WebHistoryServiceFactory() { 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 68