summaryrefslogtreecommitdiffstats
path: root/chrome/test/base/testing_profile.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/test/base/testing_profile.cc')
-rw-r--r--chrome/test/base/testing_profile.cc801
1 files changed, 801 insertions, 0 deletions
diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc
new file mode 100644
index 0000000..3925b31
--- /dev/null
+++ b/chrome/test/base/testing_profile.cc
@@ -0,0 +1,801 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/test/base/testing_profile.h"
+
+#include "build/build_config.h"
+
+#include "base/base_paths.h"
+#include "base/command_line.h"
+#include "base/file_util.h"
+#include "base/message_loop_proxy.h"
+#include "base/path_service.h"
+#include "base/string_number_conversions.h"
+#include "chrome/browser/autocomplete/autocomplete_classifier.h"
+#include "chrome/browser/bookmarks/bookmark_model.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/content_settings/host_content_settings_map.h"
+#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
+#include "chrome/browser/extensions/extension_pref_value_map.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_special_storage_policy.h"
+#include "chrome/browser/favicon/favicon_service.h"
+#include "chrome/browser/geolocation/chrome_geolocation_permission_context.h"
+#include "chrome/browser/geolocation/geolocation_content_settings_map.h"
+#include "chrome/browser/history/history.h"
+#include "chrome/browser/history/history_backend.h"
+#include "chrome/browser/history/top_sites.h"
+#include "chrome/browser/net/gaia/token_service.h"
+#include "chrome/browser/net/pref_proxy_config_service.h"
+#include "chrome/browser/notifications/desktop_notification_service.h"
+#include "chrome/browser/notifications/desktop_notification_service_factory.h"
+#include "chrome/browser/prefs/browser_prefs.h"
+#include "chrome/browser/prefs/testing_pref_store.h"
+#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/profiles/profile_dependency_manager.h"
+#include "chrome/browser/search_engines/template_url_fetcher.h"
+#include "chrome/browser/search_engines/template_url_service.h"
+#include "chrome/browser/search_engines/template_url_service_factory.h"
+#include "chrome/browser/sync/profile_sync_service_mock.h"
+#include "chrome/browser/ui/find_bar/find_bar_state.h"
+#include "chrome/browser/ui/webui/chrome_url_data_manager.h"
+#include "chrome/common/chrome_constants.h"
+#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/url_constants.h"
+#include "chrome/test/base/bookmark_load_observer.h"
+#include "chrome/test/base/test_url_request_context_getter.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "chrome/test/testing_pref_service.h"
+#include "content/browser/browser_thread.h"
+#include "content/browser/in_process_webkit/webkit_context.h"
+#include "content/browser/mock_resource_context.h"
+#include "content/common/notification_service.h"
+#include "net/base/cookie_monster.h"
+#include "net/url_request/url_request_context.h"
+#include "net/url_request/url_request_context_getter.h"
+#include "net/url_request/url_request_test_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "webkit/database/database_tracker.h"
+#include "webkit/fileapi/file_system_context.h"
+#include "webkit/quota/quota_manager.h"
+#include "webkit/quota/mock_quota_manager.h"
+
+using base::Time;
+using testing::NiceMock;
+using testing::Return;
+
+namespace {
+
+// Task used to make sure history has finished processing a request. Intended
+// for use with BlockUntilHistoryProcessesPendingRequests.
+
+class QuittingHistoryDBTask : public HistoryDBTask {
+ public:
+ QuittingHistoryDBTask() {}
+
+ virtual bool RunOnDBThread(history::HistoryBackend* backend,
+ history::HistoryDatabase* db) {
+ return true;
+ }
+
+ virtual void DoneRunOnMainThread() {
+ MessageLoop::current()->Quit();
+ }
+
+ private:
+ ~QuittingHistoryDBTask() {}
+
+ DISALLOW_COPY_AND_ASSIGN(QuittingHistoryDBTask);
+};
+
+class TestExtensionURLRequestContext : public net::URLRequestContext {
+ public:
+ TestExtensionURLRequestContext() {
+ net::CookieMonster* cookie_monster = new net::CookieMonster(NULL, NULL);
+ const char* schemes[] = {chrome::kExtensionScheme};
+ cookie_monster->SetCookieableSchemes(schemes, 1);
+ set_cookie_store(cookie_monster);
+ }
+};
+
+class TestExtensionURLRequestContextGetter
+ : public net::URLRequestContextGetter {
+ public:
+ virtual net::URLRequestContext* GetURLRequestContext() {
+ if (!context_)
+ context_ = new TestExtensionURLRequestContext();
+ return context_.get();
+ }
+ virtual scoped_refptr<base::MessageLoopProxy> GetIOMessageLoopProxy() const {
+ return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO);
+ }
+
+ private:
+ scoped_refptr<net::URLRequestContext> context_;
+};
+
+ProfileKeyedService* CreateTestDesktopNotificationService(Profile* profile) {
+ return new DesktopNotificationService(profile, NULL);
+}
+
+} // namespace
+
+TestingProfile::TestingProfile()
+ : start_time_(Time::Now()),
+ testing_prefs_(NULL),
+ incognito_(false),
+ last_session_exited_cleanly_(true),
+ profile_dependency_manager_(ProfileDependencyManager::GetInstance()) {
+ profile_dependency_manager_->CreateProfileServices(this, true);
+
+ if (!temp_dir_.CreateUniqueTempDir()) {
+ LOG(ERROR) << "Failed to create unique temporary directory.";
+
+ // Fallback logic in case we fail to create unique temporary directory.
+ FilePath system_tmp_dir;
+ bool success = PathService::Get(base::DIR_TEMP, &system_tmp_dir);
+
+ // We're severly screwed if we can't get the system temporary
+ // directory. Die now to avoid writing to the filesystem root
+ // or other bad places.
+ CHECK(success);
+
+ FilePath fallback_dir(system_tmp_dir.AppendASCII("TestingProfilePath"));
+ file_util::Delete(fallback_dir, true);
+ file_util::CreateDirectory(fallback_dir);
+ if (!temp_dir_.Set(fallback_dir)) {
+ // That shouldn't happen, but if it does, try to recover.
+ LOG(ERROR) << "Failed to use a fallback temporary directory.";
+
+ // We're screwed if this fails, see CHECK above.
+ CHECK(temp_dir_.Set(system_tmp_dir));
+ }
+ }
+
+ // Install profile keyed service factory hooks for dummy/test services
+ DesktopNotificationServiceFactory::GetInstance()->SetTestingFactory(
+ this, CreateTestDesktopNotificationService);
+
+ NotificationService::current()->Notify(
+ chrome::NOTIFICATION_PROFILE_CREATED,
+ Source<Profile>(static_cast<Profile*>(this)),
+ NotificationService::NoDetails());
+}
+
+TestingProfile::~TestingProfile() {
+ NotificationService::current()->Notify(
+ chrome::NOTIFICATION_PROFILE_DESTROYED,
+ Source<Profile>(static_cast<Profile*>(this)),
+ NotificationService::NoDetails());
+
+ profile_dependency_manager_->DestroyProfileServices(this);
+
+ if (host_content_settings_map_)
+ host_content_settings_map_->ShutdownOnUIThread();
+
+ DestroyTopSites();
+ DestroyHistoryService();
+ // FaviconService depends on HistoryServce so destroying it later.
+ DestroyFaviconService();
+ DestroyWebDataService();
+
+ if (pref_proxy_config_tracker_.get())
+ pref_proxy_config_tracker_->DetachFromPrefService();
+}
+
+void TestingProfile::CreateFaviconService() {
+ favicon_service_ = NULL;
+ favicon_service_ = new FaviconService(this);
+}
+
+void TestingProfile::CreateHistoryService(bool delete_file, bool no_db) {
+ DestroyHistoryService();
+ if (delete_file) {
+ FilePath path = GetPath();
+ path = path.Append(chrome::kHistoryFilename);
+ file_util::Delete(path, false);
+ }
+ history_service_ = new HistoryService(this);
+ history_service_->Init(GetPath(), bookmark_bar_model_.get(), no_db);
+}
+
+void TestingProfile::DestroyHistoryService() {
+ if (!history_service_.get())
+ return;
+
+ history_service_->NotifyRenderProcessHostDestruction(0);
+ history_service_->SetOnBackendDestroyTask(new MessageLoop::QuitTask);
+ history_service_->Cleanup();
+ history_service_ = NULL;
+
+ // Wait for the backend class to terminate before deleting the files and
+ // moving to the next test. Note: if this never terminates, somebody is
+ // probably leaking a reference to the history backend, so it never calls
+ // our destroy task.
+ MessageLoop::current()->Run();
+
+ // Make sure we don't have any event pending that could disrupt the next
+ // test.
+ MessageLoop::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask);
+ MessageLoop::current()->Run();
+}
+
+void TestingProfile::CreateTopSites() {
+ DestroyTopSites();
+ top_sites_ = new history::TopSites(this);
+ FilePath file_name = GetPath().Append(chrome::kTopSitesFilename);
+ top_sites_->Init(file_name);
+}
+
+void TestingProfile::DestroyTopSites() {
+ if (top_sites_.get()) {
+ top_sites_->Shutdown();
+ top_sites_ = NULL;
+ // TopSites::Shutdown schedules some tasks (from TopSitesBackend) that need
+ // to be run to properly shutdown. Run all pending tasks now. This is
+ // normally handled by browser_process shutdown.
+ if (MessageLoop::current())
+ MessageLoop::current()->RunAllPending();
+ }
+}
+
+void TestingProfile::DestroyFaviconService() {
+ if (!favicon_service_.get())
+ return;
+ favicon_service_ = NULL;
+}
+
+void TestingProfile::CreateBookmarkModel(bool delete_file) {
+ // Nuke the model first, that way we're sure it's done writing to disk.
+ bookmark_bar_model_.reset(NULL);
+
+ if (delete_file) {
+ FilePath path = GetPath();
+ path = path.Append(chrome::kBookmarksFileName);
+ file_util::Delete(path, false);
+ }
+ bookmark_bar_model_.reset(new BookmarkModel(this));
+ if (history_service_.get()) {
+ history_service_->history_backend_->bookmark_service_ =
+ bookmark_bar_model_.get();
+ history_service_->history_backend_->expirer_.bookmark_service_ =
+ bookmark_bar_model_.get();
+ }
+ bookmark_bar_model_->Load();
+}
+
+void TestingProfile::CreateAutocompleteClassifier() {
+ autocomplete_classifier_.reset(new AutocompleteClassifier(this));
+}
+
+void TestingProfile::CreateProtocolHandlerRegistry() {
+ protocol_handler_registry_ = new ProtocolHandlerRegistry(this,
+ new ProtocolHandlerRegistry::Delegate());
+}
+
+void TestingProfile::CreateWebDataService(bool delete_file) {
+ if (web_data_service_.get())
+ web_data_service_->Shutdown();
+
+ if (delete_file) {
+ FilePath path = GetPath();
+ path = path.Append(chrome::kWebDataFilename);
+ file_util::Delete(path, false);
+ }
+
+ web_data_service_ = new WebDataService;
+ if (web_data_service_.get())
+ web_data_service_->Init(GetPath());
+}
+
+void TestingProfile::BlockUntilBookmarkModelLoaded() {
+ DCHECK(bookmark_bar_model_.get());
+ if (bookmark_bar_model_->IsLoaded())
+ return;
+ BookmarkLoadObserver observer;
+ bookmark_bar_model_->AddObserver(&observer);
+ MessageLoop::current()->Run();
+ bookmark_bar_model_->RemoveObserver(&observer);
+ DCHECK(bookmark_bar_model_->IsLoaded());
+}
+
+void TestingProfile::BlockUntilTopSitesLoaded() {
+ if (!GetHistoryService(Profile::EXPLICIT_ACCESS))
+ GetTopSites()->HistoryLoaded();
+ ui_test_utils::WaitForNotification(chrome::NOTIFICATION_TOP_SITES_LOADED);
+}
+
+void TestingProfile::CreateTemplateURLFetcher() {
+ template_url_fetcher_.reset(new TemplateURLFetcher(this));
+}
+
+static ProfileKeyedService* BuildTemplateURLService(Profile* profile) {
+ return new TemplateURLService(profile);
+}
+
+void TestingProfile::CreateTemplateURLService() {
+ TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse(
+ this, BuildTemplateURLService);
+}
+
+ExtensionService* TestingProfile::CreateExtensionService(
+ const CommandLine* command_line,
+ const FilePath& install_directory,
+ bool autoupdate_enabled) {
+ // Extension pref store, created for use by |extension_prefs_|.
+
+ extension_pref_value_map_.reset(new ExtensionPrefValueMap);
+ // Note that the GetPrefs() creates a TestingPrefService, therefore
+ // the extension controlled pref values set in extension_prefs_
+ // are not reflected in the pref service. One would need to
+ // inject a new ExtensionPrefStore(extension_pref_value_map_.get(), false).
+ extension_prefs_.reset(
+ new ExtensionPrefs(GetPrefs(),
+ install_directory,
+ extension_pref_value_map_.get()));
+ extension_service_.reset(new ExtensionService(this,
+ command_line,
+ install_directory,
+ extension_prefs_.get(),
+ autoupdate_enabled,
+ true));
+ return extension_service_.get();
+}
+
+FilePath TestingProfile::GetPath() {
+ DCHECK(temp_dir_.IsValid()); // TODO(phajdan.jr): do it better.
+ return temp_dir_.path();
+}
+
+TestingPrefService* TestingProfile::GetTestingPrefService() {
+ if (!prefs_.get())
+ CreateTestingPrefService();
+ DCHECK(testing_prefs_);
+ return testing_prefs_;
+}
+
+TestingProfile* TestingProfile::AsTestingProfile() {
+ return this;
+}
+
+std::string TestingProfile::GetProfileName() {
+ return std::string("testing_profile");
+}
+
+bool TestingProfile::IsOffTheRecord() {
+ return incognito_;
+}
+
+void TestingProfile::SetOffTheRecordProfile(Profile* profile) {
+ incognito_profile_.reset(profile);
+}
+
+Profile* TestingProfile::GetOffTheRecordProfile() {
+ return incognito_profile_.get();
+}
+
+bool TestingProfile::HasOffTheRecordProfile() {
+ return incognito_profile_.get() != NULL;
+}
+
+Profile* TestingProfile::GetOriginalProfile() {
+ return this;
+}
+
+void TestingProfile::SetAppCacheService(
+ ChromeAppCacheService* appcache_service) {
+ appcache_service_ = appcache_service;
+}
+
+ChromeAppCacheService* TestingProfile::GetAppCacheService() {
+ return appcache_service_.get();
+}
+
+webkit_database::DatabaseTracker* TestingProfile::GetDatabaseTracker() {
+ if (!db_tracker_) {
+ db_tracker_ = new webkit_database::DatabaseTracker(
+ GetPath(), false, false, GetExtensionSpecialStoragePolicy(),
+ NULL, NULL);
+ }
+ return db_tracker_;
+}
+
+VisitedLinkMaster* TestingProfile::GetVisitedLinkMaster() {
+ return NULL;
+}
+
+ExtensionService* TestingProfile::GetExtensionService() {
+ return extension_service_.get();
+}
+
+UserScriptMaster* TestingProfile::GetUserScriptMaster() {
+ return NULL;
+}
+
+ExtensionDevToolsManager* TestingProfile::GetExtensionDevToolsManager() {
+ return NULL;
+}
+
+ExtensionProcessManager* TestingProfile::GetExtensionProcessManager() {
+ return NULL;
+}
+
+ExtensionMessageService* TestingProfile::GetExtensionMessageService() {
+ return NULL;
+}
+
+ExtensionEventRouter* TestingProfile::GetExtensionEventRouter() {
+ return NULL;
+}
+
+void TestingProfile::SetExtensionSpecialStoragePolicy(
+ ExtensionSpecialStoragePolicy* extension_special_storage_policy) {
+ extension_special_storage_policy_ = extension_special_storage_policy;
+}
+
+ExtensionSpecialStoragePolicy*
+TestingProfile::GetExtensionSpecialStoragePolicy() {
+ if (!extension_special_storage_policy_.get())
+ extension_special_storage_policy_ = new ExtensionSpecialStoragePolicy();
+ return extension_special_storage_policy_.get();
+}
+
+SSLHostState* TestingProfile::GetSSLHostState() {
+ return NULL;
+}
+
+net::TransportSecurityState* TestingProfile::GetTransportSecurityState() {
+ return NULL;
+}
+
+FaviconService* TestingProfile::GetFaviconService(ServiceAccessType access) {
+ return favicon_service_.get();
+}
+
+HistoryService* TestingProfile::GetHistoryService(ServiceAccessType access) {
+ return history_service_.get();
+}
+
+HistoryService* TestingProfile::GetHistoryServiceWithoutCreating() {
+ return history_service_.get();
+}
+
+net::CookieMonster* TestingProfile::GetCookieMonster() {
+ if (!GetRequestContext())
+ return NULL;
+ return GetRequestContext()->GetURLRequestContext()->cookie_store()->
+ GetCookieMonster();
+}
+
+AutocompleteClassifier* TestingProfile::GetAutocompleteClassifier() {
+ return autocomplete_classifier_.get();
+}
+
+history::ShortcutsBackend* TestingProfile::GetShortcutsBackend() {
+ return NULL;
+}
+
+WebDataService* TestingProfile::GetWebDataService(ServiceAccessType access) {
+ return web_data_service_.get();
+}
+
+WebDataService* TestingProfile::GetWebDataServiceWithoutCreating() {
+ return web_data_service_.get();
+}
+
+PasswordStore* TestingProfile::GetPasswordStore(ServiceAccessType access) {
+ return NULL;
+}
+
+void TestingProfile::SetPrefService(PrefService* prefs) {
+ DCHECK(!prefs_.get());
+ prefs_.reset(prefs);
+}
+
+void TestingProfile::CreateTestingPrefService() {
+ DCHECK(!prefs_.get());
+ testing_prefs_ = new TestingPrefService();
+ prefs_.reset(testing_prefs_);
+ Profile::RegisterUserPrefs(prefs_.get());
+ browser::RegisterUserPrefs(prefs_.get());
+}
+
+PrefService* TestingProfile::GetPrefs() {
+ if (!prefs_.get()) {
+ CreateTestingPrefService();
+ }
+ return prefs_.get();
+}
+
+TemplateURLFetcher* TestingProfile::GetTemplateURLFetcher() {
+ return template_url_fetcher_.get();
+}
+
+history::TopSites* TestingProfile::GetTopSites() {
+ return top_sites_.get();
+}
+
+history::TopSites* TestingProfile::GetTopSitesWithoutCreating() {
+ return top_sites_.get();
+}
+
+DownloadManager* TestingProfile::GetDownloadManager() {
+ return NULL;
+}
+
+PersonalDataManager* TestingProfile::GetPersonalDataManager() {
+ return NULL;
+}
+
+fileapi::FileSystemContext* TestingProfile::GetFileSystemContext() {
+ if (!file_system_context_) {
+ file_system_context_ = new fileapi::FileSystemContext(
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE),
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO),
+ GetExtensionSpecialStoragePolicy(),
+ NULL,
+ GetPath(),
+ IsOffTheRecord(),
+ true, // Allow file access from files.
+ true, // Unlimited quota.
+ NULL);
+ }
+ return file_system_context_.get();
+}
+
+void TestingProfile::SetQuotaManager(quota::QuotaManager* manager) {
+ quota_manager_ = manager;
+}
+
+quota::QuotaManager* TestingProfile::GetQuotaManager() {
+ return quota_manager_.get();
+}
+
+BrowserSignin* TestingProfile::GetBrowserSignin() {
+ return NULL;
+}
+
+bool TestingProfile::HasCreatedDownloadManager() const {
+ return false;
+}
+
+net::URLRequestContextGetter* TestingProfile::GetRequestContext() {
+ return request_context_.get();
+}
+
+net::URLRequestContextGetter* TestingProfile::GetRequestContextForRenderProcess(
+ int renderer_child_id) {
+ if (extension_service_.get()) {
+ const Extension* installed_app = extension_service_->
+ GetInstalledAppForRenderer(renderer_child_id);
+ if (installed_app != NULL && installed_app->is_storage_isolated())
+ return GetRequestContextForIsolatedApp(installed_app->id());
+ }
+
+ return GetRequestContext();
+}
+
+void TestingProfile::CreateRequestContext() {
+ if (!request_context_)
+ request_context_ = new TestURLRequestContextGetter();
+}
+
+void TestingProfile::ResetRequestContext() {
+ request_context_ = NULL;
+}
+
+net::URLRequestContextGetter* TestingProfile::GetRequestContextForMedia() {
+ return NULL;
+}
+
+net::URLRequestContextGetter* TestingProfile::GetRequestContextForExtensions() {
+ if (!extensions_request_context_)
+ extensions_request_context_ = new TestExtensionURLRequestContextGetter();
+ return extensions_request_context_.get();
+}
+
+net::SSLConfigService* TestingProfile::GetSSLConfigService() {
+ return NULL;
+}
+
+UserStyleSheetWatcher* TestingProfile::GetUserStyleSheetWatcher() {
+ return NULL;
+}
+
+net::URLRequestContextGetter* TestingProfile::GetRequestContextForIsolatedApp(
+ const std::string& app_id) {
+ // We don't test isolated app storage here yet, so returning the same dummy
+ // context is sufficient for now.
+ return GetRequestContext();
+}
+
+const content::ResourceContext& TestingProfile::GetResourceContext() {
+ return *content::MockResourceContext::GetInstance();
+}
+
+FindBarState* TestingProfile::GetFindBarState() {
+ if (!find_bar_state_.get())
+ find_bar_state_.reset(new FindBarState());
+ return find_bar_state_.get();
+}
+
+HostContentSettingsMap* TestingProfile::GetHostContentSettingsMap() {
+ if (!host_content_settings_map_.get()) {
+ host_content_settings_map_ = new HostContentSettingsMap(
+ GetPrefs(), GetExtensionService(), false);
+ }
+ return host_content_settings_map_.get();
+}
+
+GeolocationContentSettingsMap*
+TestingProfile::GetGeolocationContentSettingsMap() {
+ if (!geolocation_content_settings_map_.get()) {
+ geolocation_content_settings_map_ =
+ new GeolocationContentSettingsMap(this);
+ }
+ return geolocation_content_settings_map_.get();
+}
+
+GeolocationPermissionContext*
+TestingProfile::GetGeolocationPermissionContext() {
+ if (!geolocation_permission_context_.get()) {
+ geolocation_permission_context_ =
+ new ChromeGeolocationPermissionContext(this);
+ }
+ return geolocation_permission_context_.get();
+}
+
+HostZoomMap* TestingProfile::GetHostZoomMap() {
+ return NULL;
+}
+
+bool TestingProfile::HasProfileSyncService() const {
+ return (profile_sync_service_.get() != NULL);
+}
+
+std::wstring TestingProfile::GetName() {
+ return std::wstring();
+}
+
+std::wstring TestingProfile::GetID() {
+ return id_;
+}
+
+void TestingProfile::SetID(const std::wstring& id) {
+ id_ = id;
+}
+
+bool TestingProfile::DidLastSessionExitCleanly() {
+ return last_session_exited_cleanly_;
+}
+
+BookmarkModel* TestingProfile::GetBookmarkModel() {
+ return bookmark_bar_model_.get();
+}
+
+bool TestingProfile::IsSameProfile(Profile *p) {
+ return this == p;
+}
+
+base::Time TestingProfile::GetStartTime() const {
+ return start_time_;
+}
+
+ProtocolHandlerRegistry* TestingProfile::GetProtocolHandlerRegistry() {
+ return protocol_handler_registry_.get();
+}
+
+SpellCheckHost* TestingProfile::GetSpellCheckHost() {
+ return NULL;
+}
+
+WebKitContext* TestingProfile::GetWebKitContext() {
+ if (webkit_context_ == NULL) {
+ webkit_context_ = new WebKitContext(
+ IsOffTheRecord(), GetPath(),
+ GetExtensionSpecialStoragePolicy(),
+ false, NULL, NULL);
+ }
+ return webkit_context_;
+}
+
+WebKitContext* TestingProfile::GetOffTheRecordWebKitContext() {
+ return NULL;
+}
+
+FilePath TestingProfile::last_selected_directory() {
+ return last_selected_directory_;
+}
+
+void TestingProfile::set_last_selected_directory(const FilePath& path) {
+ last_selected_directory_ = path;
+}
+
+PrefProxyConfigTracker* TestingProfile::GetProxyConfigTracker() {
+ if (!pref_proxy_config_tracker_)
+ pref_proxy_config_tracker_ = new PrefProxyConfigTracker(GetPrefs());
+
+ return pref_proxy_config_tracker_;
+}
+
+void TestingProfile::BlockUntilHistoryProcessesPendingRequests() {
+ DCHECK(history_service_.get());
+ DCHECK(MessageLoop::current());
+
+ CancelableRequestConsumer consumer;
+ history_service_->ScheduleDBTask(new QuittingHistoryDBTask(), &consumer);
+ MessageLoop::current()->Run();
+}
+
+TokenService* TestingProfile::GetTokenService() {
+ if (!token_service_.get()) {
+ token_service_.reset(new TokenService());
+ }
+ return token_service_.get();
+}
+
+ProfileSyncService* TestingProfile::GetProfileSyncService() {
+ return GetProfileSyncService("");
+}
+
+ProfileSyncService* TestingProfile::GetProfileSyncService(
+ const std::string& cros_user) {
+ if (!profile_sync_service_.get()) {
+ // Use a NiceMock here since we are really using the mock as a
+ // fake. Test cases that want to set expectations on a
+ // ProfileSyncService should use the ProfileMock and have this
+ // method return their own mock instance.
+ profile_sync_service_.reset(new NiceMock<ProfileSyncServiceMock>());
+ }
+ return profile_sync_service_.get();
+}
+
+CloudPrintProxyService* TestingProfile::GetCloudPrintProxyService() {
+ return NULL;
+}
+
+ChromeBlobStorageContext* TestingProfile::GetBlobStorageContext() {
+ return NULL;
+}
+
+ExtensionInfoMap* TestingProfile::GetExtensionInfoMap() {
+ return NULL;
+}
+
+PromoCounter* TestingProfile::GetInstantPromoCounter() {
+ return NULL;
+}
+
+ChromeURLDataManager* TestingProfile::GetChromeURLDataManager() {
+ if (!chrome_url_data_manager_.get())
+ chrome_url_data_manager_.reset(
+ new ChromeURLDataManager(
+ base::Callback<ChromeURLDataManagerBackend*(void)>()));
+ return chrome_url_data_manager_.get();
+}
+
+prerender::PrerenderManager* TestingProfile::GetPrerenderManager() {
+ if (!prerender::PrerenderManager::IsPrerenderingPossible())
+ return NULL;
+ if (!prerender_manager_.get()) {
+ prerender_manager_.reset(new prerender::PrerenderManager(
+ this, g_browser_process->prerender_tracker()));
+ }
+ return prerender_manager_.get();
+}
+
+PrefService* TestingProfile::GetOffTheRecordPrefs() {
+ return NULL;
+}
+
+quota::SpecialStoragePolicy* TestingProfile::GetSpecialStoragePolicy() {
+ return GetExtensionSpecialStoragePolicy();
+}
+
+void TestingProfile::DestroyWebDataService() {
+ if (!web_data_service_.get())
+ return;
+
+ web_data_service_->Shutdown();
+}