blob: d2821e7dae279d618cf11131585f31345378c7b5 [file] [log] [blame]
[email protected]e7e46732012-01-05 11:45:551// Copyright (c) 2012 The Chromium Authors. All rights reserved.
license.botbf09a502008-08-24 00:55:552// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commit09911bf2008-07-26 23:55:294
[email protected]a4ff9eae2011-08-01 19:58:165#include "chrome/test/base/testing_profile.h"
initial.commit09911bf2008-07-26 23:55:296
[email protected]a42b5592009-09-03 16:52:237#include "build/build_config.h"
[email protected]dbbad7a2010-08-13 18:18:368
9#include "base/base_paths.h"
[email protected]e3e43d92010-02-26 22:02:3810#include "base/command_line.h"
[email protected]dbbad7a2010-08-13 18:18:3611#include "base/file_util.h"
[email protected]83a7d2eb2010-05-03 21:46:1912#include "base/message_loop_proxy.h"
[email protected]dbbad7a2010-08-13 18:18:3613#include "base/path_service.h"
[email protected]e83326f2010-07-31 17:29:2514#include "base/string_number_conversions.h"
[email protected]dbbad7a2010-08-13 18:18:3615#include "chrome/browser/autocomplete/autocomplete_classifier.h"
[email protected]a9afddb2009-02-12 17:49:4216#include "chrome/browser/bookmarks/bookmark_model.h"
[email protected]1459fb62011-05-25 19:03:2717#include "chrome/browser/browser_process.h"
[email protected]9d01a6a2010-11-30 12:03:3318#include "chrome/browser/content_settings/host_content_settings_map.h"
[email protected]a6d36cc2011-02-23 00:39:4819#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
[email protected]2bb51302011-02-18 22:39:2720#include "chrome/browser/extensions/extension_pref_value_map.h"
[email protected]2f69b382011-02-19 00:34:2521#include "chrome/browser/extensions/extension_service.h"
[email protected]19eb80152011-02-26 00:28:4322#include "chrome/browser/extensions/extension_special_storage_policy.h"
[email protected]ee2ed42c2011-04-28 22:19:1423#include "chrome/browser/favicon/favicon_service.h"
[email protected]c476e632011-06-23 11:18:0424#include "chrome/browser/geolocation/chrome_geolocation_permission_context.h"
[email protected]dbbad7a2010-08-13 18:18:3625#include "chrome/browser/history/history.h"
[email protected]075ae732009-02-11 23:58:3126#include "chrome/browser/history/history_backend.h"
[email protected]dbbad7a2010-08-13 18:18:3627#include "chrome/browser/history/top_sites.h"
[email protected]6f96cbcb2011-11-04 02:26:0728#include "chrome/browser/net/proxy_service_factory.h"
[email protected]dbbad7a2010-08-13 18:18:3629#include "chrome/browser/notifications/desktop_notification_service.h"
[email protected]dcb72d52011-04-13 12:36:5330#include "chrome/browser/notifications/desktop_notification_service_factory.h"
[email protected]37858e52010-08-26 00:22:0231#include "chrome/browser/prefs/browser_prefs.h"
[email protected]9a8c4022011-01-25 14:25:3332#include "chrome/browser/prefs/testing_pref_store.h"
[email protected]4850a7f2011-03-08 23:36:5933#include "chrome/browser/prerender/prerender_manager.h"
[email protected]5cdcd152011-03-31 22:48:5234#include "chrome/browser/profiles/profile_dependency_manager.h"
[email protected]fb9d1f42010-10-06 23:17:5935#include "chrome/browser/search_engines/template_url_fetcher.h"
[email protected]8e5c89a2011-06-07 18:13:3336#include "chrome/browser/search_engines/template_url_service.h"
37#include "chrome/browser/search_engines/template_url_service_factory.h"
[email protected]99e652f2012-01-22 04:05:0738#include "chrome/browser/signin/token_service.h"
[email protected]8238dd62011-09-29 15:13:0139#include "chrome/browser/speech/chrome_speech_input_preferences.h"
[email protected]4772b072010-03-30 17:45:4640#include "chrome/browser/sync/profile_sync_service_mock.h"
[email protected]fd42ac30f2011-02-27 19:33:3641#include "chrome/browser/ui/webui/chrome_url_data_manager.h"
[email protected]a9afddb2009-02-12 17:49:4242#include "chrome/common/chrome_constants.h"
[email protected]432115822011-07-10 15:52:2743#include "chrome/common/chrome_notification_types.h"
[email protected]9e33d7e2011-09-30 16:43:5444#include "chrome/common/chrome_switches.h"
[email protected]dbbad7a2010-08-13 18:18:3645#include "chrome/common/url_constants.h"
[email protected]7bc60682011-07-29 20:55:5946#include "chrome/test/base/bookmark_load_observer.h"
[email protected]aecb6ca2011-07-29 22:56:1447#include "chrome/test/base/test_url_request_context_getter.h"
[email protected]8ad3636e2011-08-01 22:31:4048#include "chrome/test/base/testing_pref_service.h"
[email protected]af44e7fb2011-07-29 18:32:3249#include "chrome/test/base/ui_test_utils.h"
[email protected]567812d2011-02-24 17:40:5050#include "content/browser/in_process_webkit/webkit_context.h"
[email protected]e89b77d2011-04-15 18:58:1051#include "content/browser/mock_resource_context.h"
[email protected]c38831a12011-10-28 12:44:4952#include "content/public/browser/browser_thread.h"
[email protected]ad50def52011-10-19 23:17:0753#include "content/public/browser/notification_service.h"
[email protected]dbbad7a2010-08-13 18:18:3654#include "net/base/cookie_monster.h"
[email protected]812b3a32010-01-08 05:36:0455#include "net/url_request/url_request_context.h"
[email protected]abe2c032011-03-31 18:49:3456#include "net/url_request/url_request_context_getter.h"
[email protected]d2db0292011-01-26 20:23:4457#include "net/url_request/url_request_test_util.h"
[email protected]4772b072010-03-30 17:45:4658#include "testing/gmock/include/gmock/gmock.h"
[email protected]2f351cb2009-11-09 23:43:3459#include "webkit/database/database_tracker.h"
[email protected]de5480fa2011-05-26 22:07:3660#include "webkit/fileapi/file_system_context.h"
[email protected]e7e46732012-01-05 11:45:5561#include "webkit/fileapi/file_system_options.h"
[email protected]94704172011-08-01 16:23:4062#include "webkit/quota/mock_quota_manager.h"
[email protected]c38831a12011-10-28 12:44:4963#include "webkit/quota/quota_manager.h"
[email protected]248ce192011-02-10 15:26:3464
[email protected]6f96cbcb2011-11-04 02:26:0765#if defined(OS_CHROMEOS)
66#include "chrome/browser/chromeos/proxy_config_service_impl.h"
67#endif // defined(OS_CHROMEOS)
68
[email protected]e1acf6f2008-10-27 20:43:3369using base::Time;
[email protected]631bb742011-11-02 11:29:3970using content::BrowserThread;
[email protected]e582fdd2011-12-20 16:48:1771using content::DownloadManager;
[email protected]5c9250872012-01-30 17:24:0572using content::HostZoomMap;
[email protected]3c887412010-04-19 20:30:2373using testing::NiceMock;
[email protected]4772b072010-03-30 17:45:4674using testing::Return;
[email protected]e1acf6f2008-10-27 20:43:3375
[email protected]d364c652008-08-29 19:46:5676namespace {
77
[email protected]0bfc29a2009-04-27 16:15:4478// Task used to make sure history has finished processing a request. Intended
79// for use with BlockUntilHistoryProcessesPendingRequests.
80
81class QuittingHistoryDBTask : public HistoryDBTask {
82 public:
83 QuittingHistoryDBTask() {}
84
85 virtual bool RunOnDBThread(history::HistoryBackend* backend,
86 history::HistoryDatabase* db) {
87 return true;
88 }
89
90 virtual void DoneRunOnMainThread() {
91 MessageLoop::current()->Quit();
92 }
93
94 private:
[email protected]7991a232009-11-06 01:55:4895 ~QuittingHistoryDBTask() {}
96
[email protected]0bfc29a2009-04-27 16:15:4497 DISALLOW_COPY_AND_ASSIGN(QuittingHistoryDBTask);
98};
99
[email protected]aeb53f02011-01-15 00:21:34100class TestExtensionURLRequestContext : public net::URLRequestContext {
[email protected]c10da4b02010-03-25 14:38:32101 public:
102 TestExtensionURLRequestContext() {
103 net::CookieMonster* cookie_monster = new net::CookieMonster(NULL, NULL);
104 const char* schemes[] = {chrome::kExtensionScheme};
105 cookie_monster->SetCookieableSchemes(schemes, 1);
[email protected]f6c21cb2011-02-16 19:45:41106 set_cookie_store(cookie_monster);
[email protected]c10da4b02010-03-25 14:38:32107 }
108};
109
[email protected]abe2c032011-03-31 18:49:34110class TestExtensionURLRequestContextGetter
111 : public net::URLRequestContextGetter {
[email protected]c10da4b02010-03-25 14:38:32112 public:
[email protected]aeb53f02011-01-15 00:21:34113 virtual net::URLRequestContext* GetURLRequestContext() {
[email protected]c10da4b02010-03-25 14:38:32114 if (!context_)
115 context_ = new TestExtensionURLRequestContext();
116 return context_.get();
117 }
[email protected]00ed48f2010-10-22 22:19:24118 virtual scoped_refptr<base::MessageLoopProxy> GetIOMessageLoopProxy() const {
[email protected]0c7d74f2010-10-11 11:55:26119 return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO);
[email protected]83a7d2eb2010-05-03 21:46:19120 }
[email protected]c10da4b02010-03-25 14:38:32121
122 private:
[email protected]aeb53f02011-01-15 00:21:34123 scoped_refptr<net::URLRequestContext> context_;
[email protected]c10da4b02010-03-25 14:38:32124};
125
[email protected]67e79992012-02-13 20:47:58126ProfileKeyedBase* CreateTestDesktopNotificationService(Profile* profile) {
[email protected]dcb72d52011-04-13 12:36:53127 return new DesktopNotificationService(profile, NULL);
128}
129
[email protected]d364c652008-08-29 19:46:56130} // namespace
131
[email protected]f25387b2008-08-21 15:20:33132TestingProfile::TestingProfile()
[email protected]ea6f76572008-12-18 00:09:55133 : start_time_(Time::Now()),
[email protected]2fb7dc982010-09-29 12:24:28134 testing_prefs_(NULL),
[email protected]5bb2f522011-03-25 19:04:44135 incognito_(false),
[email protected]5cdcd152011-03-31 22:48:52136 last_session_exited_cleanly_(true),
[email protected]537c1082011-12-02 02:37:17137 profile_dependency_manager_(ProfileDependencyManager::GetInstance()),
138 delegate_(NULL) {
[email protected]f9dec9482010-08-20 20:42:19139 if (!temp_dir_.CreateUniqueTempDir()) {
140 LOG(ERROR) << "Failed to create unique temporary directory.";
initial.commit09911bf2008-07-26 23:55:29141
[email protected]f9dec9482010-08-20 20:42:19142 // Fallback logic in case we fail to create unique temporary directory.
143 FilePath system_tmp_dir;
144 bool success = PathService::Get(base::DIR_TEMP, &system_tmp_dir);
[email protected]848cd05e2008-09-19 18:33:48145
[email protected]f9dec9482010-08-20 20:42:19146 // We're severly screwed if we can't get the system temporary
147 // directory. Die now to avoid writing to the filesystem root
148 // or other bad places.
149 CHECK(success);
150
151 FilePath fallback_dir(system_tmp_dir.AppendASCII("TestingProfilePath"));
152 file_util::Delete(fallback_dir, true);
153 file_util::CreateDirectory(fallback_dir);
154 if (!temp_dir_.Set(fallback_dir)) {
155 // That shouldn't happen, but if it does, try to recover.
156 LOG(ERROR) << "Failed to use a fallback temporary directory.";
157
158 // We're screwed if this fails, see CHECK above.
159 CHECK(temp_dir_.Set(system_tmp_dir));
160 }
161 }
[email protected]dcb72d52011-04-13 12:36:53162
[email protected]49a25632011-08-31 17:03:48163 profile_path_ = temp_dir_.path();
164
165 Init();
[email protected]537c1082011-12-02 02:37:17166 FinishInit();
[email protected]49a25632011-08-31 17:03:48167}
168
169TestingProfile::TestingProfile(const FilePath& path)
170 : start_time_(Time::Now()),
171 testing_prefs_(NULL),
172 incognito_(false),
173 last_session_exited_cleanly_(true),
174 profile_path_(path),
[email protected]537c1082011-12-02 02:37:17175 profile_dependency_manager_(ProfileDependencyManager::GetInstance()),
176 delegate_(NULL) {
[email protected]49a25632011-08-31 17:03:48177 Init();
[email protected]537c1082011-12-02 02:37:17178 FinishInit();
179}
180
181TestingProfile::TestingProfile(const FilePath& path,
182 Delegate* delegate)
183 : start_time_(Time::Now()),
184 testing_prefs_(NULL),
185 incognito_(false),
186 last_session_exited_cleanly_(true),
187 profile_path_(path),
188 profile_dependency_manager_(ProfileDependencyManager::GetInstance()),
189 delegate_(delegate) {
190 Init();
191 if (delegate_) {
192 MessageLoop::current()->PostTask(FROM_HERE,
193 base::Bind(&TestingProfile::FinishInit,
194 base::Unretained(this)));
195 } else {
196 FinishInit();
197 }
[email protected]49a25632011-08-31 17:03:48198}
199
200void TestingProfile::Init() {
201 profile_dependency_manager_->CreateProfileServices(this, true);
202
[email protected]dcb72d52011-04-13 12:36:53203 // Install profile keyed service factory hooks for dummy/test services
[email protected]7722653b2011-06-03 17:28:22204 DesktopNotificationServiceFactory::GetInstance()->SetTestingFactory(
205 this, CreateTestDesktopNotificationService);
[email protected]537c1082011-12-02 02:37:17206}
[email protected]12463cd2011-07-19 09:40:20207
[email protected]537c1082011-12-02 02:37:17208void TestingProfile::FinishInit() {
[email protected]080adba92011-12-07 19:00:40209 DCHECK(content::NotificationService::current());
[email protected]ad50def52011-10-19 23:17:07210 content::NotificationService::current()->Notify(
[email protected]12463cd2011-07-19 09:40:20211 chrome::NOTIFICATION_PROFILE_CREATED,
[email protected]6c2381d2011-10-19 02:52:53212 content::Source<Profile>(static_cast<Profile*>(this)),
[email protected]ad50def52011-10-19 23:17:07213 content::NotificationService::NoDetails());
[email protected]537c1082011-12-02 02:37:17214
215 if (delegate_)
216 delegate_->OnProfileCreated(this, true);
[email protected]ab23dbe2010-08-12 02:10:46217}
218
[email protected]f25387b2008-08-21 15:20:33219TestingProfile::~TestingProfile() {
[email protected]080adba92011-12-07 19:00:40220 DCHECK(content::NotificationService::current());
[email protected]ad50def52011-10-19 23:17:07221 content::NotificationService::current()->Notify(
[email protected]432115822011-07-10 15:52:27222 chrome::NOTIFICATION_PROFILE_DESTROYED,
[email protected]6c2381d2011-10-19 02:52:53223 content::Source<Profile>(static_cast<Profile*>(this)),
[email protected]ad50def52011-10-19 23:17:07224 content::NotificationService::NoDetails());
[email protected]5cdcd152011-03-31 22:48:52225
226 profile_dependency_manager_->DestroyProfileServices(this);
227
[email protected]35552dc52011-07-12 09:04:38228 if (host_content_settings_map_)
229 host_content_settings_map_->ShutdownOnUIThread();
230
[email protected]809cc4d2010-10-27 15:22:54231 DestroyTopSites();
[email protected]f25387b2008-08-21 15:20:33232 DestroyHistoryService();
[email protected]d2879af2010-02-08 16:02:56233 // FaviconService depends on HistoryServce so destroying it later.
234 DestroyFaviconService();
[email protected]2609bc12010-01-24 08:32:55235 DestroyWebDataService();
[email protected]cdba46992011-06-07 11:51:39236
[email protected]cc5bfd42010-11-24 14:44:02237 if (pref_proxy_config_tracker_.get())
238 pref_proxy_config_tracker_->DetachFromPrefService();
[email protected]f25387b2008-08-21 15:20:33239}
initial.commit09911bf2008-07-26 23:55:29240
[email protected]d2879af2010-02-08 16:02:56241void TestingProfile::CreateFaviconService() {
[email protected]04732c0e2011-09-16 13:21:53242 favicon_service_.reset(new FaviconService(this));
[email protected]d2879af2010-02-08 16:02:56243}
244
[email protected]d486a0852009-11-02 21:40:00245void TestingProfile::CreateHistoryService(bool delete_file, bool no_db) {
[email protected]809cc4d2010-10-27 15:22:54246 DestroyHistoryService();
[email protected]f25387b2008-08-21 15:20:33247 if (delete_file) {
[email protected]f7011fcb2009-01-28 21:54:32248 FilePath path = GetPath();
249 path = path.Append(chrome::kHistoryFilename);
[email protected]f25387b2008-08-21 15:20:33250 file_util::Delete(path, false);
251 }
[email protected]90ef13132008-08-27 03:27:46252 history_service_ = new HistoryService(this);
[email protected]d486a0852009-11-02 21:40:00253 history_service_->Init(GetPath(), bookmark_bar_model_.get(), no_db);
initial.commit09911bf2008-07-26 23:55:29254}
255
256void TestingProfile::DestroyHistoryService() {
257 if (!history_service_.get())
258 return;
259
260 history_service_->NotifyRenderProcessHostDestruction(0);
[email protected]1cb1a242011-12-10 18:36:51261 history_service_->SetOnBackendDestroyTask(MessageLoop::QuitClosure());
initial.commit09911bf2008-07-26 23:55:29262 history_service_->Cleanup();
263 history_service_ = NULL;
264
265 // Wait for the backend class to terminate before deleting the files and
266 // moving to the next test. Note: if this never terminates, somebody is
267 // probably leaking a reference to the history backend, so it never calls
268 // our destroy task.
269 MessageLoop::current()->Run();
270
initial.commit09911bf2008-07-26 23:55:29271 // Make sure we don't have any event pending that could disrupt the next
272 // test.
[email protected]1cb1a242011-12-10 18:36:51273 MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
initial.commit09911bf2008-07-26 23:55:29274 MessageLoop::current()->Run();
275}
[email protected]4d0cd7ce2008-08-11 16:40:57276
[email protected]809cc4d2010-10-27 15:22:54277void TestingProfile::CreateTopSites() {
278 DestroyTopSites();
279 top_sites_ = new history::TopSites(this);
[email protected]73c47932010-12-06 18:13:43280 FilePath file_name = GetPath().Append(chrome::kTopSitesFilename);
[email protected]809cc4d2010-10-27 15:22:54281 top_sites_->Init(file_name);
282}
283
284void TestingProfile::DestroyTopSites() {
285 if (top_sites_.get()) {
286 top_sites_->Shutdown();
287 top_sites_ = NULL;
288 // TopSites::Shutdown schedules some tasks (from TopSitesBackend) that need
289 // to be run to properly shutdown. Run all pending tasks now. This is
290 // normally handled by browser_process shutdown.
291 if (MessageLoop::current())
292 MessageLoop::current()->RunAllPending();
293 }
294}
295
296void TestingProfile::DestroyFaviconService() {
[email protected]04732c0e2011-09-16 13:21:53297 favicon_service_.reset();
[email protected]809cc4d2010-10-27 15:22:54298}
299
[email protected]d8e41ed2008-09-11 15:22:32300void TestingProfile::CreateBookmarkModel(bool delete_file) {
[email protected]90ef13132008-08-27 03:27:46301 // Nuke the model first, that way we're sure it's done writing to disk.
302 bookmark_bar_model_.reset(NULL);
303
304 if (delete_file) {
[email protected]f7011fcb2009-01-28 21:54:32305 FilePath path = GetPath();
306 path = path.Append(chrome::kBookmarksFileName);
[email protected]90ef13132008-08-27 03:27:46307 file_util::Delete(path, false);
308 }
[email protected]d8e41ed2008-09-11 15:22:32309 bookmark_bar_model_.reset(new BookmarkModel(this));
[email protected]90ef13132008-08-27 03:27:46310 if (history_service_.get()) {
311 history_service_->history_backend_->bookmark_service_ =
312 bookmark_bar_model_.get();
313 history_service_->history_backend_->expirer_.bookmark_service_ =
314 bookmark_bar_model_.get();
315 }
316 bookmark_bar_model_->Load();
[email protected]4d0cd7ce2008-08-11 16:40:57317}
[email protected]d2c017a2008-08-13 21:51:45318
[email protected]69c579e2010-04-23 20:01:00319void TestingProfile::CreateAutocompleteClassifier() {
320 autocomplete_classifier_.reset(new AutocompleteClassifier(this));
321}
322
[email protected]a6d36cc2011-02-23 00:39:48323void TestingProfile::CreateProtocolHandlerRegistry() {
[email protected]fd8ca522011-05-02 18:54:49324 protocol_handler_registry_ = new ProtocolHandlerRegistry(this,
325 new ProtocolHandlerRegistry::Delegate());
[email protected]a6d36cc2011-02-23 00:39:48326}
327
[email protected]2609bc12010-01-24 08:32:55328void TestingProfile::CreateWebDataService(bool delete_file) {
329 if (web_data_service_.get())
330 web_data_service_->Shutdown();
331
332 if (delete_file) {
333 FilePath path = GetPath();
334 path = path.Append(chrome::kWebDataFilename);
335 file_util::Delete(path, false);
336 }
337
338 web_data_service_ = new WebDataService;
339 if (web_data_service_.get())
340 web_data_service_->Init(GetPath());
341}
342
[email protected]d364c652008-08-29 19:46:56343void TestingProfile::BlockUntilBookmarkModelLoaded() {
344 DCHECK(bookmark_bar_model_.get());
345 if (bookmark_bar_model_->IsLoaded())
346 return;
347 BookmarkLoadObserver observer;
348 bookmark_bar_model_->AddObserver(&observer);
349 MessageLoop::current()->Run();
350 bookmark_bar_model_->RemoveObserver(&observer);
351 DCHECK(bookmark_bar_model_->IsLoaded());
352}
353
[email protected]120abf132011-09-27 21:38:06354// TODO(phajdan.jr): Doesn't this hang if Top Sites are already loaded?
[email protected]809cc4d2010-10-27 15:22:54355void TestingProfile::BlockUntilTopSitesLoaded() {
[email protected]120abf132011-09-27 21:38:06356 ui_test_utils::WindowedNotificationObserver top_sites_loaded_observer(
357 chrome::NOTIFICATION_TOP_SITES_LOADED,
[email protected]ad50def52011-10-19 23:17:07358 content::NotificationService::AllSources());
[email protected]809cc4d2010-10-27 15:22:54359 if (!GetHistoryService(Profile::EXPLICIT_ACCESS))
360 GetTopSites()->HistoryLoaded();
[email protected]120abf132011-09-27 21:38:06361 top_sites_loaded_observer.Wait();
[email protected]809cc4d2010-10-27 15:22:54362}
363
[email protected]fb9d1f42010-10-06 23:17:59364void TestingProfile::CreateTemplateURLFetcher() {
365 template_url_fetcher_.reset(new TemplateURLFetcher(this));
366}
367
[email protected]67e79992012-02-13 20:47:58368static ProfileKeyedBase* BuildTemplateURLService(Profile* profile) {
[email protected]8e5c89a2011-06-07 18:13:33369 return new TemplateURLService(profile);
[email protected]fb9d1f42010-10-06 23:17:59370}
371
[email protected]8e5c89a2011-06-07 18:13:33372void TestingProfile::CreateTemplateURLService() {
373 TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse(
374 this, BuildTemplateURLService);
[email protected]d2c017a2008-08-13 21:51:45375}
[email protected]0bfc29a2009-04-27 16:15:44376
[email protected]66d22162011-11-22 03:47:31377void TestingProfile::BlockUntilTemplateURLServiceLoaded() {
378 TemplateURLService* turl_model =
379 TemplateURLServiceFactory::GetForProfile(this);
380 if (turl_model->loaded())
381 return;
382
383 ui_test_utils::WindowedNotificationObserver turl_service_load_observer(
384 chrome::NOTIFICATION_TEMPLATE_URL_SERVICE_LOADED,
385 content::NotificationService::AllSources());
386 turl_model->Load();
387 turl_service_load_observer.Wait();
388}
389
[email protected]406b5a92011-11-08 11:58:26390void TestingProfile::CreateExtensionProcessManager() {
391 extension_process_manager_.reset(ExtensionProcessManager::Create(this));
392}
393
[email protected]9a8c4022011-01-25 14:25:33394ExtensionService* TestingProfile::CreateExtensionService(
[email protected]2fb7dc982010-09-29 12:24:28395 const CommandLine* command_line,
[email protected]90310d92011-04-17 07:35:04396 const FilePath& install_directory,
397 bool autoupdate_enabled) {
[email protected]9a8c4022011-01-25 14:25:33398 // Extension pref store, created for use by |extension_prefs_|.
399
400 extension_pref_value_map_.reset(new ExtensionPrefValueMap);
[email protected]9e33d7e2011-09-30 16:43:54401
402 bool extensions_disabled =
403 command_line && command_line->HasSwitch(switches::kDisableExtensions);
404
[email protected]9a8c4022011-01-25 14:25:33405 // Note that the GetPrefs() creates a TestingPrefService, therefore
406 // the extension controlled pref values set in extension_prefs_
407 // are not reflected in the pref service. One would need to
408 // inject a new ExtensionPrefStore(extension_pref_value_map_.get(), false).
409 extension_prefs_.reset(
410 new ExtensionPrefs(GetPrefs(),
411 install_directory,
412 extension_pref_value_map_.get()));
[email protected]9e33d7e2011-09-30 16:43:54413 extension_prefs_->Init(extensions_disabled);
[email protected]14908b72011-04-20 06:54:36414 extension_service_.reset(new ExtensionService(this,
415 command_line,
416 install_directory,
417 extension_prefs_.get(),
418 autoupdate_enabled,
419 true));
420 return extension_service_.get();
[email protected]2fb7dc982010-09-29 12:24:28421}
422
[email protected]f9dec9482010-08-20 20:42:19423FilePath TestingProfile::GetPath() {
[email protected]49a25632011-08-31 17:03:48424 return profile_path_;
[email protected]f9dec9482010-08-20 20:42:19425}
426
[email protected]dbbad7a2010-08-13 18:18:36427TestingPrefService* TestingProfile::GetTestingPrefService() {
[email protected]2fb7dc982010-09-29 12:24:28428 if (!prefs_.get())
429 CreateTestingPrefService();
430 DCHECK(testing_prefs_);
431 return testing_prefs_;
[email protected]dbbad7a2010-08-13 18:18:36432}
433
[email protected]8e5c89a2011-06-07 18:13:33434TestingProfile* TestingProfile::AsTestingProfile() {
435 return this;
436}
437
[email protected]29d70252011-04-28 02:16:58438std::string TestingProfile::GetProfileName() {
439 return std::string("testing_profile");
440}
441
[email protected]fadc607b62011-02-07 17:55:50442bool TestingProfile::IsOffTheRecord() {
[email protected]5bb2f522011-03-25 19:04:44443 return incognito_;
[email protected]fadc607b62011-02-07 17:55:50444}
445
[email protected]93dba942011-02-23 22:45:01446void TestingProfile::SetOffTheRecordProfile(Profile* profile) {
[email protected]5bb2f522011-03-25 19:04:44447 incognito_profile_.reset(profile);
[email protected]93dba942011-02-23 22:45:01448}
449
[email protected]fadc607b62011-02-07 17:55:50450Profile* TestingProfile::GetOffTheRecordProfile() {
[email protected]5bb2f522011-03-25 19:04:44451 return incognito_profile_.get();
[email protected]fadc607b62011-02-07 17:55:50452}
453
[email protected]d4f5d1162011-11-30 01:41:52454GAIAInfoUpdateService* TestingProfile::GetGAIAInfoUpdateService() {
455 return NULL;
456}
457
[email protected]fadc607b62011-02-07 17:55:50458bool TestingProfile::HasOffTheRecordProfile() {
[email protected]5bb2f522011-03-25 19:04:44459 return incognito_profile_.get() != NULL;
[email protected]fadc607b62011-02-07 17:55:50460}
461
462Profile* TestingProfile::GetOriginalProfile() {
463 return this;
464}
465
[email protected]fadc607b62011-02-07 17:55:50466VisitedLinkMaster* TestingProfile::GetVisitedLinkMaster() {
467 return NULL;
468}
469
[email protected]eaa7dd182010-12-14 11:09:00470ExtensionService* TestingProfile::GetExtensionService() {
[email protected]14908b72011-04-20 06:54:36471 return extension_service_.get();
[email protected]2fb7dc982010-09-29 12:24:28472}
473
[email protected]fadc607b62011-02-07 17:55:50474UserScriptMaster* TestingProfile::GetUserScriptMaster() {
475 return NULL;
476}
477
478ExtensionDevToolsManager* TestingProfile::GetExtensionDevToolsManager() {
479 return NULL;
480}
481
482ExtensionProcessManager* TestingProfile::GetExtensionProcessManager() {
[email protected]406b5a92011-11-08 11:58:26483 return extension_process_manager_.get();
[email protected]fadc607b62011-02-07 17:55:50484}
485
486ExtensionMessageService* TestingProfile::GetExtensionMessageService() {
487 return NULL;
488}
489
490ExtensionEventRouter* TestingProfile::GetExtensionEventRouter() {
491 return NULL;
492}
493
[email protected]2261e7b72011-07-12 13:43:55494void TestingProfile::SetExtensionSpecialStoragePolicy(
495 ExtensionSpecialStoragePolicy* extension_special_storage_policy) {
496 extension_special_storage_policy_ = extension_special_storage_policy;
497}
498
[email protected]19eb80152011-02-26 00:28:43499ExtensionSpecialStoragePolicy*
500TestingProfile::GetExtensionSpecialStoragePolicy() {
[email protected]cdba46992011-06-07 11:51:39501 if (!extension_special_storage_policy_.get())
[email protected]7c5048c2011-08-19 17:07:05502 extension_special_storage_policy_ = new ExtensionSpecialStoragePolicy(NULL);
[email protected]cdba46992011-06-07 11:51:39503 return extension_special_storage_policy_.get();
[email protected]19eb80152011-02-26 00:28:43504}
505
[email protected]fadc607b62011-02-07 17:55:50506FaviconService* TestingProfile::GetFaviconService(ServiceAccessType access) {
507 return favicon_service_.get();
508}
509
510HistoryService* TestingProfile::GetHistoryService(ServiceAccessType access) {
511 return history_service_.get();
512}
513
514HistoryService* TestingProfile::GetHistoryServiceWithoutCreating() {
515 return history_service_.get();
516}
517
[email protected]dbbad7a2010-08-13 18:18:36518net::CookieMonster* TestingProfile::GetCookieMonster() {
519 if (!GetRequestContext())
520 return NULL;
[email protected]277ec262011-03-30 21:09:40521 return GetRequestContext()->GetURLRequestContext()->cookie_store()->
522 GetCookieMonster();
[email protected]dbbad7a2010-08-13 18:18:36523}
524
[email protected]fadc607b62011-02-07 17:55:50525AutocompleteClassifier* TestingProfile::GetAutocompleteClassifier() {
526 return autocomplete_classifier_.get();
527}
528
[email protected]c620fd52011-07-22 18:33:29529history::ShortcutsBackend* TestingProfile::GetShortcutsBackend() {
530 return NULL;
531}
532
[email protected]fadc607b62011-02-07 17:55:50533WebDataService* TestingProfile::GetWebDataService(ServiceAccessType access) {
534 return web_data_service_.get();
535}
536
537WebDataService* TestingProfile::GetWebDataServiceWithoutCreating() {
538 return web_data_service_.get();
539}
540
541PasswordStore* TestingProfile::GetPasswordStore(ServiceAccessType access) {
542 return NULL;
543}
544
[email protected]2fb7dc982010-09-29 12:24:28545void TestingProfile::SetPrefService(PrefService* prefs) {
[email protected]2fb7dc982010-09-29 12:24:28546 prefs_.reset(prefs);
547}
548
549void TestingProfile::CreateTestingPrefService() {
550 DCHECK(!prefs_.get());
551 testing_prefs_ = new TestingPrefService();
552 prefs_.reset(testing_prefs_);
553 Profile::RegisterUserPrefs(prefs_.get());
[email protected]2f9d81322011-02-21 09:55:43554 browser::RegisterUserPrefs(prefs_.get());
[email protected]2fb7dc982010-09-29 12:24:28555}
556
[email protected]dbbad7a2010-08-13 18:18:36557PrefService* TestingProfile::GetPrefs() {
558 if (!prefs_.get()) {
[email protected]2fb7dc982010-09-29 12:24:28559 CreateTestingPrefService();
[email protected]dbbad7a2010-08-13 18:18:36560 }
561 return prefs_.get();
562}
563
[email protected]fadc607b62011-02-07 17:55:50564TemplateURLFetcher* TestingProfile::GetTemplateURLFetcher() {
565 return template_url_fetcher_.get();
566}
567
[email protected]dbbad7a2010-08-13 18:18:36568history::TopSites* TestingProfile::GetTopSites() {
[email protected]809cc4d2010-10-27 15:22:54569 return top_sites_.get();
[email protected]dbbad7a2010-08-13 18:18:36570}
571
[email protected]fadc607b62011-02-07 17:55:50572history::TopSites* TestingProfile::GetTopSitesWithoutCreating() {
573 return top_sites_.get();
574}
575
576DownloadManager* TestingProfile::GetDownloadManager() {
577 return NULL;
578}
579
[email protected]abe2c032011-03-31 18:49:34580net::URLRequestContextGetter* TestingProfile::GetRequestContext() {
[email protected]812b3a32010-01-08 05:36:04581 return request_context_.get();
582}
583
[email protected]da5683db2011-04-23 17:12:21584net::URLRequestContextGetter* TestingProfile::GetRequestContextForRenderProcess(
585 int renderer_child_id) {
586 if (extension_service_.get()) {
587 const Extension* installed_app = extension_service_->
588 GetInstalledAppForRenderer(renderer_child_id);
589 if (installed_app != NULL && installed_app->is_storage_isolated())
590 return GetRequestContextForIsolatedApp(installed_app->id());
591 }
[email protected]d9696672011-03-15 22:45:09592
593 return GetRequestContext();
594}
595
[email protected]812b3a32010-01-08 05:36:04596void TestingProfile::CreateRequestContext() {
597 if (!request_context_)
598 request_context_ = new TestURLRequestContextGetter();
599}
600
[email protected]7c893202010-10-07 20:18:02601void TestingProfile::ResetRequestContext() {
602 request_context_ = NULL;
603}
604
[email protected]abe2c032011-03-31 18:49:34605net::URLRequestContextGetter* TestingProfile::GetRequestContextForMedia() {
[email protected]fadc607b62011-02-07 17:55:50606 return NULL;
607}
608
[email protected]abe2c032011-03-31 18:49:34609net::URLRequestContextGetter* TestingProfile::GetRequestContextForExtensions() {
[email protected]c10da4b02010-03-25 14:38:32610 if (!extensions_request_context_)
611 extensions_request_context_ = new TestExtensionURLRequestContextGetter();
612 return extensions_request_context_.get();
613}
614
[email protected]fadc607b62011-02-07 17:55:50615net::SSLConfigService* TestingProfile::GetSSLConfigService() {
616 return NULL;
617}
618
619UserStyleSheetWatcher* TestingProfile::GetUserStyleSheetWatcher() {
620 return NULL;
621}
622
[email protected]abe2c032011-03-31 18:49:34623net::URLRequestContextGetter* TestingProfile::GetRequestContextForIsolatedApp(
[email protected]d9696672011-03-15 22:45:09624 const std::string& app_id) {
625 // We don't test isolated app storage here yet, so returning the same dummy
626 // context is sufficient for now.
627 return GetRequestContext();
628}
629
[email protected]df02aca2012-02-09 21:03:20630content::ResourceContext* TestingProfile::GetResourceContext() {
[email protected]314c3e22012-02-21 03:57:42631 if (!resource_context_.get())
632 resource_context_.reset(new content::MockResourceContext());
633 return resource_context_.get();
[email protected]e89b77d2011-04-15 18:58:10634}
635
[email protected]dbbad7a2010-08-13 18:18:36636HostContentSettingsMap* TestingProfile::GetHostContentSettingsMap() {
[email protected]35552dc52011-07-12 09:04:38637 if (!host_content_settings_map_.get()) {
638 host_content_settings_map_ = new HostContentSettingsMap(
639 GetPrefs(), GetExtensionService(), false);
640 }
[email protected]dbbad7a2010-08-13 18:18:36641 return host_content_settings_map_.get();
642}
643
[email protected]810ddc52012-01-24 01:00:35644content::GeolocationPermissionContext*
[email protected]dbbad7a2010-08-13 18:18:36645TestingProfile::GetGeolocationPermissionContext() {
646 if (!geolocation_permission_context_.get()) {
647 geolocation_permission_context_ =
[email protected]c476e632011-06-23 11:18:04648 new ChromeGeolocationPermissionContext(this);
[email protected]dbbad7a2010-08-13 18:18:36649 }
650 return geolocation_permission_context_.get();
651}
652
[email protected]2ee0c3f2012-02-13 00:28:36653content::SpeechInputPreferences* TestingProfile::GetSpeechInputPreferences() {
[email protected]8238dd62011-09-29 15:13:01654 if (!speech_input_preferences_.get())
655 speech_input_preferences_ = new ChromeSpeechInputPreferences(GetPrefs());
656 return speech_input_preferences_.get();
657}
658
[email protected]fadc607b62011-02-07 17:55:50659HostZoomMap* TestingProfile::GetHostZoomMap() {
660 return NULL;
661}
662
[email protected]fadc607b62011-02-07 17:55:50663std::wstring TestingProfile::GetName() {
664 return std::wstring();
665}
666
667std::wstring TestingProfile::GetID() {
668 return id_;
669}
670
671void TestingProfile::SetID(const std::wstring& id) {
672 id_ = id;
673}
674
675bool TestingProfile::DidLastSessionExitCleanly() {
676 return last_session_exited_cleanly_;
677}
678
679BookmarkModel* TestingProfile::GetBookmarkModel() {
680 return bookmark_bar_model_.get();
681}
682
683bool TestingProfile::IsSameProfile(Profile *p) {
684 return this == p;
685}
686
687base::Time TestingProfile::GetStartTime() const {
688 return start_time_;
689}
690
[email protected]a6d36cc2011-02-23 00:39:48691ProtocolHandlerRegistry* TestingProfile::GetProtocolHandlerRegistry() {
692 return protocol_handler_registry_.get();
693}
694
[email protected]fadc607b62011-02-07 17:55:50695WebKitContext* TestingProfile::GetOffTheRecordWebKitContext() {
696 return NULL;
697}
698
[email protected]fadc607b62011-02-07 17:55:50699FilePath TestingProfile::last_selected_directory() {
700 return last_selected_directory_;
701}
702
703void TestingProfile::set_last_selected_directory(const FilePath& path) {
704 last_selected_directory_ = path;
705}
706
[email protected]cc5bfd42010-11-24 14:44:02707PrefProxyConfigTracker* TestingProfile::GetProxyConfigTracker() {
[email protected]6f96cbcb2011-11-04 02:26:07708 if (!pref_proxy_config_tracker_.get()) {
709 pref_proxy_config_tracker_.reset(
710 ProxyServiceFactory::CreatePrefProxyConfigTracker(GetPrefs()));
711 }
712 return pref_proxy_config_tracker_.get();
[email protected]cc5bfd42010-11-24 14:44:02713}
714
[email protected]0bfc29a2009-04-27 16:15:44715void TestingProfile::BlockUntilHistoryProcessesPendingRequests() {
716 DCHECK(history_service_.get());
717 DCHECK(MessageLoop::current());
718
719 CancelableRequestConsumer consumer;
720 history_service_->ScheduleDBTask(new QuittingHistoryDBTask(), &consumer);
721 MessageLoop::current()->Run();
722}
[email protected]345a8b72009-09-29 09:11:44723
[email protected]8e4c29612010-07-14 01:24:45724TokenService* TestingProfile::GetTokenService() {
725 if (!token_service_.get()) {
726 token_service_.reset(new TokenService());
727 }
728 return token_service_.get();
729}
730
[email protected]fadc607b62011-02-07 17:55:50731ExtensionInfoMap* TestingProfile::GetExtensionInfoMap() {
732 return NULL;
733}
734
735PromoCounter* TestingProfile::GetInstantPromoCounter() {
736 return NULL;
737}
738
[email protected]248ce192011-02-10 15:26:34739ChromeURLDataManager* TestingProfile::GetChromeURLDataManager() {
740 if (!chrome_url_data_manager_.get())
[email protected]63e26822011-07-16 19:07:35741 chrome_url_data_manager_.reset(
742 new ChromeURLDataManager(
743 base::Callback<ChromeURLDataManagerBackend*(void)>()));
[email protected]248ce192011-02-10 15:26:34744 return chrome_url_data_manager_.get();
745}
746
[email protected]8382d8c2011-09-15 03:43:17747chrome_browser_net::Predictor* TestingProfile::GetNetworkPredictor() {
748 return NULL;
749}
750
[email protected]db96a882011-10-09 02:01:54751void TestingProfile::ClearNetworkingHistorySince(base::Time time) {
[email protected]02896a82011-09-21 18:54:32752 NOTIMPLEMENTED();
753}
754
[email protected]671f9c62011-10-28 19:22:07755GURL TestingProfile::GetHomePage() {
756 return GURL(chrome::kChromeUINewTabURL);
757}
758
[email protected]fadc607b62011-02-07 17:55:50759PrefService* TestingProfile::GetOffTheRecordPrefs() {
760 return NULL;
761}
762
[email protected]36fb2c7c2011-04-04 15:49:08763quota::SpecialStoragePolicy* TestingProfile::GetSpecialStoragePolicy() {
764 return GetExtensionSpecialStoragePolicy();
765}
766
[email protected]2609bc12010-01-24 08:32:55767void TestingProfile::DestroyWebDataService() {
768 if (!web_data_service_.get())
769 return;
770
771 web_data_service_->Shutdown();
772}