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