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

Side by Side Diff: chrome/browser/automation/testing_automation_provider.cc

Issue 11971025: [sync] Divorce python sync test server chromiumsync.py from testserver.py (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address Philippe's comments. Created 7 years, 11 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/automation/testing_automation_provider.h" 5 #include "chrome/browser/automation/testing_automation_provider.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 #include "chrome/browser/prefs/pref_service.h" 77 #include "chrome/browser/prefs/pref_service.h"
78 #include "chrome/browser/printing/print_preview_dialog_controller.h" 78 #include "chrome/browser/printing/print_preview_dialog_controller.h"
79 #include "chrome/browser/profiles/profile.h" 79 #include "chrome/browser/profiles/profile.h"
80 #include "chrome/browser/profiles/profile_info_cache.h" 80 #include "chrome/browser/profiles/profile_info_cache.h"
81 #include "chrome/browser/profiles/profile_manager.h" 81 #include "chrome/browser/profiles/profile_manager.h"
82 #include "chrome/browser/search_engines/template_url.h" 82 #include "chrome/browser/search_engines/template_url.h"
83 #include "chrome/browser/search_engines/template_url_service.h" 83 #include "chrome/browser/search_engines/template_url_service.h"
84 #include "chrome/browser/search_engines/template_url_service_factory.h" 84 #include "chrome/browser/search_engines/template_url_service_factory.h"
85 #include "chrome/browser/sessions/session_service_factory.h" 85 #include "chrome/browser/sessions/session_service_factory.h"
86 #include "chrome/browser/sessions/session_tab_helper.h" 86 #include "chrome/browser/sessions/session_tab_helper.h"
87 #include "chrome/browser/sync/profile_sync_service.h"
88 #include "chrome/browser/sync/profile_sync_service_factory.h"
89 #include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h" 87 #include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h"
90 #include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h" 88 #include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h"
91 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" 89 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h"
92 #include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" 90 #include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h"
93 #include "chrome/browser/ui/bookmarks/bookmark_bar.h" 91 #include "chrome/browser/ui/bookmarks/bookmark_bar.h"
94 #include "chrome/browser/ui/browser_commands.h" 92 #include "chrome/browser/ui/browser_commands.h"
95 #include "chrome/browser/ui/browser_finder.h" 93 #include "chrome/browser/ui/browser_finder.h"
96 #include "chrome/browser/ui/browser_instant_controller.h" 94 #include "chrome/browser/ui/browser_instant_controller.h"
97 #include "chrome/browser/ui/browser_list.h" 95 #include "chrome/browser/ui/browser_list.h"
98 #include "chrome/browser/ui/browser_tabstrip.h" 96 #include "chrome/browser/ui/browser_tabstrip.h"
(...skipping 1804 matching lines...) Expand 10 before | Expand all | Expand 10 after
1903 1901
1904 browser_handler_map_["FindInPage"] = &TestingAutomationProvider::FindInPage; 1902 browser_handler_map_["FindInPage"] = &TestingAutomationProvider::FindInPage;
1905 1903
1906 browser_handler_map_["GetAllNotifications"] = 1904 browser_handler_map_["GetAllNotifications"] =
1907 &TestingAutomationProvider::GetAllNotifications; 1905 &TestingAutomationProvider::GetAllNotifications;
1908 browser_handler_map_["CloseNotification"] = 1906 browser_handler_map_["CloseNotification"] =
1909 &TestingAutomationProvider::CloseNotification; 1907 &TestingAutomationProvider::CloseNotification;
1910 browser_handler_map_["WaitForNotificationCount"] = 1908 browser_handler_map_["WaitForNotificationCount"] =
1911 &TestingAutomationProvider::WaitForNotificationCount; 1909 &TestingAutomationProvider::WaitForNotificationCount;
1912 1910
1913 browser_handler_map_["SignInToSync"] =
1914 &TestingAutomationProvider::SignInToSync;
1915 browser_handler_map_["GetSyncInfo"] =
1916 &TestingAutomationProvider::GetSyncInfo;
1917 browser_handler_map_["AwaitFullSyncCompletion"] =
1918 &TestingAutomationProvider::AwaitFullSyncCompletion;
1919 browser_handler_map_["AwaitSyncRestart"] =
1920 &TestingAutomationProvider::AwaitSyncRestart;
1921 browser_handler_map_["EnableSyncForDatatypes"] =
1922 &TestingAutomationProvider::EnableSyncForDatatypes;
1923 browser_handler_map_["DisableSyncForDatatypes"] =
1924 &TestingAutomationProvider::DisableSyncForDatatypes;
1925
1926 browser_handler_map_["GetNTPInfo"] = 1911 browser_handler_map_["GetNTPInfo"] =
1927 &TestingAutomationProvider::GetNTPInfo; 1912 &TestingAutomationProvider::GetNTPInfo;
1928 browser_handler_map_["RemoveNTPMostVisitedThumbnail"] = 1913 browser_handler_map_["RemoveNTPMostVisitedThumbnail"] =
1929 &TestingAutomationProvider::RemoveNTPMostVisitedThumbnail; 1914 &TestingAutomationProvider::RemoveNTPMostVisitedThumbnail;
1930 browser_handler_map_["RestoreAllNTPMostVisitedThumbnails"] = 1915 browser_handler_map_["RestoreAllNTPMostVisitedThumbnails"] =
1931 &TestingAutomationProvider::RestoreAllNTPMostVisitedThumbnails; 1916 &TestingAutomationProvider::RestoreAllNTPMostVisitedThumbnails;
1932 1917
1933 browser_handler_map_["KillRendererProcess"] = 1918 browser_handler_map_["KillRendererProcess"] =
1934 &TestingAutomationProvider::KillRendererProcess; 1919 &TestingAutomationProvider::KillRendererProcess;
1935 1920
(...skipping 2235 matching lines...) Expand 10 before | Expand all | Expand 10 after
4171 if (!args->GetString("switch", &switch_name) || 4156 if (!args->GetString("switch", &switch_name) ||
4172 !args->GetString("value", &switch_value)) { 4157 !args->GetString("value", &switch_value)) {
4173 reply.SendError("Missing or invalid command line switch"); 4158 reply.SendError("Missing or invalid command line switch");
4174 return; 4159 return;
4175 } 4160 }
4176 CommandLine::ForCurrentProcess()->AppendSwitchASCII(switch_name, 4161 CommandLine::ForCurrentProcess()->AppendSwitchASCII(switch_name,
4177 switch_value); 4162 switch_value);
4178 reply.SendSuccess(NULL); 4163 reply.SendSuccess(NULL);
4179 } 4164 }
4180 4165
4181 // Sample json output: { "success": true }
4182 void TestingAutomationProvider::SignInToSync(Browser* browser,
4183 DictionaryValue* args,
4184 IPC::Message* reply_message) {
4185 AutomationJSONReply reply(this, reply_message);
4186 std::string username;
4187 std::string password;
4188 if (!args->GetString("username", &username) ||
4189 !args->GetString("password", &password)) {
4190 reply.SendError("Invalid or missing args");
4191 return;
4192 }
4193 if (sync_waiter_.get() == NULL) {
4194 sync_waiter_.reset(new ProfileSyncServiceHarness(
4195 browser->profile(), username, password));
4196 } else {
4197 sync_waiter_->SetCredentials(username, password);
4198 }
4199 if (sync_waiter_->SetupSync()) {
4200 scoped_ptr<DictionaryValue> return_value(new DictionaryValue);
4201 return_value->SetBoolean("success", true);
4202 reply.SendSuccess(return_value.get());
4203 } else {
4204 reply.SendError("Signing in to sync was unsuccessful");
4205 }
4206 }
4207
4208 // Sample json output:
4209 // {u'summary': u'SYNC DISABLED'}
4210 //
4211 // { u'last synced': u'Just now',
4212 // u'sync url': u'clients4.google.com',
4213 // u'updates received': 42,
4214 // u'synced datatypes': [ u'Bookmarks',
4215 // u'Preferences',
4216 // u'Passwords',
4217 // u'Autofill',
4218 // u'Themes',
4219 // u'Extensions',
4220 // u'Apps']}
4221 void TestingAutomationProvider::GetSyncInfo(Browser* browser,
4222 DictionaryValue* args,
4223 IPC::Message* reply_message) {
4224 AutomationJSONReply reply(this, reply_message);
4225 DictionaryValue* sync_info = new DictionaryValue;
4226 scoped_ptr<DictionaryValue> return_value(new DictionaryValue);
4227 if (sync_waiter_.get() == NULL) {
4228 sync_waiter_.reset(
4229 ProfileSyncServiceHarness::CreateAndAttach(browser->profile()));
4230 }
4231 if (!sync_waiter_->IsSyncAlreadySetup()) {
4232 sync_info->SetString("summary", "SYNC DISABLED");
4233 } else {
4234 ProfileSyncService* service = sync_waiter_->service();
4235 ProfileSyncService::Status status = sync_waiter_->GetStatus();
4236 sync_info->SetString("sync url", service->sync_service_url().host());
4237 sync_info->SetString("last synced", service->GetLastSyncedTimeString());
4238 sync_info->SetInteger("updates received", status.updates_received);
4239 ListValue* synced_datatype_list = new ListValue;
4240 const syncer::ModelTypeSet synced_datatypes =
4241 service->GetPreferredDataTypes();
4242 for (syncer::ModelTypeSet::Iterator it = synced_datatypes.First();
4243 it.Good(); it.Inc()) {
4244 synced_datatype_list->Append(
4245 new StringValue(syncer::ModelTypeToString(it.Get())));
4246 }
4247 sync_info->Set("synced datatypes", synced_datatype_list);
4248 }
4249 return_value->Set("sync_info", sync_info);
4250 reply.SendSuccess(return_value.get());
4251 }
4252
4253 // Sample json output: { "success": true }
4254 void TestingAutomationProvider::AwaitFullSyncCompletion(
4255 Browser* browser,
4256 DictionaryValue* args,
4257 IPC::Message* reply_message) {
4258 AutomationJSONReply reply(this, reply_message);
4259 if (sync_waiter_.get() == NULL) {
4260 sync_waiter_.reset(
4261 ProfileSyncServiceHarness::CreateAndAttach(browser->profile()));
4262 }
4263 if (!sync_waiter_->IsSyncAlreadySetup()) {
4264 reply.SendError("Not signed in to sync");
4265 return;
4266 }
4267 // Ensure that the profile sync service and sync backend host are initialized
4268 // before waiting for sync cycle completion. In cases where the browser is
4269 // restarted with sync enabled, these operations may still be in flight.
4270 if (ProfileSyncServiceFactory::GetInstance()->GetForProfile(
4271 browser->profile()) == NULL) {
4272 reply.SendError("ProfileSyncService initialization failed.");
4273 return;
4274 }
4275 if (!sync_waiter_->service()->sync_initialized() &&
4276 !sync_waiter_->AwaitBackendInitialized()) {
4277 reply.SendError("Sync backend host initialization failed.");
4278 return;
4279 }
4280 if (!sync_waiter_->AwaitFullSyncCompletion("Waiting for sync cycle")) {
4281 reply.SendError("Sync cycle did not complete.");
4282 return;
4283 }
4284 scoped_ptr<DictionaryValue> return_value(new DictionaryValue);
4285 return_value->SetBoolean("success", true);
4286 reply.SendSuccess(return_value.get());
4287 }
4288
4289 // Sample json output: { "success": true }
4290 void TestingAutomationProvider::AwaitSyncRestart(
4291 Browser* browser,
4292 DictionaryValue* args,
4293 IPC::Message* reply_message) {
4294 AutomationJSONReply reply(this, reply_message);
4295 if (sync_waiter_.get() == NULL) {
4296 sync_waiter_.reset(
4297 ProfileSyncServiceHarness::CreateAndAttach(browser->profile()));
4298 }
4299 if (!sync_waiter_->IsSyncAlreadySetup()) {
4300 reply.SendError("Not signed in to sync");
4301 return;
4302 }
4303 if (ProfileSyncServiceFactory::GetInstance()->GetForProfile(
4304 browser->profile()) == NULL) {
4305 reply.SendError("ProfileSyncService initialization failed.");
4306 return;
4307 }
4308 if (!sync_waiter_->AwaitSyncRestart()) {
4309 reply.SendError("Sync did not successfully restart.");
4310 return;
4311 }
4312 scoped_ptr<DictionaryValue> return_value(new DictionaryValue);
4313 return_value->SetBoolean("success", true);
4314 reply.SendSuccess(return_value.get());
4315 }
4316
4317 // Refer to EnableSyncForDatatypes() in chrome/test/pyautolib/pyauto.py for
4318 // sample json input. Sample json output: { "success": true }
4319 void TestingAutomationProvider::EnableSyncForDatatypes(
4320 Browser* browser,
4321 DictionaryValue* args,
4322 IPC::Message* reply_message) {
4323 AutomationJSONReply reply(this, reply_message);
4324 if (sync_waiter_.get() == NULL) {
4325 sync_waiter_.reset(
4326 ProfileSyncServiceHarness::CreateAndAttach(browser->profile()));
4327 }
4328 if (!sync_waiter_->IsSyncAlreadySetup()) {
4329 reply.SendError("Not signed in to sync");
4330 return;
4331 }
4332 ListValue* datatypes = NULL;
4333 if (!args->GetList("datatypes", &datatypes)) {
4334 reply.SendError("Invalid or missing args");
4335 return;
4336 }
4337 std::string first_datatype;
4338 datatypes->GetString(0, &first_datatype);
4339 if (first_datatype == "All") {
4340 sync_waiter_->EnableSyncForAllDatatypes();
4341 } else {
4342 int num_datatypes = datatypes->GetSize();
4343 for (int i = 0; i < num_datatypes; ++i) {
4344 std::string datatype_string;
4345 datatypes->GetString(i, &datatype_string);
4346 syncer::ModelType datatype =
4347 syncer::ModelTypeFromString(datatype_string);
4348 if (datatype == syncer::UNSPECIFIED) {
4349 AutomationJSONReply(this, reply_message).SendError(StringPrintf(
4350 "Invalid datatype string: %s.", datatype_string.c_str()));
4351 return;
4352 }
4353 sync_waiter_->EnableSyncForDatatype(datatype);
4354 sync_waiter_->AwaitFullSyncCompletion(StringPrintf(
4355 "Enabling datatype: %s", datatype_string.c_str()));
4356 }
4357 }
4358 scoped_ptr<DictionaryValue> return_value(new DictionaryValue);
4359 return_value->SetBoolean("success", true);
4360 reply.SendSuccess(return_value.get());
4361 }
4362
4363 // Refer to DisableSyncForDatatypes() in chrome/test/pyautolib/pyauto.py for
4364 // sample json input. Sample json output: { "success": true }
4365 void TestingAutomationProvider::DisableSyncForDatatypes(
4366 Browser* browser,
4367 DictionaryValue* args,
4368 IPC::Message* reply_message) {
4369 AutomationJSONReply reply(this, reply_message);
4370 if (sync_waiter_.get() == NULL) {
4371 sync_waiter_.reset(
4372 ProfileSyncServiceHarness::CreateAndAttach(browser->profile()));
4373 }
4374 if (!sync_waiter_->IsSyncAlreadySetup()) {
4375 reply.SendError("Not signed in to sync");
4376 return;
4377 }
4378 ListValue* datatypes = NULL;
4379 if (!args->GetList("datatypes", &datatypes)) {
4380 reply.SendError("Invalid or missing args");
4381 return;
4382 }
4383 std::string first_datatype;
4384 if (!datatypes->GetString(0, &first_datatype)) {
4385 reply.SendError("Invalid or missing string");
4386 return;
4387 }
4388 if (first_datatype == "All") {
4389 sync_waiter_->DisableSyncForAllDatatypes();
4390 } else {
4391 int num_datatypes = datatypes->GetSize();
4392 for (int i = 0; i < num_datatypes; i++) {
4393 std::string datatype_string;
4394 datatypes->GetString(i, &datatype_string);
4395 syncer::ModelType datatype =
4396 syncer::ModelTypeFromString(datatype_string);
4397 if (datatype == syncer::UNSPECIFIED) {
4398 AutomationJSONReply(this, reply_message).SendError(StringPrintf(
4399 "Invalid datatype string: %s.", datatype_string.c_str()));
4400 return;
4401 }
4402 sync_waiter_->DisableSyncForDatatype(datatype);
4403 sync_waiter_->AwaitFullSyncCompletion(StringPrintf(
4404 "Disabling datatype: %s", datatype_string.c_str()));
4405 }
4406 scoped_ptr<DictionaryValue> return_value(new DictionaryValue);
4407 return_value->SetBoolean("success", true);
4408 reply.SendSuccess(return_value.get());
4409 }
4410 }
4411
4412 // Refer to GetAllNotifications() in chrome/test/pyautolib/pyauto.py for 4166 // Refer to GetAllNotifications() in chrome/test/pyautolib/pyauto.py for
4413 // sample json input/output. 4167 // sample json input/output.
4414 void TestingAutomationProvider::GetAllNotifications( 4168 void TestingAutomationProvider::GetAllNotifications(
4415 Browser* browser, 4169 Browser* browser,
4416 DictionaryValue* args, 4170 DictionaryValue* args,
4417 IPC::Message* reply_message) { 4171 IPC::Message* reply_message) {
4418 new GetAllNotificationsObserver(this, reply_message); 4172 new GetAllNotificationsObserver(this, reply_message);
4419 } 4173 }
4420 4174
4421 // Refer to CloseNotification() in chrome/test/pyautolib/pyauto.py for 4175 // Refer to CloseNotification() in chrome/test/pyautolib/pyauto.py for
(...skipping 1785 matching lines...) Expand 10 before | Expand all | Expand 10 after
6207 if (g_browser_process) 5961 if (g_browser_process)
6208 g_browser_process->GetAutomationProviderList()->RemoveProvider(this); 5962 g_browser_process->GetAutomationProviderList()->RemoveProvider(this);
6209 } 5963 }
6210 5964
6211 void TestingAutomationProvider::EnsureTabSelected(Browser* browser, 5965 void TestingAutomationProvider::EnsureTabSelected(Browser* browser,
6212 WebContents* tab) { 5966 WebContents* tab) {
6213 TabStripModel* tab_strip = browser->tab_strip_model(); 5967 TabStripModel* tab_strip = browser->tab_strip_model();
6214 if (tab_strip->GetActiveWebContents() != tab) 5968 if (tab_strip->GetActiveWebContents() != tab)
6215 tab_strip->ActivateTabAt(tab_strip->GetIndexOfWebContents(tab), true); 5969 tab_strip->ActivateTabAt(tab_strip->GetIndexOfWebContents(tab), true);
6216 } 5970 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698