172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/automation/testing_automation_provider.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <map> 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <set> 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <string> 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <vector> 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/command_line.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/file_path.h" 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/json/json_reader.h" 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/json/json_writer.h" 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/json/string_escape.h" 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/path_service.h" 1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/process.h" 1921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/process_util.h" 20513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/stringprintf.h" 213f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/threading/thread_restrictions.h" 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/time.h" 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/utf_string_conversions.h" 24513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/app/chrome_command_ids.h" 25513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/autocomplete/autocomplete.h" 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/autocomplete/autocomplete_edit.h" 27513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/autocomplete/autocomplete_match.h" 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/autofill/autofill_manager.h" 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/autofill/credit_card.h" 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/autofill/personal_data_manager.h" 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/automation/automation_autocomplete_edit_tracker.h" 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/automation/automation_browser_tracker.h" 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/automation/automation_provider_json.h" 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/automation/automation_provider_list.h" 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/automation/automation_provider_observers.h" 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/automation/automation_tab_tracker.h" 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/automation/automation_util.h" 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/automation/automation_window_tracker.h" 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/automation/ui_controls.h" 40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/blocked_content_container.h" 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/bookmarks/bookmark_model.h" 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/bookmarks/bookmark_storage.h" 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/browser_process.h" 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/browser_shutdown.h" 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/debugger/devtools_manager.h" 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/download/download_prefs.h" 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/download/download_shelf.h" 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/download/save_package.h" 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/extensions/extension_host.h" 5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/extensions/extension_service.h" 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/extensions/extension_updater.h" 52201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/history/top_sites.h" 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/importer/importer_host.h" 54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/instant/instant_controller.h" 554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/notifications/balloon.h" 564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/notifications/balloon_collection.h" 574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/notifications/notification.h" 584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/notifications/notification_ui_manager.h" 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/password_manager/password_store.h" 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/platform_util.h" 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/prefs/pref_service.h" 62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/profiles/profile.h" 6321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile_manager.h" 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/search_engines/template_url.h" 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/search_engines/template_url_model.h" 66dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/tab_contents/confirm_infobar_delegate.h" 67dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/tab_contents/link_infobar_delegate.h" 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/themes/theme_service.h" 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/themes/theme_service_factory.h" 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/translate/translate_infobar_delegate.h" 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/translate/translate_tab_helper.h" 7221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h" 7321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog_queue.h" 7421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser_window.h" 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/download/download_tab_helper.h" 7721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/find_bar/find_bar.h" 7821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/login/login_prompt.h" 7921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/omnibox/location_bar.h" 80dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/search_engines/keyword_editor_controller.h" 8121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/webui/active_downloads_ui.h" 83dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/shown_sections_handler.h" 84dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/common/automation_messages.h" 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/chrome_constants.h" 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/chrome_paths.h" 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/chrome_switches.h" 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/common/extensions/extension.h" 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/common/extensions/extension_extent.h" 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/common/extensions/url_pattern.h" 91dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/common/pref_names.h" 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/url_constants.h" 93dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_process_host.h" 94dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_view_host.h" 95dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/interstitial_page.h" 96dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/common_param_traits.h" 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_service.h" 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "net/base/cookie_store.h" 9972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" 10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/events.h" 10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/message_box_flags.h" 10221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "webkit/plugins/npapi/plugin_list.h" 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace { 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 10621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid SendMouseClick(int flags) { 10721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ui_controls::MouseButton button = ui_controls::LEFT; 10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if ((flags & ui::EF_LEFT_BUTTON_DOWN) == 10972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::EF_LEFT_BUTTON_DOWN) { 11021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen button = ui_controls::LEFT; 11172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else if ((flags & ui::EF_RIGHT_BUTTON_DOWN) == 11272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::EF_RIGHT_BUTTON_DOWN) { 11321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen button = ui_controls::RIGHT; 11472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else if ((flags & ui::EF_MIDDLE_BUTTON_DOWN) == 11572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::EF_MIDDLE_BUTTON_DOWN) { 11621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen button = ui_controls::MIDDLE; 11721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else { 11821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen NOTREACHED(); 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 12121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ui_controls::SendMouseClick(button); 12221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass AutomationInterstitialPage : public InterstitialPage { 125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationInterstitialPage(TabContents* tab, 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& url, 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& contents) 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : InterstitialPage(tab, true, url), 130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen contents_(contents) { 131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual std::string GetHTMLContents() { return contents_; } 134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 13621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string contents_; 137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(AutomationInterstitialPage); 139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace 142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTestingAutomationProvider::TestingAutomationProvider(Profile* profile) 144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : AutomationProvider(profile), 145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(TOOLKIT_VIEWS) 146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen popup_menu_waiter_(NULL), 147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen redirect_query_(0) { 149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen BrowserList::AddObserver(this); 150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen registrar_.Add(this, NotificationType::SESSION_END, 151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotificationService::AllSources()); 152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTestingAutomationProvider::~TestingAutomationProvider() { 155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen BrowserList::RemoveObserver(this); 156bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::OnBrowserAdded(const Browser* browser) { 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::OnBrowserRemoved(const Browser* browser) { 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // For backwards compatibility with the testing automation interface, we 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // want the automation provider (and hence the process) to go away when the 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // last browser goes away. 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (BrowserList::empty() && !CommandLine::ForCurrentProcess()->HasSwitch( 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen switches::kKeepAliveForTest)) { 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // If you change this, update Observer for NotificationType::SESSION_END 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // below. 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MessageLoop::current()->PostTask(FROM_HERE, 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewRunnableMethod(this, &TestingAutomationProvider::OnRemoveProvider)); 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::OnSourceProfilesLoaded() { 17572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DCHECK_NE(static_cast<ImporterList*>(NULL), importer_list_.get()); 17621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Get the correct profile based on the browser that the user provided. 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen importer::SourceProfile source_profile; 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen size_t i = 0; 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen size_t importers_count = importer_list_->count(); 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for ( ; i < importers_count; ++i) { 182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen importer::SourceProfile profile = importer_list_->GetSourceProfileAt(i); 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (profile.importer_name == import_settings_data_.browser_name) { 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen source_profile = profile; 18521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen break; 18621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 18721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 18821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // If we made it to the end of the loop, then the input was bad. 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (i == importers_count) { 190dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, import_settings_data_.reply_message) 191dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("Invalid browser name string found."); 19221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return; 19321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 19421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 19572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<ImporterHost> importer_host(new ImporterHost); 19672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen importer_host->SetObserver( 19721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen new AutomationProviderImportSettingsObserver( 19821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen this, import_settings_data_.reply_message)); 19921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Profile* target_profile = import_settings_data_.browser->profile(); 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen importer_host->StartImportSettings(source_profile, 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen target_profile, 20372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen import_settings_data_.import_items, 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new ProfileWriter(target_profile), 20572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen import_settings_data_.first_run); 20621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 20721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 20821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid TestingAutomationProvider::Observe(NotificationType type, 20921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const NotificationSource& source, 21021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const NotificationDetails& details) { 21121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DCHECK(type == NotificationType::SESSION_END); 21221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // OnBrowserRemoved does a ReleaseLater. When session end is received we exit 21321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // before the task runs resulting in this object not being deleted. This 21421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Release balance out the Release scheduled by OnBrowserRemoved. 21521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen Release(); 21621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 21721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 21821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenbool TestingAutomationProvider::OnMessageReceived( 219bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const IPC::Message& message) { 22021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool handled = true; 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool deserialize_success = true; 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC_BEGIN_MESSAGE_MAP_EX(TestingAutomationProvider, 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen message, 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen deserialize_success) 225bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_CloseBrowser, CloseBrowser) 226bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_CloseBrowserRequestAsync, 227bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen CloseBrowserAsync) 228bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_ActivateTab, ActivateTab) 229bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_AppendTab, AppendTab) 230bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_ActiveTabIndex, GetActiveTabIndex) 231bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_CloseTab, CloseTab) 232bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_GetCookies, GetCookies) 233bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_SetCookie, SetCookie) 234bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_DeleteCookie, DeleteCookie) 235bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_ShowCollectedCookiesDialog, 236bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ShowCollectedCookiesDialog) 237bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY( 238bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_NavigateToURLBlockUntilNavigationsComplete, 239bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigateToURLBlockUntilNavigationsComplete) 240bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_NavigationAsync, NavigationAsync) 241bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_NavigationAsyncWithDisposition, 242bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationAsyncWithDisposition) 243bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_Reload, Reload) 244bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_SetAuth, SetAuth) 245bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_CancelAuth, CancelAuth) 246bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_NeedsAuth, NeedsAuth) 247bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_RedirectsFrom, 248bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetRedirectsFrom) 249bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_BrowserWindowCount, GetBrowserWindowCount) 250bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_NormalBrowserWindowCount, 251bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetNormalBrowserWindowCount) 252bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_BrowserWindow, GetBrowserWindow) 253bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_GetBrowserLocale, GetBrowserLocale) 254bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_LastActiveBrowserWindow, 255bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetLastActiveBrowserWindow) 256bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_ActiveWindow, GetActiveWindow) 257bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_FindNormalBrowserWindow, 258bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FindNormalBrowserWindow) 259bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_IsWindowActive, IsWindowActive) 260bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_ActivateWindow, ActivateWindow) 261bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_IsWindowMaximized, IsWindowMaximized) 262bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_WindowExecuteCommandAsync, 263bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ExecuteBrowserCommandAsync) 264bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WindowExecuteCommand, 265bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ExecuteBrowserCommand) 266bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_TerminateSession, TerminateSession) 267bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_WindowViewBounds, WindowGetViewBounds) 268bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_GetWindowBounds, GetWindowBounds) 269bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_SetWindowBounds, SetWindowBounds) 270bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_SetWindowVisible, SetWindowVisible) 271bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_WindowClick, WindowSimulateClick) 272bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_WindowMouseMove, WindowSimulateMouseMove) 273bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_WindowKeyPress, WindowSimulateKeyPress) 274bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_TabCount, GetTabCount) 275bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_Type, GetType) 276bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_Tab, GetTab) 277bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_TabProcessID, GetTabProcessID) 278bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_TabTitle, GetTabTitle) 279bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_TabIndex, GetTabIndex) 280bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_TabURL, GetTabURL) 281bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_ShelfVisibility, GetShelfVisibility) 282bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_IsFullscreen, IsFullscreen) 283bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_IsFullscreenBubbleVisible, 284bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetFullscreenBubbleVisibility) 285bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_AutocompleteEditForBrowser, 286bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetAutocompleteEditForBrowser) 287bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_AutocompleteEditGetText, 288bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetAutocompleteEditText) 289bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_AutocompleteEditSetText, 290bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SetAutocompleteEditText) 291bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_AutocompleteEditIsQueryInProgress, 292bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutocompleteEditIsQueryInProgress) 293bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_AutocompleteEditGetMatches, 294bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutocompleteEditGetMatches) 295bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WaitForAutocompleteEditFocus, 296bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForAutocompleteEditFocus) 297bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_DomOperation, 298bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ExecuteJavascript) 299bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_ConstrainedWindowCount, 300bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetConstrainedWindowCount) 301bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(TOOLKIT_VIEWS) 302bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_GetFocusedViewID, GetFocusedViewID) 303bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WaitForFocusedViewIDToChange, 304bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForFocusedViewIDToChange) 305bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_StartTrackingPopupMenus, 306bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen StartTrackingPopupMenus) 307bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WaitForPopupMenuToOpen, 308bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForPopupMenuToOpen) 309bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // defined(TOOLKIT_VIEWS) 310bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_InspectElement, 311bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen HandleInspectElementRequest) 312bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_DownloadDirectory, GetDownloadDirectory) 313bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_OpenNewBrowserWindowOfType, 314bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OpenNewBrowserWindowOfType) 315bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_WindowForBrowser, GetWindowForBrowser) 316bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_BrowserForWindow, GetBrowserForWindow) 317bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_ShowInterstitialPage, 318bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ShowInterstitialPage) 319bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_HideInterstitialPage, 320bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen HideInterstitialPage) 321bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WaitForTabToBeRestored, 322bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForTabToBeRestored) 323bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_GetSecurityState, GetSecurityState) 324bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_GetPageType, GetPageType) 325bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_GetMetricEventDuration, 326bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetMetricEventDuration) 327bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_ActionOnSSLBlockingPage, 328bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ActionOnSSLBlockingPage) 329bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_BringBrowserToFront, BringBrowserToFront) 330bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_IsMenuCommandEnabled, 331bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IsMenuCommandEnabled) 332bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_PrintNow, PrintNow) 333bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_SavePage, SavePage) 334bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_OpenFindInPage, 335bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen HandleOpenFindInPageRequest) 336bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_FindWindowVisibility, 337bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetFindWindowVisibility) 338bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_FindWindowLocation, 339bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen HandleFindWindowLocationRequest) 340bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_BookmarkBarVisibility, 341bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetBookmarkBarVisibility) 342bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_GetBookmarksAsJSON, 343bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetBookmarksAsJSON) 344bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WaitForBookmarkModelToLoad, 345bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForBookmarkModelToLoad) 346bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_AddBookmarkGroup, 347bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AddBookmarkGroup) 348bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_AddBookmarkURL, 349bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AddBookmarkURL) 350bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_ReparentBookmark, 351bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ReparentBookmark) 352bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_SetBookmarkTitle, 353bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SetBookmarkTitle) 354bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_SetBookmarkURL, 355bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SetBookmarkURL) 356bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_RemoveBookmark, 357bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen RemoveBookmark) 358bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_GetInfoBarCount, GetInfoBarCount) 359bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_ClickInfoBarAccept, 360bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ClickInfoBarAccept) 361bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_GetLastNavigationTime, 362bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetLastNavigationTime) 363bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WaitForNavigation, 364bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForNavigation) 365bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_SetIntPreference, SetIntPreference) 366bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_ShowingAppModalDialog, 367bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetShowingAppModalDialog) 368bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_ClickAppModalDialogButton, 369bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ClickAppModalDialogButton) 370bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_SetStringPreference, SetStringPreference) 371bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_GetBooleanPreference, 372bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetBooleanPreference) 373bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_SetBooleanPreference, 374bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SetBooleanPreference) 375bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY( 376bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_WaitForBrowserWindowCountToBecome, 377bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForBrowserWindowCountToBecome) 378bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY( 379bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_WaitForAppModalDialogToBeShown, 380bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForAppModalDialogToBeShown) 381bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY( 382bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_GoBackBlockUntilNavigationsComplete, 383bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GoBackBlockUntilNavigationsComplete) 384bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY( 385bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_GoForwardBlockUntilNavigationsComplete, 386bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GoForwardBlockUntilNavigationsComplete) 387bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_SavePackageShouldPromptUser, 388bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SavePackageShouldPromptUser) 389bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_WindowTitle, GetWindowTitle) 390bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_SetShelfVisibility, SetShelfVisibility) 391bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_BlockedPopupCount, GetBlockedPopupCount) 392bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_SendJSONRequest, 393bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SendJSONRequest) 394bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WaitForTabCountToBecome, 395bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForTabCountToBecome) 396bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WaitForInfoBarCount, 397bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WaitForInfoBarCount) 398bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_GetPageCurrentEncoding, 399bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetPageCurrentEncoding) 400bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_ShutdownSessionService, 401bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ShutdownSessionService) 402bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_SetContentSetting, SetContentSetting) 403513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch IPC_MESSAGE_HANDLER(AutomationMsg_LoadBlockedPlugins, LoadBlockedPlugins) 404bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_ResetToDefaultTheme, ResetToDefaultTheme) 40572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC_MESSAGE_HANDLER_DELAY_REPLY( 40672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen AutomationMsg_WaitForProcessLauncherThreadToGoIdle, 40772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WaitForProcessLauncherThreadToGoIdle) 408dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC_MESSAGE_HANDLER(AutomationMsg_GetParentBrowserOfTab, 409dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen GetParentBrowserOfTab) 410bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 41121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen IPC_MESSAGE_UNHANDLED( 41221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen handled = AutomationProvider::OnMessageReceived(message)) 413ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC_END_MESSAGE_MAP_EX() 414ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!deserialize_success) 415ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OnMessageDeserializationFailure(); 41621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return handled; 417bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 418bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 419bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::OnChannelError() { 420dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!reinitialize_on_channel_error_ && 421dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen browser_shutdown::GetShutdownType() == browser_shutdown::NOT_VALID) 422bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen BrowserList::CloseAllBrowsersAndExit(); 423bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationProvider::OnChannelError(); 424bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 425bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 426bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::CloseBrowser(int browser_handle, 427bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 42821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (!browser_tracker_->ContainsHandle(browser_handle)) 42921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return; 43021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 43121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen Browser* browser = browser_tracker_->GetResource(browser_handle); 43221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen new BrowserClosedNotificationObserver(browser, this, reply_message); 43321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen browser->window()->Close(); 434bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 435bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 436bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::CloseBrowserAsync(int browser_handle) { 43721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (!browser_tracker_->ContainsHandle(browser_handle)) 43821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return; 43921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 44021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen Browser* browser = browser_tracker_->GetResource(browser_handle); 44121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen browser->window()->Close(); 442bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 443bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 444bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ActivateTab(int handle, 445bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int at_index, 446bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* status) { 447bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *status = -1; 448bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle) && at_index > -1) { 449bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 450bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (at_index >= 0 && at_index < browser->tab_count()) { 451ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser->ActivateTabAt(at_index, true); 452bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *status = 0; 453bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 454bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 455bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 456bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 45721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid TestingAutomationProvider::AppendTab(int handle, 45821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const GURL& url, 459bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 460bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int append_tab_response = -1; // -1 is the error code 461bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotificationObserver* observer = NULL; 462bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 463bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 464bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 46572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen observer = new TabAppendedNotificationObserver(browser, this, 46672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen reply_message); 467201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* contents = 468731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick browser->AddSelectedTabWithURL(url, PageTransition::TYPED); 469731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (contents) { 470bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen append_tab_response = 471731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GetIndexForNavigationController(&contents->controller(), browser); 472bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 473bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 474bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 475bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (append_tab_response < 0) { 47672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Appending tab failed. Clean up and send failure response. 47772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 47872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (observer) 479bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen delete observer; 480bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 481bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_AppendTab::WriteReplyParams(reply_message, 482bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen append_tab_response); 483bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 484bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 485bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 486bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 487bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetActiveTabIndex(int handle, 488bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* active_tab_index) { 489bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *active_tab_index = -1; // -1 is the error code 490bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 491bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 492ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *active_tab_index = browser->active_index(); 493bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 494bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 495bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 496bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::CloseTab(int tab_handle, 497bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool wait_until_closed, 498bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 499bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(tab_handle)) { 500bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* controller = tab_tracker_->GetResource(tab_handle); 501bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int index; 502bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = Browser::GetBrowserForController(controller, &index); 503bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(browser); 504bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new TabClosedNotificationObserver(this, wait_until_closed, reply_message); 505bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->CloseTabContents(controller->tab_contents()); 506bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 507bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 508bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 509bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_CloseTab::WriteReplyParams(reply_message, false); 510bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 511bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 512bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 513bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetCookies(const GURL& url, int handle, 514bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* value_size, 515bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string* value) { 516ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContents *contents = tab_tracker_->ContainsHandle(handle) ? 517ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab_tracker_->GetResource(handle)->tab_contents() : NULL; 518ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen automation_util::GetCookies(url, contents, value_size, value); 519bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 520bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 521bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetCookie(const GURL& url, 522ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& value, 523bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, 524bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* response_value) { 525ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContents *contents = tab_tracker_->ContainsHandle(handle) ? 526ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab_tracker_->GetResource(handle)->tab_contents() : NULL; 527ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen automation_util::SetCookie(url, value, contents, response_value); 528bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 529bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 530bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::DeleteCookie(const GURL& url, 531bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& cookie_name, 532bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, bool* success) { 533ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContents *contents = tab_tracker_->ContainsHandle(handle) ? 534ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab_tracker_->GetResource(handle)->tab_contents() : NULL; 535ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen automation_util::DeleteCookie(url, cookie_name, contents, success); 536bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 537bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 538bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ShowCollectedCookiesDialog( 539bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, bool* success) { 540bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 541bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 542bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = 543bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab_tracker_->GetResource(handle)->tab_contents(); 544bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab_contents->delegate()->ShowCollectedCookiesDialog(tab_contents); 545bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 546bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 547bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 548bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 549bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::NavigateToURLBlockUntilNavigationsComplete( 550bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, const GURL& url, int number_of_navigations, 551bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 552bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 553bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(handle); 554bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 555bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Simulate what a user would do. Activate the tab and then navigate. 556bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // We could allow navigating in a background tab in future. 557bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = FindAndActivateTab(tab); 558bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 559bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) { 56072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new NavigationNotificationObserver(tab, this, reply_message, 561dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen number_of_navigations, false, false); 562bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 56321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // TODO(darin): avoid conversion to GURL. 564bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->OpenURL(url, GURL(), CURRENT_TAB, PageTransition::TYPED); 565bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 566bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 567bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 568bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 56921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AutomationMsg_NavigateToURLBlockUntilNavigationsComplete::WriteReplyParams( 570bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, AUTOMATION_MSG_NAVIGATION_ERROR); 571bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 572bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 573bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 574bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::NavigationAsync(int handle, 575bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& url, 576bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* status) { 577bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationAsyncWithDisposition(handle, url, CURRENT_TAB, status); 578bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 579bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 580bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::NavigationAsyncWithDisposition( 581bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, 582bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& url, 583bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WindowOpenDisposition disposition, 584bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* status) { 585bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *status = false; 586bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 587bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 588bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(handle); 589bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 590bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Simulate what a user would do. Activate the tab and then navigate. 591bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // We could allow navigating in a background tab in future. 592bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = FindAndActivateTab(tab); 593bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 594bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) { 595bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Don't add any listener unless a callback mechanism is desired. 596bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // TODO(vibhor): Do this if such a requirement arises in future. 597bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->OpenURL(url, GURL(), disposition, PageTransition::TYPED); 598bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *status = true; 599bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 600bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 601bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 602bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 603bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::Reload(int handle, 604bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 605bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 606bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(handle); 607bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = FindAndActivateTab(tab); 608bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser && browser->command_updater()->IsCommandEnabled(IDC_RELOAD)) { 609dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new NavigationNotificationObserver( 610dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab, this, reply_message, 1, false, false); 611bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->Reload(CURRENT_TAB); 612bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 613bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 614bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 615bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 616bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_Reload::WriteReplyParams( 617bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, AUTOMATION_MSG_NAVIGATION_ERROR); 618bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 619bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 620bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 621bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetAuth(int tab_handle, 622bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::wstring& username, 623bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::wstring& password, 624bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 625bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(tab_handle)) { 626bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(tab_handle); 627bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LoginHandlerMap::iterator iter = login_handler_map_.find(tab); 628bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 629bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (iter != login_handler_map_.end()) { 630bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If auth is needed again after this, assume login has failed. This is 631bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // not strictly correct, because a navigation can require both proxy and 632bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // server auth, but it should be OK for now. 633bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LoginHandler* handler = iter->second; 634dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new NavigationNotificationObserver( 635dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab, this, reply_message, 1, false, false); 63672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen handler->SetAuth(WideToUTF16Hack(username), WideToUTF16Hack(password)); 637bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 638bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 639bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 640bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 641bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_SetAuth::WriteReplyParams( 642bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED); 643bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 644bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 645bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 646bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::CancelAuth(int tab_handle, 647bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 648bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(tab_handle)) { 649bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(tab_handle); 650bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LoginHandlerMap::iterator iter = login_handler_map_.find(tab); 651bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 652bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (iter != login_handler_map_.end()) { 653bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If auth is needed again after this, something is screwy. 654bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LoginHandler* handler = iter->second; 655dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new NavigationNotificationObserver( 656dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab, this, reply_message, 1, false, false); 657bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen handler->CancelAuth(); 658bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 659bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 660bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 661bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 662bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_CancelAuth::WriteReplyParams( 663bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED); 664bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 665bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 666bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 667bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::NeedsAuth(int tab_handle, bool* needs_auth) { 668bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *needs_auth = false; 669bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 670bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(tab_handle)) { 671bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(tab_handle); 672bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LoginHandlerMap::iterator iter = login_handler_map_.find(tab); 673bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 674bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (iter != login_handler_map_.end()) { 675bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The LoginHandler will be in our map IFF the tab needs auth. 676bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *needs_auth = true; 677bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 678bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 679bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 680bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 681bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetRedirectsFrom(int tab_handle, 682bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& source_url, 683bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 68421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (redirect_query_) { 68521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen LOG(ERROR) << "Can only handle one redirect query at once."; 68621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else if (tab_tracker_->ContainsHandle(tab_handle)) { 687bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(tab_handle); 688bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen HistoryService* history_service = 689bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab->profile()->GetHistoryService(Profile::EXPLICIT_ACCESS); 690bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 691bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(history_service) << "Tab " << tab_handle << "'s profile " << 692bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen "has no history service"; 693bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (history_service) { 694dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DCHECK(!reply_message_); 695bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message_ = reply_message; 696bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Schedule a history query for redirects. The response will be sent 697bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // asynchronously from the callback the history system uses to notify us 698bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // that it's done: OnRedirectQueryComplete. 699bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen redirect_query_ = history_service->QueryRedirectsFrom( 700bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen source_url, &consumer_, 701bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NewCallback(this, 702bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::OnRedirectQueryComplete)); 703bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; // Response will be sent when query completes. 704bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 705bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 706bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 707bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Send failure response. 708bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<GURL> empty; 709bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_RedirectsFrom::WriteReplyParams(reply_message, false, empty); 710bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 711bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 712bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 713bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetBrowserWindowCount(int* window_count) { 714bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *window_count = static_cast<int>(BrowserList::size()); 715bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 716bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 717bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetNormalBrowserWindowCount(int* window_count) { 718bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *window_count = static_cast<int>( 719bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen BrowserList::GetBrowserCountForType(profile_, Browser::TYPE_NORMAL)); 720bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 721bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 722bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetBrowserWindow(int index, int* handle) { 723bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *handle = 0; 724ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Browser* browser = automation_util::GetBrowserAt(index); 725ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (browser) 726ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *handle = browser_tracker_->Add(browser); 727bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 728bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 729bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::FindNormalBrowserWindow(int* handle) { 730bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *handle = 0; 731bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = BrowserList::FindBrowserWithType(profile_, 732bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser::TYPE_NORMAL, 733bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen false); 734bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) 735bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *handle = browser_tracker_->Add(browser); 736bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 737bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 738bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetLastActiveBrowserWindow(int* handle) { 739bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *handle = 0; 740bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = BrowserList::GetLastActive(); 741bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) 742bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *handle = browser_tracker_->Add(browser); 743bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 744bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 745bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetActiveWindow(int* handle) { 746513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch *handle = 0; 747513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch Browser* browser = BrowserList::GetLastActive(); 748513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (browser) { 749513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch gfx::NativeWindow window = browser->window()->GetNativeHandle(); 750513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch *handle = window_tracker_->Add(window); 751513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 752bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 753bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 754bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ExecuteBrowserCommandAsync(int handle, 755bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int command, 756bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 757bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 758bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 759bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 760bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser->command_updater()->SupportsCommand(command) && 761bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->command_updater()->IsCommandEnabled(command)) { 762bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->ExecuteCommand(command); 763bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 764bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 765bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 766bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 767bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 768bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ExecuteBrowserCommand( 769bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, int command, IPC::Message* reply_message) { 770bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // List of commands which just finish synchronously and don't require 771bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // setting up an observer. 772bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static const int kSynchronousCommands[] = { 773bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IDC_HOME, 774bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IDC_SELECT_NEXT_TAB, 775bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IDC_SELECT_PREVIOUS_TAB, 776bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IDC_SHOW_BOOKMARK_MANAGER, 777bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 778bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 779bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 780bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser->command_updater()->SupportsCommand(command) && 781bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->command_updater()->IsCommandEnabled(command)) { 782bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // First check if we can handle the command without using an observer. 783bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (size_t i = 0; i < arraysize(kSynchronousCommands); i++) { 784bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (command == kSynchronousCommands[i]) { 785bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->ExecuteCommand(command); 786bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_WindowExecuteCommand::WriteReplyParams(reply_message, 787bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen true); 788bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 789bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 790bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 791bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 792bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 793bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Use an observer if we have one, otherwise fail. 794bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (ExecuteBrowserCommandObserver::CreateAndRegisterObserver( 795bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this, browser, command, reply_message)) { 796bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->ExecuteCommand(command); 797bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 798bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 799bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 800bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 801bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_WindowExecuteCommand::WriteReplyParams(reply_message, false); 802bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 803bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 804bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 805bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetBrowserLocale(string16* locale) { 806bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *locale = ASCIIToUTF16(g_browser_process->GetApplicationLocale()); 807bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 808bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 809bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::IsWindowActive(int handle, 810bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success, 811bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* is_active) { 812bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (window_tracker_->ContainsHandle(handle)) { 813bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *is_active = 814bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen platform_util::IsWindowActive(window_tracker_->GetResource(handle)); 815bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 816bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 817bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 818bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *is_active = false; 819bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 820bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 821bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 822bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::WindowSimulateClick(const IPC::Message& message, 823bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, 824bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const gfx::Point& click, 825bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int flags) { 826bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (window_tracker_->ContainsHandle(handle)) { 82721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // TODO(phajdan.jr): This is flaky. We should wait for the final click. 82821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ui_controls::SendMouseMoveNotifyWhenDone( 82921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen click.x(), click.y(), NewRunnableFunction(&SendMouseClick, flags)); 830bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 831bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 832bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 833bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::WindowSimulateMouseMove( 834bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const IPC::Message& message, 835bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, 836bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const gfx::Point& location) { 837bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (window_tracker_->ContainsHandle(handle)) 838bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ui_controls::SendMouseMove(location.x(), location.y()); 839bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 840bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 841bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::WindowSimulateKeyPress( 842bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const IPC::Message& message, 843bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, 844bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int key, 845bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int flags) { 846bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!window_tracker_->ContainsHandle(handle)) 847bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 848bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 849bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen gfx::NativeWindow window = window_tracker_->GetResource(handle); 850bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The key event is sent to whatever window is active. 85172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui_controls::SendKeyPress(window, static_cast<ui::KeyboardCode>(key), 85272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ((flags & ui::EF_CONTROL_DOWN) == 85372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::EF_CONTROL_DOWN), 85472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ((flags & ui::EF_SHIFT_DOWN) == 85572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::EF_SHIFT_DOWN), 85672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ((flags & ui::EF_ALT_DOWN) == 85772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::EF_ALT_DOWN), 85872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ((flags & ui::EF_COMMAND_DOWN) == 85972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::EF_COMMAND_DOWN)); 860bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 861bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 862dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::WebkitMouseClick(DictionaryValue* args, 863dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 864dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab_contents; 865dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string error; 866dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!GetTabFromJSONArgs(args, &tab_contents, &error)) { 867dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message).SendError(error); 868dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 869dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 870dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 871dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen WebKit::WebMouseEvent mouse_event; 872dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!args->GetInteger("x", &mouse_event.x) || 873dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen !args->GetInteger("y", &mouse_event.y)) { 874dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 875dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("(X,Y) coordinates missing or invalid"); 876dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 877dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 878dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 879dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int button; 880dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!args->GetInteger("button", &button)) { 881dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 882dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("Mouse button missing or invalid"); 883dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 884dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 885dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (button == automation::kLeftButton) { 886dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.button = WebKit::WebMouseEvent::ButtonLeft; 887dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else if (button == automation::kRightButton) { 888dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.button = WebKit::WebMouseEvent::ButtonRight; 889dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else if (button == automation::kMiddleButton) { 890dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.button = WebKit::WebMouseEvent::ButtonMiddle; 891dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else { 892dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 893dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("Invalid button press requested"); 894dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 895dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 896dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 897dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.type = WebKit::WebInputEvent::MouseDown; 898dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.clickCount = 1; 899dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 900dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents->render_view_host()->ForwardMouseEvent(mouse_event); 901dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 902dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.type = WebKit::WebInputEvent::MouseUp; 903dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new InputEventAckNotificationObserver(this, reply_message, mouse_event.type); 904dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents->render_view_host()->ForwardMouseEvent(mouse_event); 905dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 906dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 907dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::WebkitMouseMove( 908dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, IPC::Message* reply_message) { 909dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab_contents; 910dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string error; 911dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!GetTabFromJSONArgs(args, &tab_contents, &error)) { 912dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message).SendError(error); 913dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 914dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 915dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 916dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen WebKit::WebMouseEvent mouse_event; 917dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!args->GetInteger("x", &mouse_event.x) || 918dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen !args->GetInteger("y", &mouse_event.y)) { 919dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 920dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("(X,Y) coordinates missing or invalid"); 921dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 922dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 923dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 924dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.type = WebKit::WebInputEvent::MouseMove; 925dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new InputEventAckNotificationObserver(this, reply_message, mouse_event.type); 926dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents->render_view_host()->ForwardMouseEvent(mouse_event); 927dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 928dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 929dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::WebkitMouseDrag(DictionaryValue* args, 930dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 931dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab_contents; 932dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string error; 933dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!GetTabFromJSONArgs(args, &tab_contents, &error)) { 934dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message).SendError(error); 935dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 936dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 937dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 938dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen WebKit::WebMouseEvent mouse_event; 939dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int start_x, start_y, end_x, end_y; 940dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!args->GetInteger("start_x", &start_x) || 941dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen !args->GetInteger("start_y", &start_y) || 942dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen !args->GetInteger("end_x", &end_x) || 943dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen !args->GetInteger("end_y", &end_y)) { 944dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 945dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("Invalid start/end positions"); 946dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 947dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 948dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 949dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.type = WebKit::WebInputEvent::MouseMove; 950dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Step 1- Move the mouse to the start position. 951dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.x = start_x; 952dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.y = start_y; 953dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents->render_view_host()->ForwardMouseEvent(mouse_event); 954dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 955dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Step 2- Left click mouse down, the mouse button is fixed. 956dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.type = WebKit::WebInputEvent::MouseDown; 957dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.button = WebKit::WebMouseEvent::ButtonLeft; 958dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.clickCount = 1; 959dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents->render_view_host()->ForwardMouseEvent(mouse_event); 960dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 961dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Step 3 - Move the mouse to the end position. 962dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // TODO(JMikhail): See if we should simulate the by not making such 963dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // a drastic jump by placing incrmental stops along the way. 964dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.type = WebKit::WebInputEvent::MouseMove; 965dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.x = end_x; 966dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.y = end_y; 967dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.clickCount = 0; 968dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents->render_view_host()->ForwardMouseEvent(mouse_event); 969dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 970dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Step 4 - Release the left mouse button. 971dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.type = WebKit::WebInputEvent::MouseUp; 972dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen mouse_event.clickCount = 1; 973dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new InputEventAckNotificationObserver(this, reply_message, mouse_event.type); 974dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents->render_view_host()->ForwardMouseEvent(mouse_event); 975dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 976dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 977bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetTabCount(int handle, int* tab_count) { 978bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *tab_count = -1; // -1 is the error code 979bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 980bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 981bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 982bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *tab_count = browser->tab_count(); 983bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 984bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 985bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 986bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetType(int handle, int* type_as_int) { 987bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *type_as_int = -1; // -1 is the error code 988bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 989bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 990bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 991bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *type_as_int = static_cast<int>(browser->type()); 992bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 993bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 994bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 995bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetTab(int win_handle, 996bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int tab_index, 997bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* tab_handle) { 998bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *tab_handle = 0; 999bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(win_handle) && (tab_index >= 0)) { 1000bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(win_handle); 1001bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_index < browser->tab_count()) { 1002201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContents* tab_contents = browser->GetTabContentsAt(tab_index); 1003bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *tab_handle = tab_tracker_->Add(&tab_contents->controller()); 1004bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1005bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1006bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1007bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1008bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetTabProcessID(int handle, int* process_id) { 1009bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *process_id = -1; 1010bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1011bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 1012bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *process_id = 0; 1013bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = 1014bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab_tracker_->GetResource(handle)->tab_contents(); 1015bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen RenderProcessHost* rph = tab_contents->GetRenderProcessHost(); 1016bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (rph) 1017bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *process_id = base::GetProcId(rph->GetHandle()); 1018bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1019bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1020bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1021bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetTabTitle(int handle, 1022bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* title_string_size, 1023bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::wstring* title) { 1024bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *title_string_size = -1; // -1 is the error code 1025bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 1026bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(handle); 1027bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationEntry* entry = tab->GetActiveEntry(); 1028bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (entry != NULL) { 1029dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen *title = UTF16ToWideHack(entry->GetTitleForDisplay("")); 1030bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 1031bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *title = std::wstring(); 1032bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1033bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *title_string_size = static_cast<int>(title->size()); 1034bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1035bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1036bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1037bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetTabIndex(int handle, int* tabstrip_index) { 1038bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *tabstrip_index = -1; // -1 is the error code 1039bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1040bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 1041bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(handle); 1042bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = Browser::GetBrowserForController(tab, NULL); 1043bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *tabstrip_index = browser->tabstrip_model()->GetIndexOfController(tab); 1044bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1045bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1046bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1047bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetTabURL(int handle, 1048bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success, 1049bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GURL* url) { 1050bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1051bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 1052bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(handle); 1053bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Return what the user would see in the location bar. 1054bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *url = tab->GetActiveEntry()->virtual_url(); 1055bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1056bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1057bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1058bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1059bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetShelfVisibility(int handle, bool* visible) { 1060bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *visible = false; 1061bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1062bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1063bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1064bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) { 1065ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if defined(OS_CHROMEOS) 1066ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *visible = ActiveDownloadsUI::GetPopup(browser->profile()); 1067ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#else 1068bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *visible = browser->window()->IsDownloadShelfVisible(); 1069bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 1070ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 1071bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1072bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1073bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1074bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::IsFullscreen(int handle, bool* visible) { 1075bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *visible = false; 1076bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1077bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1078bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1079bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) 1080bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *visible = browser->window()->IsFullscreen(); 1081bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1082bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1083bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1084bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetFullscreenBubbleVisibility(int handle, 1085bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* visible) { 1086bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *visible = false; 1087bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1088bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1089bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1090bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) 1091bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *visible = browser->window()->IsFullscreenBubbleVisible(); 1092bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1093bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1094bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1095bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetAutocompleteEditText( 1096bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int autocomplete_edit_handle, 1097bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success, 109872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen string16* text) { 1099bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (autocomplete_edit_tracker_->ContainsHandle(autocomplete_edit_handle)) { 1101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *text = autocomplete_edit_tracker_->GetResource(autocomplete_edit_handle)-> 1102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetText(); 1103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetAutocompleteEditText( 1108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int autocomplete_edit_handle, 110972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const string16& text, 1110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 1111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (autocomplete_edit_tracker_->ContainsHandle(autocomplete_edit_handle)) { 1113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen autocomplete_edit_tracker_->GetResource(autocomplete_edit_handle)-> 1114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SetUserText(text); 1115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::AutocompleteEditGetMatches( 1120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int autocomplete_edit_handle, 1121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success, 1122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<AutocompleteMatchData>* matches) { 1123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (autocomplete_edit_tracker_->ContainsHandle(autocomplete_edit_handle)) { 1125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const AutocompleteResult& result = autocomplete_edit_tracker_-> 1126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetResource(autocomplete_edit_handle)->model()->result(); 1127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (AutocompleteResult::const_iterator i = result.begin(); 1128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen i != result.end(); ++i) 1129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen matches->push_back(AutocompleteMatchData(*i)); 1130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Waits for the autocomplete edit to receive focus 1135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::WaitForAutocompleteEditFocus( 1136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int autocomplete_edit_handle, 1137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 1138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!autocomplete_edit_tracker_->ContainsHandle(autocomplete_edit_handle)) { 1139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_WaitForAutocompleteEditFocus::WriteReplyParams( 1140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message_, false); 1141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 1142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutocompleteEditModel* model = autocomplete_edit_tracker_-> 1146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetResource(autocomplete_edit_handle)-> model(); 1147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (model->has_focus()) { 1148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_WaitForAutocompleteEditFocus::WriteReplyParams( 1149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, true); 1150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 1151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The observer deletes itself when the notification arrives. 1155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new AutocompleteEditFocusedObserver(this, model, reply_message); 1156bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetAutocompleteEditForBrowser( 1159bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int browser_handle, 1160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success, 1161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* autocomplete_edit_handle) { 1162bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1163bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *autocomplete_edit_handle = 0; 1164bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1165bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(browser_handle)) { 1166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(browser_handle); 1167bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LocationBar* loc_bar = browser->window()->GetLocationBar(); 1168bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutocompleteEditView* edit_view = loc_bar->location_entry(); 1169bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Add() returns the existing handle for the resource if any. 1170bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *autocomplete_edit_handle = autocomplete_edit_tracker_->Add(edit_view); 1171bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1173bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1174bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1175bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::AutocompleteEditIsQueryInProgress( 1176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int autocomplete_edit_handle, 1177bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success, 1178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* query_in_progress) { 1179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1180bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *query_in_progress = false; 1181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (autocomplete_edit_tracker_->ContainsHandle(autocomplete_edit_handle)) { 1182dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen *query_in_progress = !autocomplete_edit_tracker_-> 1183dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen GetResource(autocomplete_edit_handle)->model()-> 1184dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autocomplete_controller()->done(); 1185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ExecuteJavascript( 1190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, 1191bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::wstring& frame_xpath, 1192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::wstring& script, 1193bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 1194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = GetTabContentsForHandle(handle, NULL); 119521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (!tab_contents) { 1196bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_DomOperation::WriteReplyParams(reply_message, std::string()); 1197bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 119821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return; 1199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 120021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 120121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Set the routing id of this message with the controller. 120221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // This routing id needs to be remembered for the reverse 120321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // communication while sending back the response of 120421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // this javascript execution. 120572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string set_automation_id; 120621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen base::SStringPrintf(&set_automation_id, 120772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "window.domAutomationController.setAutomationId(%d);", 120821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen reply_message->routing_id()); 120921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 1210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new DomOperationMessageSender(this, reply_message, false); 121121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen tab_contents->render_view_host()->ExecuteJavascriptInWebFrame( 121272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WideToUTF16Hack(frame_xpath), UTF8ToUTF16(set_automation_id)); 121321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen tab_contents->render_view_host()->ExecuteJavascriptInWebFrame( 121472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WideToUTF16Hack(frame_xpath), WideToUTF16Hack(script)); 1215bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1216bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1217bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetConstrainedWindowCount(int handle, 1218bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* count) { 1219bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *count = -1; // -1 is the error code 1220bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 122121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen NavigationController* nav_controller = tab_tracker_->GetResource(handle); 122221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen TabContents* tab_contents = nav_controller->tab_contents(); 122321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (tab_contents) 122421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen *count = static_cast<int>(tab_contents->child_windows_.size()); 1225bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1226bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1227bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1228bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::HandleInspectElementRequest( 1229bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, int x, int y, IPC::Message* reply_message) { 1230bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = GetTabContentsForHandle(handle, NULL); 1231bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_contents) { 1232dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DCHECK(!reply_message_); 1233bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message_ = reply_message; 1234bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1235bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DevToolsManager::GetInstance()->InspectElement( 1236bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab_contents->render_view_host(), x, y); 1237bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 1238bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_InspectElement::WriteReplyParams(reply_message, -1); 1239bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 1240bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1241bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1242bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1243bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetDownloadDirectory( 1244bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, FilePath* download_directory) { 1245bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 1246bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(handle); 1247bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DownloadManager* dlm = tab->profile()->GetDownloadManager(); 1248bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *download_directory = dlm->download_prefs()->download_path(); 1249bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1250bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1251bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1252bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::OpenNewBrowserWindowOfType( 1253bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int type, bool show, IPC::Message* reply_message) { 1254bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new BrowserOpenedNotificationObserver(this, reply_message); 1255bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // We may have no current browser windows open so don't rely on 1256bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // asking an existing browser to execute the IDC_NEWWINDOW command 1257bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = new Browser(static_cast<Browser::Type>(type), profile_); 1258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser->InitBrowserWindow(); 1259bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->AddBlankTab(true); 1260bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (show) 1261bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->window()->Show(); 1262bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1263bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1264bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetWindowForBrowser(int browser_handle, 1265bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success, 1266bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* handle) { 1267bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1268bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *handle = 0; 1269bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1270bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(browser_handle)) { 1271bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(browser_handle); 1272bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen gfx::NativeWindow win = browser->window()->GetNativeHandle(); 1273bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Add() returns the existing handle for the resource if any. 1274bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *handle = window_tracker_->Add(win); 1275bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1276bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1277bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1278bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1279bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetBrowserForWindow(int window_handle, 1280bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success, 1281bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* browser_handle) { 1282bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1283bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *browser_handle = 0; 1284bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1285bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen gfx::NativeWindow window = window_tracker_->GetResource(window_handle); 1286bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!window) 1287bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1288bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1289bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen BrowserList::const_iterator iter = BrowserList::begin(); 1290bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (;iter != BrowserList::end(); ++iter) { 1291bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen gfx::NativeWindow this_window = (*iter)->window()->GetNativeHandle(); 1292bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (window == this_window) { 1293bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Add() returns the existing handle for the resource if any. 1294bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *browser_handle = browser_tracker_->Add(*iter); 1295bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1296bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1297bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1298bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1299bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1300bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1301bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ShowInterstitialPage( 1302bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int tab_handle, 1303bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& html_text, 1304bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 1305bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(tab_handle)) { 1306bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* controller = tab_tracker_->GetResource(tab_handle); 1307bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = controller->tab_contents(); 1308bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 130972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new NavigationNotificationObserver(controller, this, reply_message, 1, 1310dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen false, false); 131172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1312bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationInterstitialPage* interstitial = 1313bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new AutomationInterstitialPage(tab_contents, 1314bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GURL("about:interstitial"), 1315bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen html_text); 1316bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen interstitial->Show(); 1317bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1318bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1319bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1320bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_ShowInterstitialPage::WriteReplyParams( 1321bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, AUTOMATION_MSG_NAVIGATION_ERROR); 1322bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 1323bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1324bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1325bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::HideInterstitialPage(int tab_handle, 1326bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 1327bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1328bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = GetTabContentsForHandle(tab_handle, NULL); 1329bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_contents && tab_contents->interstitial_page()) { 1330bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab_contents->interstitial_page()->DontProceed(); 1331bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1332bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1333bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1334bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1335bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::WaitForTabToBeRestored( 1336bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int tab_handle, 1337bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 1338bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(tab_handle)) { 1339bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(tab_handle); 1340bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen restore_tracker_.reset( 1341bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new NavigationControllerRestoredObserver(this, tab, reply_message)); 134272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else { 134372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen AutomationMsg_WaitForTabToBeRestored::WriteReplyParams( 134472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen reply_message, false); 134572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Send(reply_message); 1346bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1347bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1348bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1349bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetSecurityState(int handle, 1350bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success, 1351bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SecurityStyle* security_style, 1352bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* ssl_cert_status, 1353bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* insecure_content_status) { 1354bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 1355bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(handle); 1356bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationEntry* entry = tab->GetActiveEntry(); 1357bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1358bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *security_style = entry->ssl().security_style(); 1359bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *ssl_cert_status = entry->ssl().cert_status(); 1360bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *insecure_content_status = entry->ssl().content_status(); 1361bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 1362bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1363bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *security_style = SECURITY_STYLE_UNKNOWN; 1364bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *ssl_cert_status = 0; 1365bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *insecure_content_status = 0; 1366bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1367bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1368bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1369bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetPageType( 1370bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, 1371bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success, 13724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch PageType* page_type) { 1373bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 1374bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(handle); 1375bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationEntry* entry = tab->GetActiveEntry(); 1376bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *page_type = entry->page_type(); 1377bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1378bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // In order to return the proper result when an interstitial is shown and 1379bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // no navigation entry were created for it we need to ask the TabContents. 13804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch if (*page_type == NORMAL_PAGE && 1381bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab->tab_contents()->showing_interstitial_page()) 13824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch *page_type = INTERSTITIAL_PAGE; 1383bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 1384bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 13854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch *page_type = NORMAL_PAGE; 1386bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1387bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1388bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1389bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetMetricEventDuration( 1390bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& event_name, 1391bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* duration_ms) { 1392bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *duration_ms = metric_event_duration_observer_->GetEventDurationMs( 1393bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen event_name); 1394bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1395bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1396bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ActionOnSSLBlockingPage( 1397bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, 1398bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool proceed, 1399bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 1400bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 1401bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(handle); 1402bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationEntry* entry = tab->GetActiveEntry(); 14034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch if (entry->page_type() == INTERSTITIAL_PAGE) { 1404bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = tab->tab_contents(); 1405bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen InterstitialPage* ssl_blocking_page = 1406bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen InterstitialPage::GetInterstitialPage(tab_contents); 1407bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (ssl_blocking_page) { 1408bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (proceed) { 140972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new NavigationNotificationObserver(tab, this, reply_message, 1, 1410dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen false, false); 1411bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ssl_blocking_page->Proceed(); 1412bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1413bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1414bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ssl_blocking_page->DontProceed(); 1415bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_ActionOnSSLBlockingPage::WriteReplyParams( 1416bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, AUTOMATION_MSG_NAVIGATION_SUCCESS); 1417bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 1418bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1419bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1420bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1421bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1422bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // We failed. 1423bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_ActionOnSSLBlockingPage::WriteReplyParams( 1424bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, AUTOMATION_MSG_NAVIGATION_ERROR); 1425bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 1426bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1427bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1428bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::BringBrowserToFront(int browser_handle, 1429bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 143021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen *success = false; 1431bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(browser_handle)) { 1432bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(browser_handle); 1433bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->window()->Activate(); 1434bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1435bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1436bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1437bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1438bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::IsMenuCommandEnabled(int browser_handle, 1439bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int message_num, 1440bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* menu_item_enabled) { 144121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen *menu_item_enabled = false; 1442bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(browser_handle)) { 1443bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(browser_handle); 1444bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *menu_item_enabled = 1445bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->command_updater()->IsCommandEnabled(message_num); 1446bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1447bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1448bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1449bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::PrintNow(int tab_handle, 1450bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 1451bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = NULL; 1452bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = GetTabContentsForHandle(tab_handle, &tab); 1453bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_contents) { 1454bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FindAndActivateTab(tab); 145572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 145672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NotificationObserver* observer = 145772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new DocumentPrintedNotificationObserver(this, reply_message); 145872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1459ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContentsWrapper* wrapper = 1460ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContentsWrapper::GetCurrentWrapperForContents(tab_contents); 1461ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!wrapper->print_view_manager()->PrintNow()) { 146272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Clean up the observer. It will send the reply message. 146372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delete observer; 146472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 146572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 146672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Return now to avoid sending reply message twice. 146772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return; 1468bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 146972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1470bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_PrintNow::WriteReplyParams(reply_message, false); 1471bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 1472bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1473bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1474bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SavePage(int tab_handle, 1475bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const FilePath& file_name, 1476bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const FilePath& dir_path, 1477bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int type, 1478bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 147921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SavePackage::SavePackageType save_type = 148021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen static_cast<SavePackage::SavePackageType>(type); 148121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (save_type < SavePackage::SAVE_AS_ONLY_HTML || 148221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen save_type > SavePackage::SAVE_AS_COMPLETE_HTML) { 148321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen *success = false; 148421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return; 148521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 148621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 1487bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!tab_tracker_->ContainsHandle(tab_handle)) { 1488bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1489bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1490bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1491bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1492bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* nav = tab_tracker_->GetResource(tab_handle); 1493bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = FindAndActivateTab(nav); 1494bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!browser->command_updater()->IsCommandEnabled(IDC_SAVE_PAGE)) { 1495bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1496bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1497bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1498bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1499ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContentsWrapper* wrapper = 1500ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContentsWrapper::GetCurrentWrapperForContents(nav->tab_contents()); 1501ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen wrapper->download_tab_helper()->SavePage(file_name, dir_path, save_type); 1502bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1503bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1504bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1505bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::HandleOpenFindInPageRequest( 1506bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const IPC::Message& message, int handle) { 1507bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1508bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1509bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->FindInPage(false, false); 1510bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1511bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1512bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1513bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetFindWindowVisibility(int handle, 1514bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* visible) { 1515bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *visible = false; 1516bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1517bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) { 1518bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FindBarTesting* find_bar = 1519bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->GetFindBarController()->find_bar()->GetFindBarTesting(); 1520bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen find_bar->GetFindBarWindowInfo(NULL, visible); 1521bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1522bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1523bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1524bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::HandleFindWindowLocationRequest(int handle, 1525bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* x, 1526bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* y) { 1527bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen gfx::Point position(0, 0); 1528bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool visible = false; 1529bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1530bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1531bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FindBarTesting* find_bar = 1532bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->GetFindBarController()->find_bar()->GetFindBarTesting(); 1533bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen find_bar->GetFindBarWindowInfo(&position, &visible); 1534bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1535bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1536bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *x = position.x(); 1537bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *y = position.y(); 1538bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1539bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1540bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Bookmark bar visibility is based on the pref (e.g. is it in the toolbar). 1541bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Presence in the NTP is NOT considered visible by this call. 1542bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetBookmarkBarVisibility(int handle, 1543bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* visible, 1544bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* animating) { 1545bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *visible = false; 1546bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *animating = false; 1547bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1548bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1549bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1550bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) { 1551bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if 0 // defined(TOOLKIT_VIEWS) && defined(OS_LINUX) 1552bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // TODO(jrg): Was removed in rev43789 for perf. Need to investigate. 1553bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1554bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // IsBookmarkBarVisible() line looks correct but is not 1555bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // consistent across platforms. Specifically, on Mac/Linux, it 1556bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // returns false if the bar is hidden in a pref (even if visible 1557bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // on the NTP). On ChromeOS, it returned true if on NTP 1558bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // independent of the pref. Making the code more consistent 1559bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // caused a perf bot regression on Windows (which shares views). 1560bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // See http://crbug.com/40225 1561bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *visible = browser->profile()->GetPrefs()->GetBoolean( 1562bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen prefs::kShowBookmarkBar); 1563bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#else 1564bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *visible = browser->window()->IsBookmarkBarVisible(); 1565bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 1566bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *animating = browser->window()->IsBookmarkBarAnimating(); 1567bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1568bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1569bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1570bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1571bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetBookmarksAsJSON( 1572bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, 1573bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string* bookmarks_as_json, 1574bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool *success) { 1575bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1576bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1577bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1578bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) { 1579bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!browser->profile()->GetBookmarkModel()->IsLoaded()) { 1580bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1581bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1582513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<BookmarkStorage> storage(new BookmarkStorage( 1583bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->profile(), 1584513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch browser->profile()->GetBookmarkModel())); 1585bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = storage->SerializeData(bookmarks_as_json); 1586bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1587bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1588bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1589bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1590bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::WaitForBookmarkModelToLoad( 1591bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, 1592bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 1593bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1594bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1595bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen BookmarkModel* model = browser->profile()->GetBookmarkModel(); 1596bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (model->IsLoaded()) { 1597bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_WaitForBookmarkModelToLoad::WriteReplyParams( 1598bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, true); 1599bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 1600bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 1601bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The observer will delete itself when done. 1602bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new AutomationProviderBookmarkModelObserver(this, reply_message, 1603bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen model); 1604bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1605bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1606bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1607bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1608bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::AddBookmarkGroup(int handle, 1609bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int64 parent_id, 1610bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int index, 1611bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::wstring title, 1612bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 1613bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1614bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1615bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) { 1616bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen BookmarkModel* model = browser->profile()->GetBookmarkModel(); 1617bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!model->IsLoaded()) { 1618bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1619bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1620bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1621bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const BookmarkNode* parent = model->GetNodeByID(parent_id); 1622bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(parent); 1623bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (parent) { 1624ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const BookmarkNode* child = model->AddFolder(parent, index, 1625ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WideToUTF16Hack(title)); 1626bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(child); 1627bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (child) 1628bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1629bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1630bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1631bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1632bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1633bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1634bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1635bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::AddBookmarkURL(int handle, 1636bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int64 parent_id, 1637bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int index, 1638bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::wstring title, 1639bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& url, 1640bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 1641bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1642bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1643bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) { 1644bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen BookmarkModel* model = browser->profile()->GetBookmarkModel(); 1645bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!model->IsLoaded()) { 1646bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1647bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1648bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1649bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const BookmarkNode* parent = model->GetNodeByID(parent_id); 1650bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(parent); 1651bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (parent) { 1652bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const BookmarkNode* child = model->AddURL(parent, index, 1653bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WideToUTF16Hack(title), url); 1654bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(child); 1655bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (child) 1656bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1657bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1658bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1659bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1660bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1661bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1662bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1663bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ReparentBookmark(int handle, 1664bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int64 id, 1665bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int64 new_parent_id, 1666bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int index, 1667bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 1668bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1669bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1670bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) { 1671bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen BookmarkModel* model = browser->profile()->GetBookmarkModel(); 1672bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!model->IsLoaded()) { 1673bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1674bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1675bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1676bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const BookmarkNode* node = model->GetNodeByID(id); 1677bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(node); 1678bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const BookmarkNode* new_parent = model->GetNodeByID(new_parent_id); 1679bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(new_parent); 1680bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (node && new_parent) { 1681bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen model->Move(node, new_parent, index); 1682bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1683bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1684bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1685bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1686bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1687bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1688bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1689bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetBookmarkTitle(int handle, 1690bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int64 id, 1691bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::wstring title, 1692bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 1693bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1694bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1695bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) { 1696bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen BookmarkModel* model = browser->profile()->GetBookmarkModel(); 1697bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!model->IsLoaded()) { 1698bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1699bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1700bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1701bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const BookmarkNode* node = model->GetNodeByID(id); 1702bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(node); 1703bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (node) { 1704bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen model->SetTitle(node, WideToUTF16Hack(title)); 1705bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1706bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1707bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1708bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1709bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1710bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1711bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1712bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetBookmarkURL(int handle, 1713bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int64 id, 1714bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GURL& url, 1715bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 1716bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1717bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1718bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) { 1719bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen BookmarkModel* model = browser->profile()->GetBookmarkModel(); 1720bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!model->IsLoaded()) { 1721bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1722bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1723bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1724bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const BookmarkNode* node = model->GetNodeByID(id); 1725bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(node); 1726bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (node) { 1727bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen model->SetURL(node, url); 1728bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1729bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1730bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1731bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1732bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1733bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1734bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1735bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::RemoveBookmark(int handle, 1736bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int64 id, 1737bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 1738bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1739bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1740bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) { 1741bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen BookmarkModel* model = browser->profile()->GetBookmarkModel(); 1742bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!model->IsLoaded()) { 1743bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1744bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1745bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1746bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const BookmarkNode* node = model->GetNodeByID(id); 1747bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(node); 1748bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (node) { 1749ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const BookmarkNode* parent = node->parent(); 1750bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(parent); 1751ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen model->Remove(parent, parent->GetIndexOf(node)); 1752bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1753bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1754bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1755bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1756bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1757bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1758bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 175972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid TestingAutomationProvider::GetInfoBarCount(int handle, size_t* count) { 176072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen *count = static_cast<size_t>(-1); // -1 means error. 1761bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 1762bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* nav_controller = tab_tracker_->GetResource(handle); 1763bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (nav_controller) 176472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen *count = nav_controller->tab_contents()->infobar_count(); 1765bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1766bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1767bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1768bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ClickInfoBarAccept( 1769bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, 177072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen size_t info_bar_index, 1771bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool wait_for_navigation, 1772bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 1773bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool success = false; 1774bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 1775bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* nav_controller = tab_tracker_->GetResource(handle); 1776bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (nav_controller) { 177772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (info_bar_index < nav_controller->tab_contents()->infobar_count()) { 1778bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (wait_for_navigation) { 177972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new NavigationNotificationObserver(nav_controller, this, 1780dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply_message, 1, false, false); 1781bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1782bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen InfoBarDelegate* delegate = 1783bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen nav_controller->tab_contents()->GetInfoBarDelegateAt( 1784bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen info_bar_index); 1785bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (delegate->AsConfirmInfoBarDelegate()) 1786bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen delegate->AsConfirmInfoBarDelegate()->Accept(); 1787bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen success = true; 1788bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1789bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1790bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1791bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1792bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // This "!wait_for_navigation || !success condition" logic looks suspicious. 1793bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // It will send a failure message when success is true but 1794bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // |wait_for_navigation| is false. 1795bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // TODO(phajdan.jr): investgate whether the reply param (currently 1796bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // AUTOMATION_MSG_NAVIGATION_ERROR) should depend on success. 1797bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!wait_for_navigation || !success) 1798bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_ClickInfoBarAccept::WriteReplyParams( 1799bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, AUTOMATION_MSG_NAVIGATION_ERROR); 1800bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1801bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1802bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetLastNavigationTime( 1803bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, 1804bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int64* last_navigation_time) { 1805bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen base::Time time(tab_tracker_->GetLastNavigationTime(handle)); 1806bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *last_navigation_time = time.ToInternalValue(); 1807bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1808bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1809bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::WaitForNavigation(int handle, 1810bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int64 last_navigation_time, 1811bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 1812bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* controller = tab_tracker_->GetResource(handle); 1813bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen base::Time time(tab_tracker_->GetLastNavigationTime(handle)); 1814bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1815bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (time.ToInternalValue() > last_navigation_time || !controller) { 1816bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_WaitForNavigation::WriteReplyParams(reply_message, 1817bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen controller == NULL ? AUTOMATION_MSG_NAVIGATION_ERROR : 1818bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AUTOMATION_MSG_NAVIGATION_SUCCESS); 1819bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 1820bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1821bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1822bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1823dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new NavigationNotificationObserver( 1824dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen controller, this, reply_message, 1, true, false); 1825bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1826bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1827bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetIntPreference(int handle, 1828bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& name, 1829bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int value, 1830bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 1831bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1832bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1833bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1834bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->profile()->GetPrefs()->SetInteger(name.c_str(), value); 1835bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1836bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1837bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1838bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1839bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetStringPreference(int handle, 1840bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& name, 1841bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& value, 1842bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 1843bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1844bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1845bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1846bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->profile()->GetPrefs()->SetString(name.c_str(), value); 1847bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1848bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1849bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1850bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1851bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetBooleanPreference(int handle, 1852bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& name, 1853bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success, 1854bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* value) { 1855bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1856bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *value = false; 1857bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1858bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1859bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *value = browser->profile()->GetPrefs()->GetBoolean(name.c_str()); 1860bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1861bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1862bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1863bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1864bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetBooleanPreference(int handle, 1865bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& name, 1866bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool value, 1867bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 1868bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1869bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1870bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1871bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->profile()->GetPrefs()->SetBoolean(name.c_str(), value); 1872bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1873bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1874bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1875bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1876bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetShowingAppModalDialog(bool* showing_dialog, 1877bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int* dialog_button) { 1878731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AppModalDialog* active_dialog = 187921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AppModalDialogQueue::GetInstance()->active_dialog(); 1880731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!active_dialog) { 1881731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick *showing_dialog = false; 188272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen *dialog_button = ui::MessageBoxFlags::DIALOGBUTTON_NONE; 1883731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 1884731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 1885731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NativeAppModalDialog* native_dialog = active_dialog->native_dialog(); 1886bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *showing_dialog = (native_dialog != NULL); 1887bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (*showing_dialog) 1888bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *dialog_button = native_dialog->GetAppModalDialogButtons(); 1889bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen else 189072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen *dialog_button = ui::MessageBoxFlags::DIALOGBUTTON_NONE; 1891bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1892bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1893bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ClickAppModalDialogButton(int button, 1894bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 1895bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 1896bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1897bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NativeAppModalDialog* native_dialog = 189821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AppModalDialogQueue::GetInstance()->active_dialog()->native_dialog(); 1899bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (native_dialog && 1900bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen (native_dialog->GetAppModalDialogButtons() & button) == button) { 190172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if ((button & ui::MessageBoxFlags::DIALOGBUTTON_OK) == 190272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::MessageBoxFlags::DIALOGBUTTON_OK) { 1903bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen native_dialog->AcceptAppModalDialog(); 1904bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1905bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 190672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if ((button & ui::MessageBoxFlags::DIALOGBUTTON_CANCEL) == 190772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::MessageBoxFlags::DIALOGBUTTON_CANCEL) { 1908bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(!*success) << "invalid param, OK and CANCEL specified"; 1909bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen native_dialog->CancelAppModalDialog(); 1910bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 1911bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1912bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1913bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1914bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1915bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::WaitForBrowserWindowCountToBecome( 191672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int target_count, 191772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC::Message* reply_message) { 1918bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (static_cast<int>(BrowserList::size()) == target_count) { 1919bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_WaitForBrowserWindowCountToBecome::WriteReplyParams( 1920bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, true); 1921bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 1922bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1923bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1924bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1925bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Set up an observer (it will delete itself). 1926bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new BrowserCountChangeNotificationObserver(target_count, this, reply_message); 1927bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1928bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1929bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::WaitForAppModalDialogToBeShown( 1930bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 193121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (AppModalDialogQueue::GetInstance()->HasActiveDialog()) { 1932bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_WaitForAppModalDialogToBeShown::WriteReplyParams( 1933bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, true); 1934bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 1935bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1936bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1937bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1938bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Set up an observer (it will delete itself). 1939bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new AppModalDialogShownObserver(this, reply_message); 1940bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1941bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1942bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GoBackBlockUntilNavigationsComplete( 1943bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, int number_of_navigations, IPC::Message* reply_message) { 1944bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 1945bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(handle); 1946bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = FindAndActivateTab(tab); 1947bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser && browser->command_updater()->IsCommandEnabled(IDC_BACK)) { 194872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new NavigationNotificationObserver(tab, this, reply_message, 1949dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen number_of_navigations, false, false); 1950bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->GoBack(CURRENT_TAB); 1951bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1952bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1953bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1954bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1955bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_GoBackBlockUntilNavigationsComplete::WriteReplyParams( 1956bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, AUTOMATION_MSG_NAVIGATION_ERROR); 1957bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 1958bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1959bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1960bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GoForwardBlockUntilNavigationsComplete( 1961bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, int number_of_navigations, IPC::Message* reply_message) { 1962bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 1963bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* tab = tab_tracker_->GetResource(handle); 1964bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = FindAndActivateTab(tab); 1965bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser && browser->command_updater()->IsCommandEnabled(IDC_FORWARD)) { 196672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new NavigationNotificationObserver(tab, this, reply_message, 1967dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen number_of_navigations, false, false); 1968bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->GoForward(CURRENT_TAB); 1969bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 1970bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1971bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 1972bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1973bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_GoForwardBlockUntilNavigationsComplete::WriteReplyParams( 1974bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, AUTOMATION_MSG_NAVIGATION_ERROR); 1975bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 1976bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1977bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1978bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SavePackageShouldPromptUser( 1979bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool should_prompt) { 1980bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SavePackage::SetShouldPromptUser(should_prompt); 1981bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 1982bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1983bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetShelfVisibility(int handle, bool visible) { 1984bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 1985bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 1986bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser) { 1987ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if defined(OS_CHROMEOS) 1988ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Browser* popup_browser = 1989ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ActiveDownloadsUI::GetPopup(browser->profile()); 1990ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!popup_browser && visible) 1991ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ActiveDownloadsUI::OpenPopup(browser->profile()); 1992ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (popup_browser && !visible) 1993ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen popup_browser->CloseWindow(); 1994ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#else 1995bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (visible) 1996bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->window()->GetDownloadShelf()->Show(); 1997bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen else 1998bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->window()->GetDownloadShelf()->Close(); 1999ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif 2000bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2001bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2002bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2003bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2004bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetBlockedPopupCount(int handle, int* count) { 2005bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *count = -1; // -1 is the error code 2006bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(handle)) { 2007bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* nav_controller = tab_tracker_->GetResource(handle); 2008bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = nav_controller->tab_contents(); 2009bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_contents) { 2010731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BlockedContentContainer* container = 2011731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick tab_contents->blocked_content_container(); 2012bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (container) { 2013731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick *count = static_cast<int>(container->GetBlockedContentsCount()); 2014bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 2015bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If we don't have a container, we don't have any blocked popups to 2016bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // contain! 2017bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *count = 0; 2018bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2019bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2020bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2021bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2022bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2023bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SendJSONRequest(int handle, 2024ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& json_request, 2025bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 2026bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<Value> values; 2027bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen base::JSONReader reader; 2028bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string error; 2029bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen values.reset(reader.ReadAndReturnError(json_request, true, NULL, &error)); 2030bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!error.empty()) { 2031bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendError(error); 2032bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2033bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2034bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2035bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Make sure input is a dict with a string command. 2036bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string command; 2037bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* dict_value = NULL; 2038bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (values->GetType() != Value::TYPE_DICTIONARY) { 2039bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendError("not a dict"); 2040bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2041bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2042bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Ownership remains with "values" variable. 2043bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen dict_value = static_cast<DictionaryValue*>(values.get()); 2044bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!dict_value->GetStringASCII(std::string("command"), &command)) { 2045dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 2046dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("no command key in dict or not a string command"); 2047bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2048bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2049bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2050bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Map json commands to their handlers. 2051bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::map<std::string, JsonHandler> handler_map; 2052dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["WaitForAllTabsToStopLoading"] = 2053dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::WaitForAllTabsToStopLoading; 2054dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["GetIndicesFromTab"] = 2055dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::GetIndicesFromTab; 2056dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["NavigateToURL"] = 2057dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::NavigateToURL; 2058dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["ExecuteJavascript"] = 2059dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::ExecuteJavascriptJSON; 2060dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["GoForward"] = 2061dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::GoForward; 2062dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["GoBack"] = 2063dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::GoBack; 2064dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["Reload"] = 2065dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::ReloadJSON; 2066dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["GetTabURL"] = 2067dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::GetTabURLJSON; 2068dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["GetTabTitle"] = 2069dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::GetTabTitleJSON; 2070ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["CaptureEntirePage"] = 2071ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::CaptureEntirePageJSON; 2072dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["GetCookies"] = 2073dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::GetCookiesJSON; 2074dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["DeleteCookie"] = 2075dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::DeleteCookieJSON; 2076dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["SetCookie"] = 2077dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::SetCookieJSON; 2078dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["GetTabIds"] = 2079dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::GetTabIds; 2080dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["IsTabIdValid"] = 2081dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::IsTabIdValid; 2082dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["CloseTab"] = 2083dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::CloseTabJSON; 2084dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["WebkitMouseMove"] = 2085dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::WebkitMouseMove; 2086dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["WebkitMouseClick"] = 2087dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::WebkitMouseClick; 2088dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["WebkitMouseDrag"] = 2089dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::WebkitMouseDrag; 2090dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["SendWebkitKeyEvent"] = 2091dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::SendWebkitKeyEvent; 2092ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["SendOSLevelKeyEventToTab"] = 2093ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::SendOSLevelKeyEventToTab; 2094dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler_map["ActivateTab"] = 2095dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::ActivateTabJSON; 2096ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["UpdateExtensionsNow"] = 2097ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::UpdateExtensionsNow; 2098ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["GetChromeDriverAutomationVersion"] = 2099ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::GetChromeDriverAutomationVersion; 210072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#if defined(OS_CHROMEOS) 2101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["GetLoginInfo"] = &TestingAutomationProvider::GetLoginInfo; 210272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen handler_map["LoginAsGuest"] = &TestingAutomationProvider::LoginAsGuest; 210372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen handler_map["Login"] = &TestingAutomationProvider::Login; 2104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 2105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["LockScreen"] = &TestingAutomationProvider::LockScreen; 2106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["UnlockScreen"] = &TestingAutomationProvider::UnlockScreen; 2107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["SignoutInScreenLocker"] = 2108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::SignoutInScreenLocker; 2109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 2110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["GetBatteryInfo"] = &TestingAutomationProvider::GetBatteryInfo; 2111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 2112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["GetNetworkInfo"] = &TestingAutomationProvider::GetNetworkInfo; 2113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["NetworkScan"] = &TestingAutomationProvider::NetworkScan; 2114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["GetProxySettings"] = 2115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::GetProxySettings; 2116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["SetProxySettings"] = 2117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::SetProxySettings; 2118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["ConnectToWifiNetwork"] = 2119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::ConnectToWifiNetwork; 2120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["ConnectToHiddenWifiNetwork"] = 2121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::ConnectToHiddenWifiNetwork; 2122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["DisconnectFromWifiNetwork"] = 2123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::DisconnectFromWifiNetwork; 2124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 2125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["GetUpdateInfo"] = &TestingAutomationProvider::GetUpdateInfo; 2126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["UpdateCheck"] = &TestingAutomationProvider::UpdateCheck; 2127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler_map["SetReleaseTrack"] = &TestingAutomationProvider::SetReleaseTrack; 212872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif // defined(OS_CHROMEOS) 212972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 213072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::map<std::string, BrowserJsonHandler> browser_handler_map; 213172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["DisablePlugin"] = 213272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::DisablePlugin; 213372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["EnablePlugin"] = 213472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::EnablePlugin; 213572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetPluginsInfo"] = 213672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::GetPluginsInfo; 213772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 213872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetBrowserInfo"] = 213972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::GetBrowserInfo; 214072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 214172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetNavigationInfo"] = 2142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::GetNavigationInfo; 2143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 214472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["PerformActionOnInfobar"] = 2145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::PerformActionOnInfobar; 2146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 214772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetHistoryInfo"] = 214872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::GetHistoryInfo; 214972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["AddHistoryItem"] = 215072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::AddHistoryItem; 2151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 215272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetOmniboxInfo"] = 215372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::GetOmniboxInfo; 215472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["SetOmniboxText"] = 215572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::SetOmniboxText; 215672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["OmniboxAcceptInput"] = 2157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::OmniboxAcceptInput; 215872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["OmniboxMovePopupSelection"] = 2159bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::OmniboxMovePopupSelection; 2160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 216172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetInstantInfo"] = 216272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::GetInstantInfo; 216321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 216472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["LoadSearchEngineInfo"] = 2165731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &TestingAutomationProvider::LoadSearchEngineInfo; 216672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetSearchEngineInfo"] = 2167bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::GetSearchEngineInfo; 216872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["AddOrEditSearchEngine"] = 2169731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &TestingAutomationProvider::AddOrEditSearchEngine; 217072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["PerformActionOnSearchEngine"] = 2171731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &TestingAutomationProvider::PerformActionOnSearchEngine; 2172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 217372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetPrefsInfo"] = 217472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::GetPrefsInfo; 217572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["SetPrefs"] = &TestingAutomationProvider::SetPrefs; 2176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 217772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["SetWindowDimensions"] = 2178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::SetWindowDimensions; 2179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 218072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetDownloadsInfo"] = 2181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::GetDownloadsInfo; 218272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["WaitForAllDownloadsToComplete"] = 2183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::WaitForDownloadsToComplete; 218472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["PerformActionOnDownload"] = 2185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::PerformActionOnDownload; 2186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 218772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetInitialLoadTimes"] = 2188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::GetInitialLoadTimes; 2189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 219072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["SaveTabContents"] = 219172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::SaveTabContents; 2192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 219372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["ImportSettings"] = 219472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::ImportSettings; 2195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 219672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["AddSavedPassword"] = 2197bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::AddSavedPassword; 219872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["RemoveSavedPassword"] = 2199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::RemoveSavedPassword; 220072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetSavedPasswords"] = 2201bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::GetSavedPasswords; 2202bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 220372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["ClearBrowsingData"] = 2204bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::ClearBrowsingData; 2205bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 220672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetBlockedPopupsInfo"] = 2207731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &TestingAutomationProvider::GetBlockedPopupsInfo; 220872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["UnblockAndLaunchBlockedPopup"] = 2209731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &TestingAutomationProvider::UnblockAndLaunchBlockedPopup; 2210731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 2211bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // SetTheme() implemented using InstallExtension(). 221272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetThemeInfo"] = 221372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::GetThemeInfo; 2214bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2215bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // InstallExtension() present in pyauto.py. 221672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetExtensionsInfo"] = 2217bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::GetExtensionsInfo; 221872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["UninstallExtensionById"] = 2219bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::UninstallExtensionById; 2220bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 222172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["FindInPage"] = &TestingAutomationProvider::FindInPage; 2222731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 222372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["SelectTranslateOption"] = 2224bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::SelectTranslateOption; 222572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetTranslateInfo"] = 2226bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestingAutomationProvider::GetTranslateInfo; 2227bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser_handler_map["GetAutofillProfile"] = 2229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::GetAutofillProfile; 2230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser_handler_map["FillAutofillProfile"] = 2231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::FillAutofillProfile; 2232bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 223372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetActiveNotifications"] = 2234513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch &TestingAutomationProvider::GetActiveNotifications; 223572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["CloseNotification"] = 2236513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch &TestingAutomationProvider::CloseNotification; 223772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["WaitForNotificationCount"] = 2238513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch &TestingAutomationProvider::WaitForNotificationCount; 2239513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 224072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["SignInToSync"] = 224172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen &TestingAutomationProvider::SignInToSync; 224272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetSyncInfo"] = &TestingAutomationProvider::GetSyncInfo; 224372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["AwaitSyncCycleCompletion"] = 2244513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch &TestingAutomationProvider::AwaitSyncCycleCompletion; 224572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["EnableSyncForDatatypes"] = 2246513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch &TestingAutomationProvider::EnableSyncForDatatypes; 224772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["DisableSyncForDatatypes"] = 2248513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch &TestingAutomationProvider::DisableSyncForDatatypes; 2249513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 225072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["GetNTPInfo"] = 2251201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch &TestingAutomationProvider::GetNTPInfo; 225272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["MoveNTPMostVisitedThumbnail"] = 2253201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch &TestingAutomationProvider::MoveNTPMostVisitedThumbnail; 225472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["RemoveNTPMostVisitedThumbnail"] = 2255201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch &TestingAutomationProvider::RemoveNTPMostVisitedThumbnail; 225672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["UnpinNTPMostVisitedThumbnail"] = 2257201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch &TestingAutomationProvider::UnpinNTPMostVisitedThumbnail; 225872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["RestoreAllNTPMostVisitedThumbnails"] = 2259201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch &TestingAutomationProvider::RestoreAllNTPMostVisitedThumbnails; 2260201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 226172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map["KillRendererProcess"] = 226221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen &TestingAutomationProvider::KillRendererProcess; 226321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 2264dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen browser_handler_map["GetNTPThumbnailMode"] = 2265dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::GetNTPThumbnailMode; 2266dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen browser_handler_map["SetNTPThumbnailMode"] = 2267dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::SetNTPThumbnailMode; 2268dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen browser_handler_map["GetNTPMenuMode"] = 2269dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::GetNTPMenuMode; 2270dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen browser_handler_map["SetNTPMenuMode"] = 2271dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &TestingAutomationProvider::SetNTPMenuMode; 227272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser_handler_map["LaunchApp"] = &TestingAutomationProvider::LaunchApp; 2274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser_handler_map["SetAppLaunchType"] = 2275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::SetAppLaunchType; 2276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 2277bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (handler_map.find(std::string(command)) != handler_map.end()) { 227872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen (this->*handler_map[command])(dict_value, reply_message); 227972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else if (browser_handler_map.find(std::string(command)) != 228072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map.end()) { 228172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Browser* browser = NULL; 228272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!browser_tracker_->ContainsHandle(handle) || 228372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen !(browser = browser_tracker_->GetResource(handle))) { 228472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen AutomationJSONReply(this, reply_message).SendError("No browser object."); 228572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return; 228672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 228772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen (this->*browser_handler_map[command])(browser, dict_value, reply_message); 2288bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 2289bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string error_string = "Unknown command. Options: "; 2290bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (std::map<std::string, JsonHandler>::const_iterator it = 2291bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen handler_map.begin(); it != handler_map.end(); ++it) { 2292bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen error_string += it->first + ", "; 2293bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 229472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen for (std::map<std::string, BrowserJsonHandler>::const_iterator it = 229572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser_handler_map.begin(); it != browser_handler_map.end(); ++it) { 229672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen error_string += it->first + ", "; 229772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 2298bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendError(error_string); 2299bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2300bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2301bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2302bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "SetWindowDimensions", 2303bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "x": 20, # optional 2304bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "y": 20, # optional 2305bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "width": 800, # optional 2306bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "height": 600 } # optional 2307bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetWindowDimensions( 2308bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 2309bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 2310bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 2311bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen gfx::Rect rect = browser->window()->GetRestoredBounds(); 2312bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int x, y, width, height; 2313bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (args->GetInteger("x", &x)) 2314bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen rect.set_x(x); 2315bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (args->GetInteger("y", &y)) 2316bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen rect.set_y(y); 2317bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (args->GetInteger("width", &width)) 2318bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen rect.set_width(width); 2319bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (args->GetInteger("height", &height)) 2320bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen rect.set_height(height); 2321bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->window()->SetBounds(rect); 2322bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(NULL); 2323bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2324bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2325bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenListValue* TestingAutomationProvider::GetInfobarsInfo(TabContents* tc) { 2326bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Each infobar may have different properties depending on the type. 2327bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* infobars = new ListValue; 232872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen for (size_t i = 0; i < tc->infobar_count(); ++i) { 2329bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* infobar_item = new DictionaryValue; 233072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen InfoBarDelegate* infobar = tc->GetInfoBarDelegateAt(i); 2331bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (infobar->AsConfirmInfoBarDelegate()) { 2332ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Also covers ThemeInstalledInfoBarDelegate. 2333bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar_item->SetString("type", "confirm_infobar"); 2334bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ConfirmInfoBarDelegate* confirm_infobar = 2335bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar->AsConfirmInfoBarDelegate(); 2336bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar_item->SetString("text", confirm_infobar->GetMessageText()); 2337bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar_item->SetString("link_text", confirm_infobar->GetLinkText()); 2338bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* buttons_list = new ListValue; 2339bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int buttons = confirm_infobar->GetButtons(); 234072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (buttons & ConfirmInfoBarDelegate::BUTTON_OK) { 2341bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen StringValue* button_label = new StringValue( 2342bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen confirm_infobar->GetButtonLabel( 2343bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ConfirmInfoBarDelegate::BUTTON_OK)); 2344bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen buttons_list->Append(button_label); 2345bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 234672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (buttons & ConfirmInfoBarDelegate::BUTTON_CANCEL) { 2347bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen StringValue* button_label = new StringValue( 2348bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen confirm_infobar->GetButtonLabel( 2349bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ConfirmInfoBarDelegate::BUTTON_CANCEL)); 2350bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen buttons_list->Append(button_label); 2351bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2352bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar_item->Set("buttons", buttons_list); 2353bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (infobar->AsLinkInfoBarDelegate()) { 2354bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar_item->SetString("type", "link_infobar"); 2355bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LinkInfoBarDelegate* link_infobar = infobar->AsLinkInfoBarDelegate(); 2356bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar_item->SetString("link_text", link_infobar->GetLinkText()); 2357bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (infobar->AsTranslateInfoBarDelegate()) { 2358bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar_item->SetString("type", "translate_infobar"); 2359bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TranslateInfoBarDelegate* translate_infobar = 2360bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar->AsTranslateInfoBarDelegate(); 2361bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar_item->SetString("original_lang_code", 2362bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen translate_infobar->GetOriginalLanguageCode()); 2363bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar_item->SetString("target_lang_code", 2364bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen translate_infobar->GetTargetLanguageCode()); 2365bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (infobar->AsExtensionInfoBarDelegate()) { 2366bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar_item->SetString("type", "extension_infobar"); 2367bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 2368bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar_item->SetString("type", "unknown_infobar"); 2369bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2370bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobars->Append(infobar_item); 2371bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2372bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return infobars; 2373bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2374bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2375bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "PerformActionOnInfobar", 2376bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "action": "dismiss", 2377bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "infobar_index": 0, 2378bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "tab_index": 0 } 2379bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample output: {} 2380bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::PerformActionOnInfobar( 2381bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 2382bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 2383bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 2384bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 2385bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int tab_index; 238672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int infobar_index_int; 2387bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string action; 2388bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetInteger("tab_index", &tab_index) || 238972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen !args->GetInteger("infobar_index", &infobar_index_int) || 2390bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen !args->GetString("action", &action)) { 2391bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("Invalid or missing args"); 2392bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2393bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2394bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = browser->GetTabContentsAt(tab_index); 2395bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!tab_contents) { 2396bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError(StringPrintf("No such tab at index %d", tab_index)); 2397bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2398bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2399bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen InfoBarDelegate* infobar = NULL; 240072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen size_t infobar_index = static_cast<size_t>(infobar_index_int); 240172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (infobar_index >= tab_contents->infobar_count() || 2402bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen !(infobar = tab_contents->GetInfoBarDelegateAt(infobar_index))) { 240372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen reply.SendError(StringPrintf("No such infobar at index %" PRIuS, 240472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen infobar_index)); 2405bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2406bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2407bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if ("dismiss" == action) { 2408bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen infobar->InfoBarDismissed(); 2409bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab_contents->RemoveInfoBar(infobar); 2410bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 2411bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2412bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2413bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if ("accept" == action || "cancel" == action) { 2414bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ConfirmInfoBarDelegate* confirm_infobar; 2415bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!(confirm_infobar = infobar->AsConfirmInfoBarDelegate())) { 2416bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("Not a confirm infobar"); 2417bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2418bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2419bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if ("accept" == action) { 2420bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (confirm_infobar->Accept()) 2421bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab_contents->RemoveInfoBar(infobar); 2422bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if ("cancel" == action) { 2423bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (confirm_infobar->Cancel()) 2424bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab_contents->RemoveInfoBar(infobar); 2425bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2426bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 2427bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2428bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2429bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("Invalid action"); 2430bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2431bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2432bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace { 2433bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2434bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Task to get info about BrowserChildProcessHost. Must run on IO thread to 2435bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// honor the semantics of BrowserChildProcessHost. 2436bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Used by AutomationProvider::GetBrowserInfo(). 2437bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass GetChildProcessHostInfoTask : public Task { 2438bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 2439bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetChildProcessHostInfoTask(base::WaitableEvent* event, 2440bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* child_processes) 2441bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : event_(event), 2442bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen child_processes_(child_processes) {} 2443bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2444bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void Run() { 2445731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 2446bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (BrowserChildProcessHost::Iterator iter; !iter.Done(); ++iter) { 2447bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Only add processes which are already started, 2448bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // since we need their handle. 2449bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if ((*iter)->handle() == base::kNullProcessHandle) { 2450bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen continue; 2451bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2452bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ChildProcessInfo* info = *iter; 2453bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* item = new DictionaryValue; 2454bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->SetString("name", WideToUTF16Hack(info->name())); 2455bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->SetString("type", 2456bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ChildProcessInfo::GetTypeNameInEnglish(info->type())); 2457bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->SetInteger("pid", base::GetProcId(info->handle())); 2458bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen child_processes_->Append(item); 2459bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2460bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen event_->Signal(); 2461bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2462bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2463bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 2464bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen base::WaitableEvent* const event_; // weak 2465bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* child_processes_; 2466bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2467bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(GetChildProcessHostInfoTask); 2468bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 2469bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2470bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace 2471bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2472bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "GetBrowserInfo" } 2473bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Refer to GetBrowserInfo() in chrome/test/pyautolib/pyauto.py for 2474bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// sample json output. 2475bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetBrowserInfo( 2476bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 2477bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 2478bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 24794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch base::ThreadRestrictions::ScopedAllowIO allow_io; // needed for PathService 2480bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* properties = new DictionaryValue; 2481bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen properties->SetString("ChromeVersion", chrome::kChromeVersion); 2482bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen properties->SetString("BrowserProcessExecutableName", 248321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen chrome::kBrowserProcessExecutableName); 2484bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen properties->SetString("HelperProcessExecutableName", 248521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen chrome::kHelperProcessExecutableName); 2486bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen properties->SetString("BrowserProcessExecutablePath", 248721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen chrome::kBrowserProcessExecutablePath); 2488bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen properties->SetString("HelperProcessExecutablePath", 2489bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen chrome::kHelperProcessExecutablePath); 2490bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen properties->SetString("command_line_string", 2491bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen CommandLine::ForCurrentProcess()->command_line_string()); 2492bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FilePath dumps_path; 2493bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen PathService::Get(chrome::DIR_CRASH_DUMPS, &dumps_path); 2494bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen properties->SetString("DIR_CRASH_DUMPS", dumps_path.value()); 2495bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2496bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string branding; 2497bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(GOOGLE_CHROME_BUILD) 2498bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen branding = "Google Chrome"; 2499bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#elif defined(CHROMIUM_BUILD) 2500bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen branding = "Chromium"; 2501bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#else 2502bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen branding = "Unknown Branding"; 2503bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 2504bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen properties->SetString("branding", branding); 2505bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2506bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 2507bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("properties", properties); 2508bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2509bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->SetInteger("browser_pid", base::GetCurrentProcId()); 2510bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Add info about all windows in a list of dictionaries, one dictionary 2511bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // item per window. 2512bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* windows = new ListValue; 2513bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int windex = 0; 2514bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (BrowserList::const_iterator it = BrowserList::begin(); 2515bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen it != BrowserList::end(); 2516bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ++it, ++windex) { 2517bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* browser_item = new DictionaryValue; 2518bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser = *it; 2519bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser_item->SetInteger("index", windex); 2520bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Window properties 2521bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen gfx::Rect rect = browser->window()->GetRestoredBounds(); 2522bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser_item->SetInteger("x", rect.x()); 2523bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser_item->SetInteger("y", rect.y()); 2524bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser_item->SetInteger("width", rect.width()); 2525bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser_item->SetInteger("height", rect.height()); 2526bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser_item->SetBoolean("fullscreen", 2527bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->window()->IsFullscreen()); 2528ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser_item->SetInteger("selected_tab", browser->active_index()); 2529bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser_item->SetBoolean("incognito", 2530bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->profile()->IsOffTheRecord()); 2531bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // For each window, add info about all tabs in a list of dictionaries, 2532bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // one dictionary item per tab. 2533bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* tabs = new ListValue; 2534bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (int i = 0; i < browser->tab_count(); ++i) { 2535bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tc = browser->GetTabContentsAt(i); 2536bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* tab = new DictionaryValue; 2537bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab->SetInteger("index", i); 2538bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab->SetString("url", tc->GetURL().spec()); 2539bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab->SetInteger("renderer_pid", 2540bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen base::GetProcId(tc->GetRenderProcessHost()->GetHandle())); 2541bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab->Set("infobars", GetInfobarsInfo(tc)); 2542ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab->SetBoolean("pinned", browser->IsTabPinned(i)); 2543bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tabs->Append(tab); 2544bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2545bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser_item->Set("tabs", tabs); 2546bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2547bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen windows->Append(browser_item); 2548bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2549bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("windows", windows); 2550bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2551bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->SetString("child_process_path", 2552bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ChildProcessHost::GetChildPath(true).value()); 2553bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Child processes are the processes for plugins and other workers. 2554bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Add all child processes in a list of dictionaries, one dictionary item 2555bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // per child process. 2556bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* child_processes = new ListValue; 2557bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen base::WaitableEvent event(true /* manual reset */, 2558bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen false /* not initially signaled */); 2559731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick CHECK(BrowserThread::PostTask( 2560731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::IO, FROM_HERE, 2561bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new GetChildProcessHostInfoTask(&event, child_processes))); 2562bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen event.Wait(); 2563bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("child_processes", child_processes); 2564bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2565bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Add all extension processes in a list of dictionaries, one dictionary 2566bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // item per extension process. 2567bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* extension_processes = new ListValue; 2568bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ProfileManager* profile_manager = g_browser_process->profile_manager(); 2569ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<Profile*> profiles(profile_manager->GetLoadedProfiles()); 2570ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (size_t i = 0; i < profiles.size(); ++i) { 2571bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ExtensionProcessManager* process_manager = 2572ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen profiles[i]->GetExtensionProcessManager(); 2573ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!process_manager) 2574ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen continue; 2575bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ExtensionProcessManager::const_iterator jt; 2576bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (jt = process_manager->begin(); jt != process_manager->end(); ++jt) { 2577bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ExtensionHost* ex_host = *jt; 2578bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Don't add dead extension processes. 2579bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!ex_host->IsRenderViewLive()) 2580bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen continue; 2581bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* item = new DictionaryValue; 2582bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->SetString("name", ex_host->extension()->name()); 2583bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->SetInteger( 2584bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen "pid", 2585bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen base::GetProcId(ex_host->render_process_host()->GetHandle())); 2586bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen extension_processes->Append(item); 2587bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2588bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2589bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("extension_processes", extension_processes); 2590bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(return_value.get()); 2591bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2592bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2593bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "GetNavigationInfo" } 2594bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Refer to GetNavigationInfo() in chrome/test/pyautolib/pyauto.py for 2595bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// sample json output. 2596bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetNavigationInfo( 2597bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 2598bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 2599bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 2600bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 2601bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int tab_index; 2602bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = NULL; 2603bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetInteger("tab_index", &tab_index) || 2604bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen !(tab_contents = browser->GetTabContentsAt(tab_index))) { 2605bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("tab_index missing or invalid."); 2606bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2607bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2608bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 2609bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const NavigationController& controller = tab_contents->controller(); 2610bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationEntry* nav_entry = controller.GetActiveEntry(); 2611bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(nav_entry); 2612bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2613bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Security info. 2614bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* ssl = new DictionaryValue; 2615bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::map<SecurityStyle, std::string> style_to_string; 2616bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen style_to_string[SECURITY_STYLE_UNKNOWN] = "SECURITY_STYLE_UNKNOWN"; 2617bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen style_to_string[SECURITY_STYLE_UNAUTHENTICATED] = 2618bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen "SECURITY_STYLE_UNAUTHENTICATED"; 2619bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen style_to_string[SECURITY_STYLE_AUTHENTICATION_BROKEN] = 2620bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen "SECURITY_STYLE_AUTHENTICATION_BROKEN"; 2621bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen style_to_string[SECURITY_STYLE_AUTHENTICATED] = 2622bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen "SECURITY_STYLE_AUTHENTICATED"; 2623bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2624bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationEntry::SSLStatus ssl_status = nav_entry->ssl(); 2625bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ssl->SetString("security_style", 2626bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen style_to_string[ssl_status.security_style()]); 2627bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ssl->SetBoolean("ran_insecure_content", ssl_status.ran_insecure_content()); 2628bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ssl->SetBoolean("displayed_insecure_content", 2629bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ssl_status.displayed_insecure_content()); 2630bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("ssl", ssl); 2631bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2632bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Page type. 26334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch std::map<PageType, std::string> pagetype_to_string; 26344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch pagetype_to_string[NORMAL_PAGE] = "NORMAL_PAGE"; 26354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch pagetype_to_string[ERROR_PAGE] = "ERROR_PAGE"; 26364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch pagetype_to_string[INTERSTITIAL_PAGE] = "INTERSTITIAL_PAGE"; 2637bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->SetString("page_type", 2638bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pagetype_to_string[nav_entry->page_type()]); 2639bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2640bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->SetString("favicon_url", nav_entry->favicon().url().spec()); 2641bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(return_value.get()); 2642bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2643bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2644bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "GetHistoryInfo", 2645bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "search_text": "some text" } 2646bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Refer chrome/test/pyautolib/history_info.py for sample json output. 2647bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetHistoryInfo(Browser* browser, 2648bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 2649bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 2650bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen consumer_.CancelAllRequests(); 2651bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2652bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 search_text; 2653bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen args->GetString("search_text", &search_text); 2654bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2655bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Fetch history. 2656bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); 2657bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen history::QueryOptions options; 2658bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The observer owns itself. It deletes itself after it fetches history. 2659bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationProviderHistoryObserver* history_observer = 2660bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new AutomationProviderHistoryObserver(this, reply_message); 2661bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen hs->QueryHistory( 2662bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen search_text, 2663bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen options, 2664bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &consumer_, 2665bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NewCallback(history_observer, 2666bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &AutomationProviderHistoryObserver::HistoryQueryComplete)); 2667bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2668bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2669bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "AddHistoryItem", 2670bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "item": { "URL": "http://www.google.com", 2671bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "title": "Google", # optional 2672bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "time": 12345 # optional (time_t) 2673bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// } } 2674bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Refer chrome/test/pyautolib/pyauto.py for details on input. 2675bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::AddHistoryItem(Browser* browser, 2676bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 2677bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 2678bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* item = NULL; 2679bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen args->GetDictionary("item", &item); 2680bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 url_text; 2681bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 title; 2682bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen base::Time time = base::Time::Now(); 2683bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 2684bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2685bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!item->GetString("url", &url_text)) { 2686bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("bad args (no URL in dict?)"); 2687bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2688bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2689bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GURL gurl(url_text); 2690bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->GetString("title", &title); // Don't care if it fails. 2691bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int it; 2692bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen double dt; 2693bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (item->GetInteger("time", &it)) 2694bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen time = base::Time::FromTimeT(it); 269572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen else if (item->GetDouble("time", &dt)) 2696bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen time = base::Time::FromDoubleT(dt); 2697bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2698bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Ideas for "dummy" values (e.g. id_scope) came from 2699bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // chrome/browser/autocomplete/history_contents_provider_unittest.cc 2700bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); 2701bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const void* id_scope = reinterpret_cast<void*>(1); 2702bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen hs->AddPage(gurl, time, 2703bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen id_scope, 2704bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 0, 2705bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GURL(), 2706bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen PageTransition::LINK, 2707bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen history::RedirectList(), 2708bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen history::SOURCE_BROWSED, 2709bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen false); 2710bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (title.length()) 2711bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen hs->SetPageTitle(gurl, title); 2712bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 2713bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2714bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2715bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "GetDownloadsInfo" } 2716bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Refer chrome/test/pyautolib/download_info.py for sample json output. 2717bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetDownloadsInfo(Browser* browser, 2718bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 2719bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 2720bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 2721bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 2722bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* list_of_downloads = new ListValue; 2723ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 2724ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (browser->profile()->HasCreatedDownloadManager()) { 2725ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<DownloadItem*> downloads; 2726ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser->profile()->GetDownloadManager()-> 2727ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetAllDownloads(FilePath(), &downloads); 2728ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 2729ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (std::vector<DownloadItem*>::iterator it = downloads.begin(); 2730ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen it != downloads.end(); 2731ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen it++) { // Fill info about each download item. 2732ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen list_of_downloads->Append(GetDictionaryFromDownloadItem(*it)); 2733ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 2734bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2735bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("downloads", list_of_downloads); 2736bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(return_value.get()); 2737bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2738bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2739bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::WaitForDownloadsToComplete( 2740bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 2741bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 2742bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 2743bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2744bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Look for a quick return. 274572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!browser->profile()->HasCreatedDownloadManager()) { 274621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // No download manager. 274721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(NULL); 2748bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2749bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2750bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<DownloadItem*> downloads; 275172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser->profile()->GetDownloadManager()-> 275272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen GetCurrentDownloads(FilePath(), &downloads); 2753bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (downloads.empty()) { 275421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(NULL); 2755bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2756bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2757bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The observer owns itself. When the last observed item pings, it 2758bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // deletes itself. 2759bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationProviderDownloadItemObserver* item_observer = 2760bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new AutomationProviderDownloadItemObserver( 2761bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this, reply_message, downloads.size()); 2762bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (std::vector<DownloadItem*>::iterator i = downloads.begin(); 2763bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen i != downloads.end(); 2764bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen i++) { 2765bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen (*i)->AddObserver(item_observer); 2766bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2767bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2768bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2769bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace { 2770bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2771bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenDownloadItem* GetDownloadItemFromId(int id, DownloadManager* download_manager) { 2772bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<DownloadItem*> downloads; 2773bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen download_manager->GetAllDownloads(FilePath(), &downloads); 2774bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DownloadItem* selected_item = NULL; 2775bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2776bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (std::vector<DownloadItem*>::iterator it = downloads.begin(); 2777bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen it != downloads.end(); 2778bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen it++) { 2779bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DownloadItem* curr_item = *it; 2780bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (curr_item->id() == id) { 2781bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_item = curr_item; 2782bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen break; 2783bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2784bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2785bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return selected_item; 2786bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2787bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 278872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} // namespace 2789bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2790bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// See PerformActionOnDownload() in chrome/test/pyautolib/pyauto.py for sample 2791bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// json input and output. 2792bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::PerformActionOnDownload( 2793bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 2794bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 2795bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 2796bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int id; 2797bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string action; 2798bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 279972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!browser->profile()->HasCreatedDownloadManager()) { 2800bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendError("No download manager."); 2801bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2802bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2803bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetInteger("id", &id) || !args->GetString("action", &action)) { 2804dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 2805dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("Must include int id and string action."); 2806bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2807bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2808bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 280972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DownloadManager* download_manager = browser->profile()->GetDownloadManager(); 2810bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DownloadItem* selected_item = GetDownloadItemFromId(id, download_manager); 2811bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!selected_item) { 2812dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 2813dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError(StringPrintf("No download with an id of %d\n", id)); 2814bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 2815bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2816bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2817bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (action == "open") { 2818bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_item->AddObserver( 2819bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new AutomationProviderDownloadUpdatedObserver( 2820bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this, reply_message, true)); 2821bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_item->OpenDownload(); 2822bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (action == "toggle_open_files_like_this") { 2823bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_item->OpenFilesBasedOnExtension( 2824bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen !selected_item->ShouldOpenFileBasedOnExtension()); 2825bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(NULL); 2826bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (action == "remove") { 2827bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen download_manager->AddObserver( 2828bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new AutomationProviderDownloadModelChangedObserver( 2829bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this, reply_message, download_manager)); 2830ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen selected_item->Remove(); 2831bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (action == "decline_dangerous_download") { 2832bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen download_manager->AddObserver( 2833bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new AutomationProviderDownloadModelChangedObserver( 2834bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this, reply_message, download_manager)); 2835ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen selected_item->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); 2836bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (action == "save_dangerous_download") { 2837bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_item->AddObserver(new AutomationProviderDownloadUpdatedObserver( 2838bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this, reply_message, false)); 2839bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_item->DangerousDownloadValidated(); 2840bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (action == "toggle_pause") { 2841bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_item->AddObserver(new AutomationProviderDownloadUpdatedObserver( 2842bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this, reply_message, false)); 2843bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // This will still return if download has already completed. 2844bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_item->TogglePause(); 2845bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (action == "cancel") { 2846bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_item->AddObserver(new AutomationProviderDownloadUpdatedObserver( 2847bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this, reply_message, false)); 2848bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen selected_item->Cancel(true); 2849bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 2850dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 2851dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError(StringPrintf("Invalid action '%s' given.", action.c_str())); 2852bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2853bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2854bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2855731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Sample JSON input { "command": "LoadSearchEngineInfo" } 2856731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid TestingAutomationProvider::LoadSearchEngineInfo( 2857bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 2858bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 2859bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 2860bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TemplateURLModel* url_model(profile_->GetTemplateURLModel()); 2861bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (url_model->loaded()) { 2862731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AutomationJSONReply(this, reply_message).SendSuccess(NULL); 2863731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 2864731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 2865731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick url_model->AddObserver(new AutomationProviderSearchEngineObserver( 2866731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick this, reply_message)); 2867731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick url_model->Load(); 2868731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 2869731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 2870731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Sample JSON input { "command": "GetSearchEngineInfo" } 2871731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Refer to pyauto.py for sample output. 2872731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid TestingAutomationProvider::GetSearchEngineInfo( 2873731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Browser* browser, 2874731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DictionaryValue* args, 2875731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick IPC::Message* reply_message) { 2876731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TemplateURLModel* url_model(profile_->GetTemplateURLModel()); 2877731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 2878731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ListValue* search_engines = new ListValue; 2879731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<const TemplateURL*> template_urls = url_model->GetTemplateURLs(); 2880731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick for (std::vector<const TemplateURL*>::const_iterator it = 2881731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick template_urls.begin(); it != template_urls.end(); ++it) { 2882731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DictionaryValue* search_engine = new DictionaryValue; 288372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen search_engine->SetString("short_name", UTF16ToUTF8((*it)->short_name())); 288472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen search_engine->SetString("description", UTF16ToUTF8((*it)->description())); 288572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen search_engine->SetString("keyword", UTF16ToUTF8((*it)->keyword())); 2886731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick search_engine->SetBoolean("in_default_list", (*it)->ShowInDefaultList()); 2887731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick search_engine->SetBoolean("is_default", 2888731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick (*it) == url_model->GetDefaultSearchProvider()); 2889731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick search_engine->SetBoolean("is_valid", (*it)->url()->IsValid()); 2890731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick search_engine->SetBoolean("supports_replacement", 2891731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick (*it)->url()->SupportsReplacement()); 2892731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick search_engine->SetString("url", (*it)->url()->url()); 2893731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick search_engine->SetString("host", (*it)->url()->GetHost()); 2894731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick search_engine->SetString("path", (*it)->url()->GetPath()); 2895731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick search_engine->SetString("display_url", 289672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen UTF16ToUTF8((*it)->url()->DisplayURL())); 2897731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick search_engines->Append(search_engine); 2898731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 2899731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return_value->Set("search_engines", search_engines); 2900731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AutomationJSONReply(this, reply_message).SendSuccess(return_value.get()); 2901731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 2902731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 2903731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Refer to pyauto.py for sample JSON input. 2904731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid TestingAutomationProvider::AddOrEditSearchEngine( 2905731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Browser* browser, 2906731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DictionaryValue* args, 2907731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick IPC::Message* reply_message) { 2908731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TemplateURLModel* url_model(profile_->GetTemplateURLModel()); 2909731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const TemplateURL* template_url; 2910731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick string16 new_title; 2911731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick string16 new_keyword; 2912731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string new_url; 2913731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string keyword; 2914731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!args->GetString("new_title", &new_title) || 2915731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick !args->GetString("new_keyword", &new_keyword) || 2916731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick !args->GetString("new_url", &new_url)) { 2917dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 2918dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("One or more inputs invalid"); 2919731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 2920731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 2921731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string new_ref_url = TemplateURLRef::DisplayURLToURLRef( 292272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen UTF8ToUTF16(new_url)); 2923731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick scoped_ptr<KeywordEditorController> controller( 2924731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick new KeywordEditorController(profile_)); 2925731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (args->GetString("keyword", &keyword)) { 292672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen template_url = url_model->GetTemplateURLForKeyword(UTF8ToUTF16(keyword)); 2927731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (template_url == NULL) { 2928dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 2929dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError(StringPrintf("No match for keyword: %s", keyword.c_str())); 2930731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 2931731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 2932731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick url_model->AddObserver(new AutomationProviderSearchEngineObserver( 2933731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick this, reply_message)); 2934731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick controller->ModifyTemplateURL(template_url, new_title, new_keyword, 2935731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick new_ref_url); 2936bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 2937bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen url_model->AddObserver(new AutomationProviderSearchEngineObserver( 2938731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick this, reply_message)); 2939731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick controller->AddTemplateURL(new_title, new_keyword, new_ref_url); 2940731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 2941731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 2942731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 2943731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Sample json input: { "command": "PerformActionOnSearchEngine", 2944731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// "keyword": keyword, "action": action } 2945731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid TestingAutomationProvider::PerformActionOnSearchEngine( 2946731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Browser* browser, 2947731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DictionaryValue* args, 2948731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick IPC::Message* reply_message) { 2949731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TemplateURLModel* url_model(profile_->GetTemplateURLModel()); 2950731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string keyword; 2951731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string action; 2952731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!args->GetString("keyword", &keyword) || 2953731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick !args->GetString("action", &action)) { 2954731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AutomationJSONReply(this, reply_message).SendError( 2955731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "One or more inputs invalid"); 2956731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 2957731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 2958731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const TemplateURL* template_url( 295972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen url_model->GetTemplateURLForKeyword(UTF8ToUTF16(keyword))); 2960731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (template_url == NULL) { 2961dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 2962dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError(StringPrintf("No match for keyword: %s", keyword.c_str())); 2963731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 2964731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 2965731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (action == "delete") { 2966731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick url_model->AddObserver(new AutomationProviderSearchEngineObserver( 2967731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick this, reply_message)); 2968731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick url_model->Remove(template_url); 2969731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } else if (action == "default") { 2970731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick url_model->AddObserver(new AutomationProviderSearchEngineObserver( 2971bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this, reply_message)); 2972731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick url_model->SetDefaultSearchProvider(template_url); 2973731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } else { 2974dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 2975dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError(StringPrintf("Invalid action: %s", action.c_str())); 2976bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 2977bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2978bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2979bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "GetPrefsInfo" } 2980bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Refer chrome/test/pyautolib/prefs_info.py for sample json output. 2981bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetPrefsInfo(Browser* browser, 2982bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 2983bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 298472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* items = profile_->GetPrefs()->GetPreferenceValues(); 298572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2986bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 2987bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("prefs", items); // return_value owns items. 2988bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(return_value.get()); 2989bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 2990bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2991bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "SetPrefs", "path": path, "value": value } 2992bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetPrefs(Browser* browser, 2993bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 2994bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 2995bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string path; 2996bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Value* val; 2997bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 2998bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (args->GetString("path", &path) && args->Get("value", &val)) { 2999bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen PrefService* pref_service = profile_->GetPrefs(); 3000bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const PrefService::Preference* pref = 3001bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pref_service->FindPreference(path.c_str()); 3002bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!pref) { // Not a registered pref. 3003bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("pref not registered."); 3004bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3005bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (pref->IsManaged()) { // Do not attempt to change a managed pref. 3006bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("pref is managed. cannot be changed."); 3007bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3008bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { // Set the pref. 3009bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen pref_service->Set(path.c_str(), *val); 3010bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3011bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 3012bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("no pref path or value given."); 3013bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3014bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3015bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3016bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 3017bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3018bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3019bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "GetOmniboxInfo" } 3020bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Refer chrome/test/pyautolib/omnibox_info.py for sample json output. 3021bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetOmniboxInfo(Browser* browser, 3022bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3023bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3024bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 3025bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3026bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LocationBar* loc_bar = browser->window()->GetLocationBar(); 3027bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutocompleteEditView* edit_view = loc_bar->location_entry(); 3028bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutocompleteEditModel* model = edit_view->model(); 3029bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3030bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Fill up matches. 3031bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* matches = new ListValue; 3032bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const AutocompleteResult& result = model->result(); 3033bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (AutocompleteResult::const_iterator i = result.begin(); 3034bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen i != result.end(); ++i) { 3035bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const AutocompleteMatch& match = *i; 3036bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* item = new DictionaryValue; // owned by return_value 3037bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->SetString("type", AutocompleteMatch::TypeToString(match.type)); 3038bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->SetBoolean("starred", match.starred); 3039bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->SetString("destination_url", match.destination_url.spec()); 304072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen item->SetString("contents", match.contents); 304172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen item->SetString("description", match.description); 3042bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen matches->Append(item); 3043bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3044bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("matches", matches); 3045bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3046bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Fill up other properties. 3047bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* properties = new DictionaryValue; // owned by return_value 3048bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen properties->SetBoolean("has_focus", model->has_focus()); 3049dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen properties->SetBoolean("query_in_progress", 3050dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen !model->autocomplete_controller()->done()); 305172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen properties->SetString("keyword", model->keyword()); 305272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen properties->SetString("text", edit_view->GetText()); 3053bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("properties", properties); 3054bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3055bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(return_value.get()); 3056bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3057bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3058bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "SetOmniboxText", 3059bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "text": "goog" } 3060bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetOmniboxText(Browser* browser, 3061bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3062bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3063bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 text; 3064bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 3065bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetString("text", &text)) { 3066bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("text missing"); 3067bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3068bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3069bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->FocusLocationBar(); 3070bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LocationBar* loc_bar = browser->window()->GetLocationBar(); 3071bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutocompleteEditView* edit_view = loc_bar->location_entry(); 3072bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen edit_view->model()->OnSetFocus(false); 307372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen edit_view->SetUserText(text); 3074bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 3075bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3076bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3077bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "OmniboxMovePopupSelection", 3078bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "count": 1 } 3079bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Negative count implies up, positive implies down. Count values will be 3080bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// capped by the size of the popup list. 3081bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::OmniboxMovePopupSelection( 3082bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3083bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3084bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3085bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int count; 3086bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 3087bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetInteger("count", &count)) { 3088bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("count missing"); 3089bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3090bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3091bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LocationBar* loc_bar = browser->window()->GetLocationBar(); 3092bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutocompleteEditModel* model = loc_bar->location_entry()->model(); 3093bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen model->OnUpOrDownKeyPressed(count); 3094bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 3095bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3096bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3097bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "OmniboxAcceptInput" } 3098bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::OmniboxAcceptInput( 3099bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController& controller = 3103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->GetSelectedTabContents()->controller(); 310472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new OmniboxAcceptNotificationObserver(&controller, this, reply_message); 3105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->window()->GetLocationBar()->AcceptInput(); 3106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 310821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Sample json input: { "command": "GetInstantInfo" } 310921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid TestingAutomationProvider::GetInstantInfo(Browser* browser, 311021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DictionaryValue* args, 311121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen IPC::Message* reply_message) { 311221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DictionaryValue* info = new DictionaryValue; 311321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (browser->instant()) { 311421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen InstantController* instant = browser->instant(); 311521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen info->SetBoolean("enabled", true); 311621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen info->SetBoolean("showing", instant->IsShowingInstant()); 311721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen info->SetBoolean("active", instant->is_active()); 311821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen info->SetBoolean("current", instant->IsCurrent()); 311921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (instant->GetPreviewContents() && 312021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen instant->GetPreviewContents()->tab_contents()) { 312121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen TabContents* contents = instant->GetPreviewContents()->tab_contents(); 312221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen info->SetBoolean("loading", contents->is_loading()); 312321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen info->SetString("location", contents->GetURL().spec()); 312421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen info->SetString("title", contents->GetTitle()); 312521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 312621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else { 312721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen info->SetBoolean("enabled", false); 312821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 312921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 313021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return_value->Set("instant", info); 313121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(return_value.get()); 313221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 313321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 3134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "GetInitialLoadTimes" } 3135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Refer to InitialLoadObserver::GetTimingInformation() for sample output. 3136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetInitialLoadTimes( 3137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser*, 3138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue*, 3139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<DictionaryValue> return_value( 3141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen initial_load_observer_->GetTimingInformation()); 3142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string json_return; 3144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen base::JSONWriter::Write(return_value.get(), false, &json_return); 3145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_SendJSONRequest::WriteReplyParams( 3146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message, json_return, true); 3147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 3148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "GetPluginsInfo" } 3151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Refer chrome/test/pyautolib/plugins_info.py for sample json output. 3152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetPluginsInfo( 3153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 315621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::vector<webkit::npapi::WebPluginInfo> plugins; 315721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen webkit::npapi::PluginList::Singleton()->GetPlugins(false, &plugins); 3158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* items = new ListValue; 315921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen for (std::vector<webkit::npapi::WebPluginInfo>::const_iterator it = 316021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen plugins.begin(); 3161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen it != plugins.end(); 3162bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ++it) { 3163bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* item = new DictionaryValue; 3164bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->SetString("name", it->name); 3165bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->SetString("path", it->path.value()); 3166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->SetString("version", it->version); 3167bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->SetString("desc", it->desc); 316872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen item->SetBoolean("enabled", webkit::npapi::IsPluginEnabled(*it)); 3169bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Add info about mime types. 3170bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* mime_types = new ListValue(); 317121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen for (std::vector<webkit::npapi::WebPluginMimeType>::const_iterator type_it = 3172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen it->mime_types.begin(); 3173bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen type_it != it->mime_types.end(); 3174bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ++type_it) { 3175bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* mime_type = new DictionaryValue(); 3176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mime_type->SetString("mimeType", type_it->mime_type); 3177bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mime_type->SetString("description", type_it->description); 3178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* file_extensions = new ListValue(); 3180bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (std::vector<std::string>::const_iterator ext_it = 3181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen type_it->file_extensions.begin(); 3182bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ext_it != type_it->file_extensions.end(); 3183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ++ext_it) { 3184bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen file_extensions->Append(new StringValue(*ext_it)); 3185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mime_type->Set("fileExtensions", file_extensions); 3187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mime_types->Append(mime_type); 3189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen item->Set("mimeTypes", mime_types); 3191bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen items->Append(item); 3192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3193bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 3194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("plugins", items); // return_value owns items. 3195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3196bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(return_value.get()); 3197bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3198bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: 3200bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// { "command": "EnablePlugin", 3201bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "path": "/Library/Internet Plug-Ins/Flash Player.plugin" } 3202bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::EnablePlugin(Browser* browser, 3203bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3204bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3205bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FilePath::StringType path; 3206bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 3207bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetString("path", &path)) { 3208bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("path not specified."); 3209bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 321021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else if (!webkit::npapi::PluginList::Singleton()->EnablePlugin( 321121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen FilePath(path))) { 3212bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError(StringPrintf("Could not enable plugin for path %s.", 3213bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen path.c_str())); 3214bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3215bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3216bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 3217bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3218bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3219bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: 3220bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// { "command": "DisablePlugin", 3221bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "path": "/Library/Internet Plug-Ins/Flash Player.plugin" } 3222bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::DisablePlugin(Browser* browser, 3223bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3224bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3225bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FilePath::StringType path; 3226bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 3227bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetString("path", &path)) { 3228bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("path not specified."); 3229bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 323021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else if (!webkit::npapi::PluginList::Singleton()->DisablePlugin( 323121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen FilePath(path))) { 3232bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError(StringPrintf("Could not disable plugin for path %s.", 3233bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen path.c_str())); 3234bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3235bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3236bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 3237bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3238bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3239bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: 3240bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// { "command": "SaveTabContents", 3241bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "tab_index": 0, 3242bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// "filename": <a full pathname> } 3243bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json output: 3244bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// {} 3245bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SaveTabContents( 3246bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3247bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3248bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3249bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int tab_index = 0; 3250bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FilePath::StringType filename; 3251bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FilePath::StringType parent_directory; 3252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContentsWrapper* tab_contents = NULL; 3253bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3254bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetInteger("tab_index", &tab_index) || 3255bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen !args->GetString("filename", &filename)) { 3256dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 3257dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("tab_index or filename param missing"); 3258bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3259bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 3260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab_contents = browser->GetTabContentsWrapperAt(tab_index); 3261bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!tab_contents) { 3262dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message).SendError("no tab at tab_index"); 3263bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3264bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3265bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3266bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // We're doing a SAVE_AS_ONLY_HTML so the the directory path isn't 3267bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // used. Nevertheless, SavePackage requires it be valid. Sigh. 3268bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen parent_directory = FilePath(filename).DirName().value(); 3269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!tab_contents->download_tab_helper()->SavePage( 3270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FilePath(filename), 3271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FilePath(parent_directory), 3272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SavePackage::SAVE_AS_ONLY_HTML)) { 3273bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendError( 3274bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen "Could not initiate SavePage"); 3275bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3276bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3277bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The observer will delete itself when done. 3278ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new SavePackageNotificationObserver( 3279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab_contents->download_tab_helper()->save_package(), this, reply_message); 3280bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3281bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3282bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Refer to ImportSettings() in chrome/test/pyautolib/pyauto.py for sample 3283bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// json input. 3284bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json output: "{}" 3285bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ImportSettings(Browser* browser, 3286bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3287bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3288bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Map from the json string passed over to the import item masks. 3289dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::map<std::string, importer::ImportItem> string_to_import_item; 3290bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_import_item["HISTORY"] = importer::HISTORY; 3291bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_import_item["FAVORITES"] = importer::FAVORITES; 3292bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_import_item["COOKIES"] = importer::COOKIES; 3293bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_import_item["PASSWORDS"] = importer::PASSWORDS; 3294bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_import_item["SEARCH_ENGINES"] = importer::SEARCH_ENGINES; 3295bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_import_item["HOME_PAGE"] = importer::HOME_PAGE; 3296bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_import_item["ALL"] = importer::ALL; 3297bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3298bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* import_items_list = NULL; 329921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (!args->GetString("import_from", &import_settings_data_.browser_name) || 330021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen !args->GetBoolean("first_run", &import_settings_data_.first_run) || 3301bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen !args->GetList("import_items", &import_items_list)) { 3302dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 3303dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("Incorrect type for one or more of the arguments."); 3304bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3305bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3306bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 330721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen import_settings_data_.import_items = 0; 3308bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int num_items = import_items_list->GetSize(); 3309bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (int i = 0; i < num_items; i++) { 3310bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string item; 3311bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen import_items_list->GetString(i, &item); 3312bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If the provided string is not part of the map, error out. 3313bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!ContainsKey(string_to_import_item, item)) { 3314dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 3315dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("Invalid item string found in import_items."); 3316bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3317bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 331821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen import_settings_data_.import_items |= string_to_import_item[item]; 3319bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3320bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 332121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen import_settings_data_.browser = browser; 332221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen import_settings_data_.reply_message = reply_message; 3323bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 332472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen importer_list_ = new ImporterList; 332572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen importer_list_->DetectSourceProfiles(this); 3326bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3327bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3328bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace { 3329bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3330bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Translates a dictionary password to a PasswordForm struct. 3331bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenwebkit_glue::PasswordForm GetPasswordFormFromDict( 3332bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const DictionaryValue& password_dict) { 3333bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3334bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If the time is specified, change time to the specified time. 3335bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen base::Time time = base::Time::Now(); 3336bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int it; 3337bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen double dt; 3338bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (password_dict.GetInteger("time", &it)) 3339bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen time = base::Time::FromTimeT(it); 334072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen else if (password_dict.GetDouble("time", &dt)) 3341bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen time = base::Time::FromDoubleT(dt); 3342bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3343bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string signon_realm; 3344bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 username_value; 3345bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 password_value; 3346bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 origin_url_text; 3347bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 username_element; 3348bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 password_element; 3349bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 submit_element; 3350bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 action_target_text; 3351bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool blacklist = false; 3352bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 old_password_element; 3353bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 old_password_value; 3354bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3355bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // We don't care if any of these fail - they are either optional or checked 3356bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // before this function is called. 3357bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_dict.GetString("signon_realm", &signon_realm); 3358bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_dict.GetString("username_value", &username_value); 3359bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_dict.GetString("password_value", &password_value); 3360bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_dict.GetString("origin_url", &origin_url_text); 3361bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_dict.GetString("username_element", &username_element); 3362bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_dict.GetString("password_element", &password_element); 3363bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_dict.GetString("submit_element", &submit_element); 3364bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_dict.GetString("action_target", &action_target_text); 3365bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_dict.GetBoolean("blacklist", &blacklist); 3366bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3367bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GURL origin_gurl(origin_url_text); 3368bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GURL action_target(action_target_text); 3369bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3370bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen webkit_glue::PasswordForm password_form; 3371bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_form.signon_realm = signon_realm; 3372bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_form.username_value = username_value; 3373bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_form.password_value = password_value; 3374bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_form.origin = origin_gurl; 3375bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_form.username_element = username_element; 3376bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_form.password_element = password_element; 3377bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_form.submit_element = submit_element; 3378bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_form.action = action_target; 3379bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_form.blacklisted_by_user = blacklist; 3380bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_form.date_created = time; 3381bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3382bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return password_form; 3383bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3384bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 338572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} // namespace 3386bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3387bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// See AddSavedPassword() in chrome/test/functional/pyauto.py for sample json 3388bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// input. 3389bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json output: { "password_added": true } 3390bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::AddSavedPassword( 3391bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3392bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3393bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3394bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 3395bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* password_dict = NULL; 3396bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3397bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetDictionary("password", &password_dict)) { 3398bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("Password must be a dictionary."); 3399bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3400bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3401bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3402bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The signon realm is effectively the primary key and must be included. 3403bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Check here before calling GetPasswordFormFromDict. 3404bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!password_dict->HasKey("signon_realm")) { 3405bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("Password must include signon_realm."); 3406bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3407bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3408bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen webkit_glue::PasswordForm new_password = 3409bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetPasswordFormFromDict(*password_dict); 3410bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3411bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Profile* profile = browser->profile(); 3412ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Use IMPLICIT_ACCESS since new passwords aren't added in incognito mode. 3413bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen PasswordStore* password_store = 3414bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen profile->GetPasswordStore(Profile::IMPLICIT_ACCESS); 3415bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3416bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Set the return based on whether setting the password succeeded. 3417bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 3418bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3419bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // It will be null if it's accessed in an incognito window. 3420bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (password_store != NULL) { 3421bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_store->AddLogin(new_password); 3422bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->SetBoolean("password_added", true); 3423bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 3424bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->SetBoolean("password_added", false); 3425bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3426bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3427bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(return_value.get()); 3428bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3429bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3430bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// See RemoveSavedPassword() in chrome/test/functional/pyauto.py for sample 3431bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// json input. 3432bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json output: {} 3433bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::RemoveSavedPassword( 3434bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3435bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3436bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3437bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 3438bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* password_dict = NULL; 3439bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3440bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetDictionary("password", &password_dict)) { 3441bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("Password must be a dictionary."); 3442bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3443bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3444bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3445bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The signon realm is effectively the primary key and must be included. 3446bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Check here before calling GetPasswordFormFromDict. 3447bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!password_dict->HasKey("signon_realm")) { 3448bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("Password must include signon_realm."); 3449bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3450bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3451bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen webkit_glue::PasswordForm to_remove = 3452bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetPasswordFormFromDict(*password_dict); 3453bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3454bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Profile* profile = browser->profile(); 3455ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Use EXPLICIT_ACCESS since passwords can be removed in incognito mode. 3456bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen PasswordStore* password_store = 3457bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen profile->GetPasswordStore(Profile::EXPLICIT_ACCESS); 3458bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3459bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_store->RemoveLogin(to_remove); 3460bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 3461bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3462bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3463bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "GetSavedPasswords" } 3464bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Refer to GetSavedPasswords() in chrome/test/pyautolib/pyauto.py for sample 3465bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// json output. 3466bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetSavedPasswords( 3467bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3468bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3469bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3470bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Profile* profile = browser->profile(); 3471ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Use EXPLICIT_ACCESS since saved passwords can be retrieved in 3472ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // incognito mode. 3473bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen PasswordStore* password_store = 3474bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen profile->GetPasswordStore(Profile::EXPLICIT_ACCESS); 3475bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen password_store->GetAutofillableLogins( 3476bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new AutomationProviderGetPasswordsObserver(this, reply_message)); 3477bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Observer deletes itself after returning. 3478bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3479bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3480bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Refer to ClearBrowsingData() in chrome/test/pyautolib/pyauto.py for sample 3481bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// json input. 3482bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json output: {} 3483bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ClearBrowsingData( 3484bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3485bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3486bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3487bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::map<std::string, BrowsingDataRemover::TimePeriod> string_to_time_period; 3488bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_time_period["LAST_HOUR"] = BrowsingDataRemover::LAST_HOUR; 3489bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_time_period["LAST_DAY"] = BrowsingDataRemover::LAST_DAY; 3490bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_time_period["LAST_WEEK"] = BrowsingDataRemover::LAST_WEEK; 3491bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_time_period["FOUR_WEEKS"] = BrowsingDataRemover::FOUR_WEEKS; 3492bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_time_period["EVERYTHING"] = BrowsingDataRemover::EVERYTHING; 3493bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3494bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::map<std::string, int> string_to_mask_value; 3495bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_mask_value["HISTORY"] = BrowsingDataRemover::REMOVE_HISTORY; 3496bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_mask_value["DOWNLOADS"] = BrowsingDataRemover::REMOVE_DOWNLOADS; 3497bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_mask_value["COOKIES"] = BrowsingDataRemover::REMOVE_COOKIES; 3498bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_mask_value["PASSWORDS"] = BrowsingDataRemover::REMOVE_PASSWORDS; 3499bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_mask_value["FORM_DATA"] = BrowsingDataRemover::REMOVE_FORM_DATA; 3500bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string_to_mask_value["CACHE"] = BrowsingDataRemover::REMOVE_CACHE; 3501bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3502bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string time_period; 3503bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* to_remove; 3504bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetString("time_period", &time_period) || 3505bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen !args->GetList("to_remove", &to_remove)) { 3506dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 3507dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("time_period must be a string and to_remove a list."); 3508bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3509bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3510bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3511bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int remove_mask = 0; 3512bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int num_removals = to_remove->GetSize(); 3513bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (int i = 0; i < num_removals; i++) { 3514bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string removal; 3515bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen to_remove->GetString(i, &removal); 3516bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If the provided string is not part of the map, then error out. 3517bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!ContainsKey(string_to_mask_value, removal)) { 3518dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 3519dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("Invalid browsing data string found in to_remove."); 3520bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3521bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3522bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen remove_mask |= string_to_mask_value[removal]; 3523bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3524bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3525bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!ContainsKey(string_to_time_period, time_period)) { 3526dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 3527dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("Invalid string for time_period."); 3528bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3529bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3530bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3531bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen BrowsingDataRemover* remover = new BrowsingDataRemover( 3532bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen profile(), string_to_time_period[time_period], base::Time()); 3533bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3534bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen remover->AddObserver( 3535bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new AutomationProviderBrowsingDataObserver(this, reply_message)); 3536bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen remover->Remove(remove_mask); 3537bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // BrowsingDataRemover deletes itself using DeleteTask. 3538bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The observer also deletes itself after sending the reply. 3539bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3540bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3541bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace { 3542bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3543bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Get the TabContents from a dictionary of arguments. 3544bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* GetTabContentsFromDict(const Browser* browser, 3545bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const DictionaryValue* args, 3546bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string* error_message) { 3547bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int tab_index; 3548bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetInteger("tab_index", &tab_index)) { 3549bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *error_message = "Must include tab_index."; 3550bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return NULL; 3551bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3552bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3553bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = browser->GetTabContentsAt(tab_index); 3554bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!tab_contents) { 3555bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *error_message = StringPrintf("No tab at index %d.", tab_index); 3556bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return NULL; 3557bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3558bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return tab_contents; 3559bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3560bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3561bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Get the TranslateInfoBarDelegate from TabContents. 3562bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TranslateInfoBarDelegate* GetTranslateInfoBarDelegate( 3563bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents) { 356472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen for (size_t i = 0; i < tab_contents->infobar_count(); i++) { 3565bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen InfoBarDelegate* infobar = tab_contents->GetInfoBarDelegateAt(i); 3566bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (infobar->AsTranslateInfoBarDelegate()) 3567bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return infobar->AsTranslateInfoBarDelegate(); 3568bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3569bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // No translate infobar. 3570bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return NULL; 3571bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3572bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace 3573bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3574731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid TestingAutomationProvider::FindInPage( 3575731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Browser* browser, 3576731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DictionaryValue* args, 3577731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick IPC::Message* reply_message) { 3578731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string error_message; 3579731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TabContents* tab_contents = GetTabContentsFromDict(browser, args, 3580731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &error_message); 3581731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!tab_contents) { 3582731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AutomationJSONReply(this, reply_message).SendError(error_message); 3583731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 3584731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3585731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick string16 search_string; 3586731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool forward; 3587731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool match_case; 3588731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool find_next; 3589731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!args->GetString("search_string", &search_string)) { 3590731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AutomationJSONReply(this, reply_message). 3591731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SendError("Must include search_string string."); 3592731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 3593731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3594731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!args->GetBoolean("forward", &forward)) { 3595731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AutomationJSONReply(this, reply_message). 3596731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SendError("Must include forward boolean."); 3597731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 3598731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3599731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!args->GetBoolean("match_case", &match_case)) { 3600731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AutomationJSONReply(this, reply_message). 3601731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SendError("Must include match_case boolean."); 3602731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 3603731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3604731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!args->GetBoolean("find_next", &find_next)) { 3605731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AutomationJSONReply(this, reply_message). 3606731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SendError("Must include find_next boolean."); 3607731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 3608731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3609731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SendFindRequest(tab_contents, 3610731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick true, 3611731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick search_string, 3612731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick forward, 3613731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick match_case, 3614731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick find_next, 3615731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick reply_message); 3616731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 3617731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 3618bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// See GetTranslateInfo() in chrome/test/pyautolib/pyauto.py for sample json 3619bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// input and output. 3620bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetTranslateInfo( 3621bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3622bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3623bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3624bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string error_message; 3625bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = GetTabContentsFromDict(browser, args, 3626bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &error_message); 3627bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!tab_contents) { 3628bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendError(error_message); 3629bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3630bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3631bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3632bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Get the translate bar if there is one and pass it to the observer. 3633bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The observer will check for null and populate the information accordingly. 3634bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TranslateInfoBarDelegate* translate_bar = 3635bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetTranslateInfoBarDelegate(tab_contents); 3636bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3637bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabLanguageDeterminedObserver* observer = new TabLanguageDeterminedObserver( 3638bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this, reply_message, tab_contents, translate_bar); 3639bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If the language for the page hasn't been loaded yet, then just make 3640bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // the observer, otherwise call observe directly. 3641ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TranslateTabHelper* helper = TabContentsWrapper::GetCurrentWrapperForContents( 3642ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab_contents)->translate_tab_helper(); 3643ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string language = helper->language_state().original_language(); 3644bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!language.empty()) { 3645bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen observer->Observe(NotificationType::TAB_LANGUAGE_DETERMINED, 3646bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Source<TabContents>(tab_contents), 3647bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Details<std::string>(&language)); 3648bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3649bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3650bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3651bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// See SelectTranslateOption() in chrome/test/pyautolib/pyauto.py for sample 3652bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// json input. 3653bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json output: {} 3654bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SelectTranslateOption( 3655bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3656bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3657bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3658bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string option; 3659bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string error_message; 3660bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = GetTabContentsFromDict(browser, args, 3661bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &error_message); 3662bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!tab_contents) { 3663bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendError(error_message); 3664bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3665bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3666bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3667bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TranslateInfoBarDelegate* translate_bar = 3668bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetTranslateInfoBarDelegate(tab_contents); 3669bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!translate_bar) { 3670bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message) 3671bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .SendError("There is no translate bar open."); 3672bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3673bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3674bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3675bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetString("option", &option)) { 3676bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendError("Must include option"); 3677bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3678bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3679bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3680bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (option == "translate_page") { 3681bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Make a new notification observer which will send the reply. 3682bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new PageTranslatedObserver(this, reply_message, tab_contents); 3683bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen translate_bar->Translate(); 3684bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3685bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (option == "set_target_language") { 3686bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 target_language; 3687bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetString("target_language", &target_language)) { 3688dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 3689dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("Must include target_language string."); 3690bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3691bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3692bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Get the target language index based off of the language name. 369372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen size_t target_language_index = TranslateInfoBarDelegate::kNoIndex; 369472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen for (size_t i = 0; i < translate_bar->GetLanguageCount(); i++) { 3695bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (translate_bar->GetLanguageDisplayableNameAt(i) == target_language) { 3696bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen target_language_index = i; 3697bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen break; 3698bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3699bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 370072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (target_language_index == TranslateInfoBarDelegate::kNoIndex) { 3701bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message) 3702bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .SendError("Invalid target language string."); 3703bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3704bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3705bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If the page has already been translated it will be translated again to 3706bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // the new language. The observer will wait until the page has been 3707bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // translated to reply. 3708bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (translate_bar->type() == TranslateInfoBarDelegate::AFTER_TRANSLATE) { 3709bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new PageTranslatedObserver(this, reply_message, tab_contents); 3710bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen translate_bar->SetTargetLanguage(target_language_index); 3711bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3712bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3713bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Otherwise just send the reply back immediately. 3714bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen translate_bar->SetTargetLanguage(target_language_index); 3715bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 3716bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->SetBoolean("translation_success", true); 3717bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(return_value.get()); 3718bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3719bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (option == "click_always_translate_lang_button") { 3720bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!translate_bar->ShouldShowAlwaysTranslateButton()) { 3721bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message) 3722bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen .SendError("Always translate button not showing."); 3723bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3724bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3725bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Clicking 'Always Translate' triggers a translation. The observer will 3726bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // wait until the translation is complete before sending the reply. 3727bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new PageTranslatedObserver(this, reply_message, tab_contents); 3728bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen translate_bar->AlwaysTranslatePageLanguage(); 3729bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3730bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3731bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3732bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 3733bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (option == "never_translate_language") { 3734bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (translate_bar->IsLanguageBlacklisted()) { 3735bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("The language was already blacklisted."); 3736bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3737bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3738bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen translate_bar->ToggleLanguageBlacklist(); 3739bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 3740bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (option == "never_translate_site") { 3741bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (translate_bar->IsSiteBlacklisted()) { 3742bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("The site was already blacklisted."); 3743bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3744bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3745bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen translate_bar->ToggleSiteBlacklist(); 3746bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 3747bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (option == "toggle_always_translate") { 3748bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen translate_bar->ToggleAlwaysTranslate(); 3749bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 3750bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (option == "revert_translation") { 3751bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen translate_bar->RevertTranslation(); 3752bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 3753bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (option == "click_never_translate_lang_button") { 3754bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!translate_bar->ShouldShowNeverTranslateButton()) { 3755bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("Always translate button not showing."); 3756bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3757bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3758bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen translate_bar->NeverTranslatePageLanguage(); 3759bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 3760bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else if (option == "decline_translation") { 3761bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // This is the function called when an infobar is dismissed or when the 3762bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // user clicks the 'Nope' translate button. 3763bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen translate_bar->TranslationDeclined(); 3764bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen tab_contents->RemoveInfoBar(translate_bar); 3765bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 3766bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 3767bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("Invalid string found for option."); 3768bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3769bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3770bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3771731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Sample json input: { "command": "GetBlockedPopupsInfo", 3772731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// "tab_index": 1 } 3773731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Refer GetBlockedPopupsInfo() in pyauto.py for sample output. 3774731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid TestingAutomationProvider::GetBlockedPopupsInfo( 3775731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Browser* browser, 3776731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DictionaryValue* args, 3777731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick IPC::Message* reply_message) { 3778731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AutomationJSONReply reply(this, reply_message); 3779731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string error_message; 3780731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TabContents* tab_contents = GetTabContentsFromDict( 3781731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick browser, args, &error_message); 3782731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!tab_contents) { 3783731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick reply.SendError(error_message); 3784731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 3785731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3786731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 3787731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BlockedContentContainer* popup_container = 3788731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick tab_contents->blocked_content_container(); 3789731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ListValue* blocked_popups_list = new ListValue; 3790731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (popup_container) { 3791731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<TabContents*> blocked_contents; 3792731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick popup_container->GetBlockedContents(&blocked_contents); 3793731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick for (std::vector<TabContents*>::const_iterator it = 3794731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick blocked_contents.begin(); it != blocked_contents.end(); ++it) { 3795731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DictionaryValue* item = new DictionaryValue; 3796731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick item->SetString("url", (*it)->GetURL().spec()); 3797731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick item->SetString("title", (*it)->GetTitle()); 3798731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick blocked_popups_list->Append(item); 3799731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3800731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3801731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return_value->Set("blocked_popups", blocked_popups_list); 3802731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick reply.SendSuccess(return_value.get()); 3803731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 3804731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 3805731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Refer UnblockAndLaunchBlockedPopup() in pyauto.py for sample input. 3806731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid TestingAutomationProvider::UnblockAndLaunchBlockedPopup( 3807731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Browser* browser, 3808731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DictionaryValue* args, 3809731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick IPC::Message* reply_message) { 3810731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AutomationJSONReply reply(this, reply_message); 3811731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string error_message; 3812731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TabContents* tab_contents = GetTabContentsFromDict( 3813731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick browser, args, &error_message); 3814731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!tab_contents) { 3815731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick reply.SendError(error_message); 3816731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 3817731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3818731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int popup_index; 3819731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!args->GetInteger("popup_index", &popup_index)) { 3820731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick reply.SendError("Need popup_index arg"); 3821731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 3822731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3823731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 3824731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BlockedContentContainer* content_container = 3825731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick tab_contents->blocked_content_container(); 3826731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!content_container || 3827731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick popup_index >= (int)content_container->GetBlockedContentsCount()) { 3828731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick reply.SendError(StringPrintf("No popup at index %d", popup_index)); 3829731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 3830731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3831731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<TabContents*> blocked_contents; 3832731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick content_container->GetBlockedContents(&blocked_contents); 3833731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick content_container->LaunchForContents(blocked_contents[popup_index]); 3834731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick reply.SendSuccess(NULL); 3835731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 3836731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 3837bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "GetThemeInfo" } 3838bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Refer GetThemeInfo() in chrome/test/pyautolib/pyauto.py for sample output. 3839bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetThemeInfo( 3840bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3841bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3842bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3843bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 3844ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const Extension* theme = ThemeServiceFactory::GetThemeForProfile(profile()); 3845bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (theme) { 3846bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->SetString("name", theme->name()); 3847bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("images", theme->GetThemeImages()->DeepCopy()); 3848bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("colors", theme->GetThemeColors()->DeepCopy()); 3849bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("tints", theme->GetThemeTints()->DeepCopy()); 3850bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3851bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(return_value.get()); 3852bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3853bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3854ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace { 3855ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 3856ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenListValue* GetHostPermissions(const Extension* ext) { 3857ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ListValue* permissions = new ListValue; 3858ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const URLPatternList pattern_list = 3859ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ext->GetEffectiveHostPermissions().patterns(); 3860ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (URLPatternList::const_iterator perm = pattern_list.begin(); 3861ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen perm != pattern_list.end(); ++perm) { 3862ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen permissions->Append(new StringValue(perm->GetAsString())); 3863ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 3864ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return permissions; 3865ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 3866ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 3867ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenListValue* GetAPIPermissions(const Extension* ext) { 3868ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ListValue* permissions = new ListValue; 3869ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::set<std::string> perm_list = ext->api_permissions(); 3870ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (std::set<std::string>::const_iterator perm = perm_list.begin(); 3871ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen perm != perm_list.end(); ++perm) { 3872ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen permissions->Append(new StringValue(perm->c_str())); 3873ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 3874ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return permissions; 3875ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 3876ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 3877ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace 3878ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 3879bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: { "command": "GetExtensionsInfo" } 3880bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// See GetExtensionsInfo() in chrome/test/pyautolib/pyauto.py for sample json 3881bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// output. 3882bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetExtensionsInfo( 3883bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3884bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3885bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3886bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 388721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ExtensionService* service = profile()->GetExtensionService(); 3888bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!service) { 3889bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("No extensions service."); 3890bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3891bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 3892bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* extensions_values = new ListValue; 3893bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const ExtensionList* extensions = service->extensions(); 3894bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (ExtensionList::const_iterator it = extensions->begin(); 3895bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen it != extensions->end(); ++it) { 3896bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const Extension* extension = *it; 3897bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* extension_value = new DictionaryValue; 3898bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen extension_value->SetString("id", extension->id()); 3899bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen extension_value->SetString("version", extension->VersionString()); 3900bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen extension_value->SetString("name", extension->name()); 3901bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen extension_value->SetString("public_key", extension->public_key()); 3902bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen extension_value->SetString("description", extension->description()); 3903bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen extension_value->SetString("background_url", 3904bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen extension->background_url().spec()); 3905bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen extension_value->SetString("options_url", 3906bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen extension->options_url().spec()); 3907ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_value->Set("host_permissions", GetHostPermissions(extension)); 3908ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_value->Set("api_permissions", GetAPIPermissions(extension)); 3909bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen extensions_values->Append(extension_value); 3910bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3911bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("extensions", extensions_values); 3912bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(return_value.get()); 3913bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3914bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3915bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// See UninstallExtensionById() in chrome/test/pyautolib/pyauto.py for sample 3916bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// json input. 3917bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json output: {} 3918bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::UninstallExtensionById( 3919bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3920bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3921bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3922bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string id; 3923bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!args->GetString("id", &id)) { 3924ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError( 3925ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Must include string id."); 3926bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3927bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 392821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ExtensionService* service = profile()->GetExtensionService(); 3929bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!service) { 3930ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError( 3931ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "No extensions service."); 3932bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3933bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3934ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 3935ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!service->GetExtensionById(id, true) && 3936ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !service->GetTerminatedExtension(id)) { 3937ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The extension ID does not correspond to any extension, whether crashed 3938ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // or not. 3939ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError(base::StringPrintf( 3940ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Extension does not exist: %s.", id.c_str())); 3941ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 3942ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 3943ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 3944ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Wait for a notification indicating that the extension with the given ID 3945ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // has been uninstalled. This observer will delete itself. 3946ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new ExtensionUninstallObserver(this, reply_message, id); 3947ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service->UninstallExtension(id, false, NULL); 3948bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3949bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3950bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json input: 3951ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// { "command": "GetAutofillProfile" } 3952ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Refer to GetAutofillProfile() in chrome/test/pyautolib/pyauto.py for sample 3953bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// json output. 3954ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::GetAutofillProfile( 3955bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3956bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3957bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 395872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen AutomationJSONReply reply(this, reply_message); 3959ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Get the AutofillProfiles currently in the database. 3960bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int tab_index = 0; 396172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!args->GetInteger("tab_index", &tab_index)) { 396272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen reply.SendError("Invalid or missing tab_index integer value."); 396372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return; 396472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 3965bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 396672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContents* tab_contents = browser->GetTabContentsAt(tab_index); 3967bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_contents) { 3968bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen PersonalDataManager* pdm = tab_contents->profile()->GetOriginalProfile() 3969bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ->GetPersonalDataManager(); 3970bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (pdm) { 3971ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<AutofillProfile*> autofill_profiles = pdm->profiles(); 3972bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<CreditCard*> credit_cards = pdm->credit_cards(); 3973bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3974ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ListValue* profiles = GetListFromAutofillProfiles(autofill_profiles); 3975bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* cards = GetListFromCreditCards(credit_cards); 3976bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3977bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 3978bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3979bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("profiles", profiles); 3980bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return_value->Set("credit_cards", cards); 3981bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(return_value.get()); 3982bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 3983bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("No PersonalDataManager."); 3984bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3985bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3986bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 3987bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("No tab at that index."); 3988bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 3989bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 3990bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 3991bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 3992ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Refer to FillAutofillProfile() in chrome/test/pyautolib/pyauto.py for sample 3993bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// json input. 3994bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sample json output: {} 3995ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::FillAutofillProfile( 3996bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser, 3997bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* args, 3998bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 3999bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationJSONReply reply(this, reply_message); 4000bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* profiles = NULL; 4001bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* cards = NULL; 400272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 400372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // It's ok for profiles/credit_cards elements to be missing. 4004bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen args->GetList("profiles", &profiles); 4005bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen args->GetList("credit_cards", &cards); 400672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4007bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string error_mesg; 4008bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4009ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<AutofillProfile> autofill_profiles; 4010bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<CreditCard> credit_cards; 4011ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Create an AutofillProfile for each of the dictionary profiles. 4012bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (profiles) { 4013ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_profiles = GetAutofillProfilesFromList(*profiles, &error_mesg); 4014bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4015bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Create a CreditCard for each of the dictionary values. 4016bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (cards) { 4017bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen credit_cards = GetCreditCardsFromList(*cards, &error_mesg); 4018bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4019bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!error_mesg.empty()) { 4020bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError(error_mesg); 4021bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 4022bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4023bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4024ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Save the AutofillProfiles. 4025bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int tab_index = 0; 402672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!args->GetInteger("tab_index", &tab_index)) { 402772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen reply.SendError("Invalid or missing tab_index integer"); 402872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return; 402972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 403072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4031bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = browser->GetTabContentsAt(tab_index); 4032bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4033bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_contents) { 4034bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen PersonalDataManager* pdm = tab_contents->profile() 4035bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ->GetPersonalDataManager(); 4036bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (pdm) { 4037ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (profiles) 4038ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pdm->SetProfiles(&autofill_profiles); 4039ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (cards) 4040ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen pdm->SetCreditCards(&credit_cards); 4041bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 4042bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("No PersonalDataManager."); 4043bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 4044bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4045bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 4046bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendError("No tab at that index."); 4047bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 4048bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4049bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply.SendSuccess(NULL); 4050bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 4051bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4052513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Sample json output: { "success": true } 4053513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid TestingAutomationProvider::SignInToSync(Browser* browser, 4054513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DictionaryValue* args, 4055513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch IPC::Message* reply_message) { 4056513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AutomationJSONReply reply(this, reply_message); 4057513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string username; 4058513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string password; 4059513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!args->GetString("username", &username) || 4060513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch !args->GetString("password", &password)) { 4061513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch reply.SendError("Invalid or missing args"); 4062513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 4063513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4064513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (sync_waiter_.get() == NULL) { 4065513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_waiter_.reset(new ProfileSyncServiceHarness( 4066513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch browser->profile(), username, password, 0)); 4067513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } else { 4068513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_waiter_->SetCredentials(username, password); 4069513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4070513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (sync_waiter_->SetupSync()) { 4071ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 4072513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return_value->SetBoolean("success", true); 4073ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendSuccess(return_value.get()); 4074513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } else { 4075513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch reply.SendError("Signing in to sync was unsuccessful"); 4076513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4077513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 4078513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 4079513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Sample json output: 4080513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// {u'summary': u'SYNC DISABLED'} 4081513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// 4082513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// { u'authenticated': True, 4083513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// u'last synced': u'Just now', 4084513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// u'summary': u'READY', 4085513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// u'sync url': u'clients4.google.com', 4086ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// u'updates received': 42, 4087513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// u'synced datatypes': [ u'Bookmarks', 4088513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// u'Preferences', 4089513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// u'Passwords', 4090513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// u'Autofill', 4091513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// u'Themes', 4092513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// u'Extensions', 4093513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// u'Apps']} 4094513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid TestingAutomationProvider::GetSyncInfo(Browser* browser, 4095513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DictionaryValue* args, 4096513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch IPC::Message* reply_message) { 4097513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AutomationJSONReply reply(this, reply_message); 4098513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DictionaryValue* sync_info = new DictionaryValue; 4099ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 4100513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (sync_waiter_.get() == NULL) { 4101513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_waiter_.reset( 4102513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ProfileSyncServiceHarness::CreateAndAttach(browser->profile())); 4103513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4104513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!sync_waiter_->IsSyncAlreadySetup()) { 4105513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_info->SetString("summary", "SYNC DISABLED"); 4106513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } else { 4107513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ProfileSyncService* service = sync_waiter_->service(); 4108513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ProfileSyncService::Status status = sync_waiter_->GetStatus(); 4109513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_info->SetString("summary", 4110513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ProfileSyncService::BuildSyncStatusSummaryText(status.summary)); 4111513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_info->SetString("sync url", service->sync_service_url().host()); 4112513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_info->SetBoolean("authenticated", status.authenticated); 4113513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_info->SetString("last synced", service->GetLastSyncedTimeString()); 4114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen sync_info->SetInteger("updates received", status.updates_received); 4115513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ListValue* synced_datatype_list = new ListValue; 4116513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch syncable::ModelTypeSet synced_datatypes; 4117513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch service->GetPreferredDataTypes(&synced_datatypes); 4118513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch for (syncable::ModelTypeSet::iterator it = synced_datatypes.begin(); 4119513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch it != synced_datatypes.end(); ++it) { 4120513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch synced_datatype_list->Append( 4121513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch new StringValue(syncable::ModelTypeToString(*it))); 4122513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4123513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_info->Set("synced datatypes", synced_datatype_list); 4124513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4125513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return_value->Set("sync_info", sync_info); 4126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendSuccess(return_value.get()); 4127513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 4128513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 4129513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Sample json output: { "success": true } 4130513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid TestingAutomationProvider::AwaitSyncCycleCompletion( 4131513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch Browser* browser, 4132513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DictionaryValue* args, 4133513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch IPC::Message* reply_message) { 4134513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AutomationJSONReply reply(this, reply_message); 4135513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (sync_waiter_.get() == NULL) { 4136513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_waiter_.reset( 4137513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ProfileSyncServiceHarness::CreateAndAttach(browser->profile())); 4138513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4139513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!sync_waiter_->IsSyncAlreadySetup()) { 4140513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch reply.SendError("Not signed in to sync"); 4141513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 4142513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Ensure that the profile sync service is initialized before waiting for sync 4144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // to complete. In cases where the browser is restarted with sync enabled, 4145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // the sync service may take a while to get reinitialized. 4146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!browser->profile()->GetProfileSyncService()) { 4147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError("ProfileSyncService not initialized."); 4148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4150513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_waiter_->AwaitSyncCycleCompletion("Waiting for sync cycle"); 4151513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ProfileSyncService::Status status = sync_waiter_->GetStatus(); 4152513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (status.summary == ProfileSyncService::Status::READY) { 4153513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 4154513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return_value->SetBoolean("success", true); 4155513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch reply.SendSuccess(return_value.get()); 4156513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } else { 4157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string error_msg = "Wait for sync cycle was unsuccessful. " 4158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Sync status: "; 4159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen error_msg.append( 4160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProfileSyncService::BuildSyncStatusSummaryText(status.summary)); 4161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError(error_msg); 4162513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4163513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 4164513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 4165513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Refer to EnableSyncForDatatypes() in chrome/test/pyautolib/pyauto.py for 4166513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// sample json input. Sample json output: { "success": true } 4167513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid TestingAutomationProvider::EnableSyncForDatatypes( 4168513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch Browser* browser, 4169513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DictionaryValue* args, 4170513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch IPC::Message* reply_message) { 4171513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AutomationJSONReply reply(this, reply_message); 4172513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (sync_waiter_.get() == NULL) { 4173513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_waiter_.reset( 4174513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ProfileSyncServiceHarness::CreateAndAttach(browser->profile())); 4175513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4176513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!sync_waiter_->IsSyncAlreadySetup()) { 4177513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch reply.SendError("Not signed in to sync"); 4178513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 4179513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4180513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ListValue* datatypes = NULL; 4181513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!args->GetList("datatypes", &datatypes)) { 4182513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch reply.SendError("Invalid or missing args"); 4183513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 4184513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4185513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string first_datatype; 4186513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch datatypes->GetString(0, &first_datatype); 4187513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (first_datatype == "All") { 4188513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_waiter_->EnableSyncForAllDatatypes(); 4189513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } else { 4190513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int num_datatypes = datatypes->GetSize(); 4191513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch for (int i = 0; i < num_datatypes; ++i) { 4192513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string datatype_string; 4193513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch datatypes->GetString(i, &datatype_string); 4194513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch syncable::ModelType datatype = 4195513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch syncable::ModelTypeFromString(datatype_string); 4196513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (datatype == syncable::UNSPECIFIED) { 4197513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AutomationJSONReply(this, reply_message).SendError(StringPrintf( 4198513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "Invalid datatype string: %s.", datatype_string.c_str())); 4199513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 4200513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4201513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_waiter_->EnableSyncForDatatype(datatype); 4202513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_waiter_->AwaitSyncCycleCompletion(StringPrintf( 4203513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "Enabling datatype: %s", datatype_string.c_str())); 4204513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4205513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4206513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ProfileSyncService::Status status = sync_waiter_->GetStatus(); 4207513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (status.summary == ProfileSyncService::Status::READY || 4208513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch status.summary == ProfileSyncService::Status::SYNCING) { 4209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 4210513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return_value->SetBoolean("success", true); 4211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendSuccess(return_value.get()); 4212513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } else { 4213513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch reply.SendError("Enabling sync for given datatypes was unsuccessful"); 4214513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4215513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 4216513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 4217513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Refer to DisableSyncForDatatypes() in chrome/test/pyautolib/pyauto.py for 4218513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// sample json input. Sample json output: { "success": true } 4219513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid TestingAutomationProvider::DisableSyncForDatatypes( 4220513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch Browser* browser, 4221513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DictionaryValue* args, 4222513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch IPC::Message* reply_message) { 4223513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AutomationJSONReply reply(this, reply_message); 4224513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (sync_waiter_.get() == NULL) { 4225513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_waiter_.reset( 4226513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ProfileSyncServiceHarness::CreateAndAttach(browser->profile())); 4227513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4228513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!sync_waiter_->IsSyncAlreadySetup()) { 4229513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch reply.SendError("Not signed in to sync"); 4230513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 4231513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4232513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ListValue* datatypes = NULL; 4233513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!args->GetList("datatypes", &datatypes)) { 4234513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch reply.SendError("Invalid or missing args"); 4235513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 4236513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4237513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string first_datatype; 423872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!datatypes->GetString(0, &first_datatype)) { 423972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen reply.SendError("Invalid or missing string"); 424072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return; 424172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 4242513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (first_datatype == "All") { 4243513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_waiter_->DisableSyncForAllDatatypes(); 4244513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ProfileSyncService::Status status = sync_waiter_->GetStatus(); 4245513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (status.summary != ProfileSyncService::Status::READY && 4246513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch status.summary != ProfileSyncService::Status::SYNCING) { 4247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 4248513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return_value->SetBoolean("success", true); 4249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendSuccess(return_value.get()); 4250513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } else { 4251513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch reply.SendError("Disabling all sync datatypes was unsuccessful"); 4252513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4253513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } else { 4254513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int num_datatypes = datatypes->GetSize(); 4255513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch for (int i = 0; i < num_datatypes; i++) { 4256513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string datatype_string; 4257513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch datatypes->GetString(i, &datatype_string); 4258513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch syncable::ModelType datatype = 4259513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch syncable::ModelTypeFromString(datatype_string); 4260513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (datatype == syncable::UNSPECIFIED) { 4261513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AutomationJSONReply(this, reply_message).SendError(StringPrintf( 4262513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "Invalid datatype string: %s.", datatype_string.c_str())); 4263513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 4264513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4265513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_waiter_->DisableSyncForDatatype(datatype); 4266513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch sync_waiter_->AwaitSyncCycleCompletion(StringPrintf( 4267513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "Disabling datatype: %s", datatype_string.c_str())); 4268513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4269513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ProfileSyncService::Status status = sync_waiter_->GetStatus(); 4270513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (status.summary == ProfileSyncService::Status::READY || 4271513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch status.summary == ProfileSyncService::Status::SYNCING) { 4272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 4273513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return_value->SetBoolean("success", true); 4274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendSuccess(return_value.get()); 4275513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } else { 4276513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch reply.SendError("Disabling sync for given datatypes was unsuccessful"); 4277513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4278513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4279513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 4280513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 4281bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen/* static */ 4282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenListValue* TestingAutomationProvider::GetListFromAutofillProfiles( 4283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& autofill_profiles) { 4284bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* profiles = new ListValue; 4285bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4286dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::map<AutofillFieldType, std::string> autofill_type_to_string 4287dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen = GetAutofillFieldToStringMap(); 4288bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // For each AutofillProfile, transform it to a dictionary object to return. 4290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (std::vector<AutofillProfile*>::const_iterator it = 4291513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch autofill_profiles.begin(); 4292bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen it != autofill_profiles.end(); ++it) { 4293ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile* profile = *it; 4294bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* profile_info = new DictionaryValue; 4295bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // For each of the types, if it has a value, add it to the dictionary. 4296dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (std::map<AutofillFieldType, std::string>::iterator 4297bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen type_it = autofill_type_to_string.begin(); 4298bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen type_it != autofill_type_to_string.end(); ++type_it) { 4299ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 value = profile->GetInfo(type_it->first); 4300bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (value.length()) { // If there was something stored for that value. 430172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen profile_info->SetString(type_it->second, value); 4302bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4303bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4304bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen profiles->Append(profile_info); 4305bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4306bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return profiles; 4307bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 4308bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4309bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen/* static */ 4310bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenListValue* TestingAutomationProvider::GetListFromCreditCards( 4311513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::vector<CreditCard*>& credit_cards) { 4312bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ListValue* cards = new ListValue; 4313bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4314dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::map<AutofillFieldType, std::string> credit_card_type_to_string = 4315bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetCreditCardFieldToStringMap(); 4316bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4317ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // For each AutofillProfile, transform it to a dictionary object to return. 4318513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch for (std::vector<CreditCard*>::const_iterator it = 4319513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch credit_cards.begin(); 4320bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen it != credit_cards.end(); ++it) { 4321bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen CreditCard* card = *it; 4322bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* card_info = new DictionaryValue; 4323bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // For each of the types, if it has a value, add it to the dictionary. 4324dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (std::map<AutofillFieldType, std::string>::iterator type_it = 4325bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen credit_card_type_to_string.begin(); 4326bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen type_it != credit_card_type_to_string.end(); ++type_it) { 4327ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 value = card->GetInfo(type_it->first); 4328bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // If there was something stored for that value. 4329bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (value.length()) { 433072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen card_info->SetString(type_it->second, value); 4331bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4332bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4333bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen cards->Append(card_info); 4334bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4335bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return cards; 4336bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 4337bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4338bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen/* static */ 4339ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstd::vector<AutofillProfile> 4340ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTestingAutomationProvider::GetAutofillProfilesFromList( 4341bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const ListValue& profiles, std::string* error_message) { 4342ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<AutofillProfile> autofill_profiles; 4343bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* profile_info = NULL; 4344bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 current_value; 4345bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4346dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::map<AutofillFieldType, std::string> autofill_type_to_string = 4347dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen GetAutofillFieldToStringMap(); 4348bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4349bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int num_profiles = profiles.GetSize(); 4350bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (int i = 0; i < num_profiles; i++) { 4351bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen profiles.GetDictionary(i, &profile_info); 4352ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile profile; 4353bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Loop through the possible profile types and add those provided. 4354dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (std::map<AutofillFieldType, std::string>::iterator type_it = 4355bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen autofill_type_to_string.begin(); 4356bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen type_it != autofill_type_to_string.end(); ++type_it) { 435772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (profile_info->HasKey(type_it->second)) { 435872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (profile_info->GetString(type_it->second, 4359bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ¤t_value)) { 4360ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen profile.SetInfo(type_it->first, current_value); 4361bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 4362bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *error_message= "All values must be strings"; 4363bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen break; 4364bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4365bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4366bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4367bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen autofill_profiles.push_back(profile); 4368bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4369bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return autofill_profiles; 4370bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 4371bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4372bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen/* static */ 4373bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenstd::vector<CreditCard> TestingAutomationProvider::GetCreditCardsFromList( 4374bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const ListValue& cards, std::string* error_message) { 4375bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<CreditCard> credit_cards; 4376bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DictionaryValue* card_info = NULL; 4377bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen string16 current_value; 4378bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4379dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::map<AutofillFieldType, std::string> credit_card_type_to_string = 4380bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GetCreditCardFieldToStringMap(); 4381bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4382bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int num_credit_cards = cards.GetSize(); 4383bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (int i = 0; i < num_credit_cards; i++) { 4384bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen cards.GetDictionary(i, &card_info); 4385513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard card; 4386bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Loop through the possible credit card fields and add those provided. 4387dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (std::map<AutofillFieldType, std::string>::iterator type_it = 4388bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen credit_card_type_to_string.begin(); 4389bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen type_it != credit_card_type_to_string.end(); ++type_it) { 439072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (card_info->HasKey(type_it->second)) { 439172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (card_info->GetString(type_it->second, ¤t_value)) { 4392ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen card.SetInfo(type_it->first, current_value); 4393bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 4394bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *error_message= "All values must be strings"; 4395bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen break; 4396bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4397bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4398bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4399bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen credit_cards.push_back(card); 4400bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4401bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return credit_cards; 4402bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 4403bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4404bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen/* static */ 4405dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstd::map<AutofillFieldType, std::string> 4406dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TestingAutomationProvider::GetAutofillFieldToStringMap() { 4407dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::map<AutofillFieldType, std::string> autofill_type_to_string; 4408ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Strings ordered by order of fields when adding a profile in Autofill prefs. 440972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_type_to_string[NAME_FIRST] = "NAME_FIRST"; 441072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_type_to_string[NAME_MIDDLE] = "NAME_MIDDLE"; 441172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_type_to_string[NAME_LAST] = "NAME_LAST"; 441272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_type_to_string[COMPANY_NAME] = "COMPANY_NAME"; 441372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_type_to_string[EMAIL_ADDRESS] = "EMAIL_ADDRESS"; 441472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_type_to_string[ADDRESS_HOME_LINE1] = "ADDRESS_HOME_LINE1"; 441572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_type_to_string[ADDRESS_HOME_LINE2] = "ADDRESS_HOME_LINE2"; 441672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_type_to_string[ADDRESS_HOME_CITY] = "ADDRESS_HOME_CITY"; 441772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_type_to_string[ADDRESS_HOME_STATE] = "ADDRESS_HOME_STATE"; 441872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_type_to_string[ADDRESS_HOME_ZIP] = "ADDRESS_HOME_ZIP"; 441972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_type_to_string[ADDRESS_HOME_COUNTRY] = "ADDRESS_HOME_COUNTRY"; 4420ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_type_to_string[PHONE_HOME_COUNTRY_CODE] = 4421ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "PHONE_HOME_COUNTRY_CODE"; 4422ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_type_to_string[PHONE_HOME_CITY_CODE] = "PHONE_HOME_CITY_CODE"; 4423bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen autofill_type_to_string[PHONE_HOME_WHOLE_NUMBER] = 442472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "PHONE_HOME_WHOLE_NUMBER"; 4425ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_type_to_string[PHONE_FAX_COUNTRY_CODE] = "PHONE_FAX_COUNTRY_CODE"; 4426ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_type_to_string[PHONE_FAX_CITY_CODE] = "PHONE_FAX_CITY_CODE"; 442772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_type_to_string[PHONE_FAX_WHOLE_NUMBER] = "PHONE_FAX_WHOLE_NUMBER"; 4428bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return autofill_type_to_string; 4429bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 4430bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4431bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen/* static */ 4432dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstd::map<AutofillFieldType, std::string> 4433bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TestingAutomationProvider::GetCreditCardFieldToStringMap() { 4434dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::map<AutofillFieldType, std::string> credit_card_type_to_string; 443572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen credit_card_type_to_string[CREDIT_CARD_NAME] = "CREDIT_CARD_NAME"; 443672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen credit_card_type_to_string[CREDIT_CARD_NUMBER] = "CREDIT_CARD_NUMBER"; 443772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen credit_card_type_to_string[CREDIT_CARD_EXP_MONTH] = "CREDIT_CARD_EXP_MONTH"; 4438bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen credit_card_type_to_string[CREDIT_CARD_EXP_4_DIGIT_YEAR] = 443972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "CREDIT_CARD_EXP_4_DIGIT_YEAR"; 4440bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return credit_card_type_to_string; 4441bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 4442bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 4443513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Refer to GetActiveNotifications() in chrome/test/pyautolib/pyauto.py for 4444513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// sample json input/output. 4445513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid TestingAutomationProvider::GetActiveNotifications( 4446513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch Browser* browser, 4447513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DictionaryValue* args, 4448513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch IPC::Message* reply_message) { 444921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen new GetActiveNotificationsObserver(this, reply_message); 4450513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 4451513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 4452513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Refer to CloseNotification() in chrome/test/pyautolib/pyauto.py for 4453513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// sample json input. 4454513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Returns empty json message. 4455513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid TestingAutomationProvider::CloseNotification( 4456513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch Browser* browser, 4457513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DictionaryValue* args, 4458513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch IPC::Message* reply_message) { 4459513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int index; 4460513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!args->GetInteger("index", &index)) { 4461dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 4462dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("'index' missing or invalid."); 4463513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 4464513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4465513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NotificationUIManager* manager = g_browser_process->notification_ui_manager(); 4466513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch BalloonCollection* collection = manager->balloon_collection(); 4467513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const BalloonCollection::Balloons& balloons = collection->GetActiveBalloons(); 4468513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int balloon_count = static_cast<int>(balloons.size()); 4469513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (index < 0 || index >= balloon_count) { 4470dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 4471dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError(StringPrintf("No notification at index %d", index)); 4472513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 4473513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4474513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // This will delete itself when finished. 4475513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch new OnNotificationBalloonCountObserver( 4476513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch this, reply_message, collection, balloon_count - 1); 4477201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch manager->CancelById(balloons[index]->notification().notification_id()); 4478513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 4479513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 4480513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Refer to WaitForNotificationCount() in chrome/test/pyautolib/pyauto.py for 4481513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// sample json input. 4482513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Returns empty json message. 4483513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid TestingAutomationProvider::WaitForNotificationCount( 4484513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch Browser* browser, 4485513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DictionaryValue* args, 4486513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch IPC::Message* reply_message) { 4487513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int count; 4488513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!args->GetInteger("count", &count)) { 4489dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 4490dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("'count' missing or invalid."); 4491513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 4492513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4493513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NotificationUIManager* manager = g_browser_process->notification_ui_manager(); 4494513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch BalloonCollection* collection = manager->balloon_collection(); 4495513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const BalloonCollection::Balloons& balloons = collection->GetActiveBalloons(); 4496513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (static_cast<int>(balloons.size()) == count) { 4497513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AutomationJSONReply(this, reply_message).SendSuccess(NULL); 4498513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 4499513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 4500513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // This will delete itself when finished. 4501513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch new OnNotificationBalloonCountObserver( 4502513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch this, reply_message, collection, count); 4503513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 4504513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 4505201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Sample JSON input: { "command": "GetNTPInfo" } 4506201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// For output, refer to chrome/test/pyautolib/ntp_model.py. 4507201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid TestingAutomationProvider::GetNTPInfo( 4508201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Browser* browser, 4509201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch DictionaryValue* args, 4510201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch IPC::Message* reply_message) { 4511201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // This observer will delete itself. 4512201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch new NTPInfoObserver(this, reply_message, &consumer_); 4513201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 4514201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 4515201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid TestingAutomationProvider::MoveNTPMostVisitedThumbnail( 4516201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Browser* browser, 4517201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch DictionaryValue* args, 4518201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch IPC::Message* reply_message) { 4519201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch AutomationJSONReply reply(this, reply_message); 4520201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string url, error; 4521201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch int index, old_index; 4522201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (!args->GetString("url", &url)) { 4523201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reply.SendError("Missing or invalid 'url' key."); 4524201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 4525201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 4526201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (!args->GetInteger("index", &index)) { 4527201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reply.SendError("Missing or invalid 'index' key."); 4528201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 4529201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 4530201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (!args->GetInteger("old_index", &old_index)) { 4531201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reply.SendError("Missing or invalid 'old_index' key"); 4532201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 4533201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 4534201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch history::TopSites* top_sites = browser->profile()->GetTopSites(); 4535201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (!top_sites) { 4536201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reply.SendError("TopSites service is not initialized."); 4537201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 4538201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 4539201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL swapped; 4540201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // If thumbnail A is switching positions with a pinned thumbnail B, B 4541201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // should be pinned in the old index of A. 4542201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (top_sites->GetPinnedURLAtIndex(index, &swapped)) { 4543201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch top_sites->AddPinnedURL(swapped, old_index); 4544201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 4545201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch top_sites->AddPinnedURL(GURL(url), index); 4546201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reply.SendSuccess(NULL); 4547201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 4548201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 4549201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid TestingAutomationProvider::RemoveNTPMostVisitedThumbnail( 4550201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Browser* browser, 4551201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch DictionaryValue* args, 4552201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch IPC::Message* reply_message) { 4553201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch AutomationJSONReply reply(this, reply_message); 4554201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string url; 4555201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (!args->GetString("url", &url)) { 4556201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reply.SendError("Missing or invalid 'url' key."); 4557201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 4558201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 4559201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch history::TopSites* top_sites = browser->profile()->GetTopSites(); 4560201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (!top_sites) { 4561201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reply.SendError("TopSites service is not initialized."); 4562201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 4563201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 4564201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch top_sites->AddBlacklistedURL(GURL(url)); 4565201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reply.SendSuccess(NULL); 4566201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 4567201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 4568201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid TestingAutomationProvider::UnpinNTPMostVisitedThumbnail( 4569201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Browser* browser, 4570201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch DictionaryValue* args, 4571201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch IPC::Message* reply_message) { 4572201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch AutomationJSONReply reply(this, reply_message); 4573201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string url; 4574201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (!args->GetString("url", &url)) { 4575201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reply.SendError("Missing or invalid 'url' key."); 4576201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 4577201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 4578201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch history::TopSites* top_sites = browser->profile()->GetTopSites(); 4579201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (!top_sites) { 4580201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reply.SendError("TopSites service is not initialized."); 4581201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 4582201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 4583201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch top_sites->RemovePinnedURL(GURL(url)); 4584201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reply.SendSuccess(NULL); 4585201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 4586201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 4587201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid TestingAutomationProvider::RestoreAllNTPMostVisitedThumbnails( 4588201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Browser* browser, 4589201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch DictionaryValue* args, 4590201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch IPC::Message* reply_message) { 4591201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch AutomationJSONReply reply(this, reply_message); 4592201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch history::TopSites* top_sites = browser->profile()->GetTopSites(); 4593201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (!top_sites) { 4594201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reply.SendError("TopSites service is not initialized."); 4595201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 4596201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 4597201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch top_sites->ClearBlacklistedURLs(); 4598201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch reply.SendSuccess(NULL); 4599201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 4600201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 460121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid TestingAutomationProvider::KillRendererProcess( 460221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen Browser* browser, 460321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DictionaryValue* args, 460421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen IPC::Message* reply_message) { 460521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int pid; 460621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (!args->GetInteger("pid", &pid)) { 4607dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 4608dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("'pid' key missing or invalid."); 460921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return; 461021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 461121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen base::ProcessHandle process; 461221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (!base::OpenProcessHandle(static_cast<base::ProcessId>(pid), &process)) { 461321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AutomationJSONReply(this, reply_message).SendError(base::StringPrintf( 461421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "Failed to open process handle for pid %d", pid)); 461521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return; 461621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 461721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen new RendererProcessClosedObserver(this, reply_message); 461821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen base::KillProcess(process, 0, false); 461921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen base::CloseProcessHandle(process); 462021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 462121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 4622ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool TestingAutomationProvider::BuildWebKeyEventFromArgs( 462372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* args, 4624ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string* error, 4625ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NativeWebKeyboardEvent* event) { 462672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int type, modifiers; 462772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool is_system_key; 462872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen string16 unmodified_text, text; 462972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string key_identifier; 463072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!args->GetInteger("type", &type)) { 4631ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *error = "'type' missing or invalid."; 4632ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 463372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 463472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!args->GetBoolean("isSystemKey", &is_system_key)) { 4635ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *error = "'isSystemKey' missing or invalid."; 4636ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 463772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 463872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!args->GetString("unmodifiedText", &unmodified_text)) { 4639ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *error = "'unmodifiedText' missing or invalid."; 4640ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 464172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 464272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!args->GetString("text", &text)) { 4643ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *error = "'text' missing or invalid."; 4644ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 464572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 4646ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!args->GetInteger("nativeKeyCode", &event->nativeKeyCode)) { 4647ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *error = "'nativeKeyCode' missing or invalid."; 4648ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 464972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 4650ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!args->GetInteger("windowsKeyCode", &event->windowsKeyCode)) { 4651ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *error = "'windowsKeyCode' missing or invalid."; 4652ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 465372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 465472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!args->GetInteger("modifiers", &modifiers)) { 4655ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *error = "'modifiers' missing or invalid."; 4656ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 465772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 465872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (args->GetString("keyIdentifier", &key_identifier)) { 4659ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::strlcpy(event->keyIdentifier, 466072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen key_identifier.c_str(), 466172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WebKit::WebKeyboardEvent::keyIdentifierLengthCap); 466272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else { 4663ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->setKeyIdentifierFromWindowsKeyCode(); 466472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 466572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 466672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (type == automation::kRawKeyDownType) { 4667ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->type = WebKit::WebInputEvent::RawKeyDown; 466872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else if (type == automation::kKeyDownType) { 4669ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->type = WebKit::WebInputEvent::KeyDown; 467072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else if (type == automation::kKeyUpType) { 4671ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->type = WebKit::WebInputEvent::KeyUp; 467272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else if (type == automation::kCharType) { 4673ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->type = WebKit::WebInputEvent::Char; 467472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else { 4675ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *error = "'type' refers to an unrecognized keyboard event type"; 4676ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 467772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 467872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 467972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen string16 unmodified_text_truncated = unmodified_text.substr( 468072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 0, WebKit::WebKeyboardEvent::textLengthCap - 1); 4681ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen memcpy(event->unmodifiedText, 468272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen unmodified_text_truncated.c_str(), 468372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen unmodified_text_truncated.length() + 1); 468472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen string16 text_truncated = text.substr( 468572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 0, WebKit::WebKeyboardEvent::textLengthCap - 1); 4686ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen memcpy(event->text, text_truncated.c_str(), text_truncated.length() + 1); 468772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4688ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->modifiers = 0; 468972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (modifiers & automation::kShiftKeyMask) 4690ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->modifiers |= WebKit::WebInputEvent::ShiftKey; 469172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (modifiers & automation::kControlKeyMask) 4692ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->modifiers |= WebKit::WebInputEvent::ControlKey; 469372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (modifiers & automation::kAltKeyMask) 4694ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->modifiers |= WebKit::WebInputEvent::AltKey; 469572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (modifiers & automation::kMetaKeyMask) 4696ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->modifiers |= WebKit::WebInputEvent::MetaKey; 469772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4698ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->isSystemKey = is_system_key; 4699ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->timeStampSeconds = base::Time::Now().ToDoubleT(); 4700ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->skip_in_browser = true; 4701ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return true; 4702ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 4703ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4704ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::SendWebkitKeyEvent( 4705ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* args, 4706ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 4707ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NativeWebKeyboardEvent event; 4708ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // BuildWebKeyEventFromArgs handles telling what when wrong and sending 4709ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // the reply message, if it failed we just have to stop here. 4710ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string error; 4711ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!BuildWebKeyEventFromArgs(args, &error, &event)) { 4712ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError(error); 4713ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4714ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4715ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4716ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContents* tab_contents; 4717ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!GetTabFromJSONArgs(args, &tab_contents, &error)) { 4718ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError(error); 4719ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4720ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 472172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new InputEventAckNotificationObserver(this, reply_message, event.type); 4722dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents->render_view_host()->ForwardKeyboardEvent(event); 4723dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 4724dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4725ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::SendOSLevelKeyEventToTab( 4726ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* args, 4727ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 4728ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int modifiers, keycode; 4729ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!args->GetInteger("keyCode", &keycode)) { 4730ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message) 4731ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .SendError("'keyCode' missing or invalid."); 4732ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4733ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4734ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!args->GetInteger("modifiers", &modifiers)) { 4735ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message) 4736ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .SendError("'modifiers' missing or invalid."); 4737ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4738ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4739ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4740ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string error; 4741ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Browser* browser; 4742ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContents* tab_contents; 4743ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!GetBrowserAndTabFromJSONArgs(args, &browser, &tab_contents, &error)) { 4744ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError(error); 4745ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4746ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4747ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The key events will be sent to the browser window, we need the current tab 4748ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // containing the element we send the text in to be shown. 4749ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser->ActivateTabAt( 4750ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser->GetIndexOfController(&tab_contents->controller()), true); 4751ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4752ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BrowserWindow* browser_window = browser->window(); 4753ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!browser_window) { 4754ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message) 4755ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .SendError("Could not get the browser window"); 4756ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4757ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4758ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen gfx::NativeWindow window = browser_window->GetNativeHandle(); 4759ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!window) { 4760ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message) 4761ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .SendError("Could not get the browser window handle"); 4762ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4763ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4764ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4765ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool control = !!(modifiers & automation::kControlKeyMask); 4766ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool shift = !!(modifiers & automation::kShiftKeyMask); 4767ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool alt = !!(modifiers & automation::kAltKeyMask); 4768ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool meta = !!(modifiers & automation::kMetaKeyMask); 4769ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!ui_controls::SendKeyPressNotifyWhenDone( 4770ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen window, static_cast<ui::KeyboardCode>(keycode), 4771ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen control, shift, alt, meta, 4772ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewRunnableMethod(this, 4773ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &TestingAutomationProvider::SendSuccessReply, reply_message))) { 4774ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message) 4775ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .SendError("Could not send the native key event"); 4776ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4777ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 4778ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4779ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::SendSuccessReply(IPC::Message* reply_message) { 4780ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(NULL); 4781ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 4782ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4783dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Sample JSON input: { "command": "GetNTPThumbnailMode" } 4784dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// For output, refer to GetNTPThumbnailMode() in 4785dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// chrome/test/pyautolib/pyauto.py. 4786dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::GetNTPThumbnailMode( 4787dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Browser* browser, 4788dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 4789dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 4790dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const int shown_sections = ShownSectionsHandler::GetShownSections( 4791dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen browser->profile()->GetPrefs()); 4792dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4793ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 4794dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return_value->SetBoolean("apps", shown_sections & APPS ? true : false); 4795dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return_value->SetBoolean("most_visited", 4796dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen shown_sections & THUMB ? true : false); 4797dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4798dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply reply(this, reply_message); 4799ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendSuccess(return_value.get()); 4800dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 4801dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4802dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Sample JSON input: { "command": "SetNTPThumbnailMode", "section": "apps", 4803dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// "turn_on": true } 4804dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Refer to SetNTPThumbnailMode() in chrome/test/pyautolib/pyauto.py for 4805dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// all possible input values. 4806dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Sample JSON output: {} 4807dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::SetNTPThumbnailMode( 4808dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Browser* browser, 4809dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 4810dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 4811dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply reply(this, reply_message); 4812dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string section_name; 4813dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool turn_on; 4814dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!args->GetString("section", §ion_name) || 4815dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen !args->GetBoolean("turn_on", &turn_on)) { 4816dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError("Invalid or missing args"); 4817dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 4818dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 4819dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4820dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen PrefService* prefs = browser->profile()->GetPrefs(); 4821dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Section section; 4822dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (section_name.compare("apps") == 0) { 4823dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen section = APPS; 4824dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else if (section_name.compare("most_visited") == 0) { 4825dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen section = THUMB; 4826dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else if (section_name.compare("recently_closed") == 0) { 4827dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError("Thumbnail mode does not apply to the recently closed " 4828dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "section."); 4829dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 4830dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else { 4831dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError(StringPrintf("Unexpected section name: '%s'", 4832dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen section_name.c_str())); 4833dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 4834dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 4835dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4836dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (turn_on) { 4837dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ShownSectionsHandler::SetShownSection(prefs, section); 4838dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else { 4839dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int shown_sections = ShownSectionsHandler::GetShownSections(prefs); 4840dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Change the bit for the relevant section in the bitmask to 0. 4841dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen shown_sections &= ~(0xFFFFFFFF & section); 4842dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->SetInteger(prefs::kNTPShownSections, shown_sections); 4843dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 4844dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4845dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendSuccess(NULL); 4846dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 4847dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4848dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Sample JSON input: { "command": "GetNTPMenuMode" } 4849dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// For output, refer to GetNTPMenuMode() in 4850dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// chrome/test/pyautolib/pyauto.py. 4851dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::GetNTPMenuMode( 4852dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Browser* browser, 4853dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 4854dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 4855dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const int shown_sections = ShownSectionsHandler::GetShownSections( 4856dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen browser->profile()->GetPrefs()); 4857dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4858ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 4859dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return_value->SetBoolean("apps", shown_sections & MENU_APPS ? true : false); 4860dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return_value->SetBoolean("most_visited", 4861dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen shown_sections & MENU_THUMB ? true : false); 4862dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return_value->SetBoolean("recently_closed", 4863dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen shown_sections & MENU_RECENT ? true : false); 4864dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4865dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply reply(this, reply_message); 4866ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendSuccess(return_value.get()); 4867dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 4868dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4869dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Sample JSON input: { "command": "SetNTPMenuMode", "section": "apps", 4870dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// "turn_on": false } 4871dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Refer to SetNTPMenuMode() in chrome/test/pyautolib/pyauto.py for all possible 4872dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// input values. 4873dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Sample JSON output: {} 4874dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::SetNTPMenuMode( 4875dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Browser* browser, 4876dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 4877dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 4878dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply reply(this, reply_message); 4879dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string section_name; 4880dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool turn_on; 4881dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!args->GetString("section", §ion_name) || 4882dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen !args->GetBoolean("turn_on", &turn_on)) { 4883dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError("Invalid or missing args"); 4884dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 4885dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 4886dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4887dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen PrefService* prefs = browser->profile()->GetPrefs(); 4888dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Section section; 4889dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (section_name.compare("apps") == 0) { 4890dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen section = MENU_APPS; 4891dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else if (section_name.compare("most_visited") == 0) { 4892dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen section = MENU_THUMB; 4893dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else if (section_name.compare("recently_closed") == 0) { 4894dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen section = MENU_RECENT; 4895dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else { 4896dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError(StringPrintf("Unexpected section name: '%s'", 4897dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen section_name.c_str())); 4898dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 4899dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 4900dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4901dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int shown_sections = ShownSectionsHandler::GetShownSections(prefs); 4902dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (turn_on) { 4903dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Change the bit for the relevant section in the bitmask to 1. 4904dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen shown_sections |= section; 4905dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else { 4906dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Change the bit for the relevant section in the bitmask to 0. 4907dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen shown_sections &= ~(0xFFFFFFFF & section); 4908dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 4909dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->SetInteger(prefs::kNTPShownSections, shown_sections); 4910dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4911dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendSuccess(NULL); 4912dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 4913dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 4914ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Sample JSON input: { "command": "LaunchApp", 4915ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// "id": "ahfgeienlihckogmohjhadlkjgocpleb" } 4916ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Sample JSON output: {} 4917ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::LaunchApp( 4918ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Browser* browser, 4919ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* args, 4920ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 4921ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string id; 4922ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!args->GetString("id", &id)) { 4923ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError( 4924ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Must include string id."); 4925ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4926ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4927ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4928ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExtensionService* service = browser->profile()->GetExtensionService(); 4929ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!service) { 4930ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError( 4931ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "No extensions service."); 4932ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4933ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4934ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4935ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const Extension* extension = service->GetExtensionById( 4936ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen id, false /* do not include disabled extensions */); 4937ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!extension) { 4938ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError( 4939ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StringPrintf("Extension with ID '%s' doesn't exist or is disabled.", 4940ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen id.c_str())); 4941ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4942ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4943ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4944ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Look at preferences to find the right launch container. If no preference 4945ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // is set, launch as a regular tab. 4946ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_misc::LaunchContainer launch_container = 4947ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service->extension_prefs()->GetLaunchContainer( 4948ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension, ExtensionPrefs::LAUNCH_REGULAR); 4949ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4950ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContents* old_contents = browser->GetSelectedTabContents(); 4951ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!old_contents) { 4952ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError( 4953ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Cannot identify selected tab contents."); 4954ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4955ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4956ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4957ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // This observer will delete itself. 4958ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new AppLaunchObserver(&old_contents->controller(), this, reply_message, 4959ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen launch_container); 4960ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Browser::OpenApplication(profile(), extension, launch_container, 4961ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen old_contents); 4962ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 4963ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4964ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Sample JSON input: { "command": "SetAppLaunchType", 4965ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// "id": "ahfgeienlihckogmohjhadlkjgocpleb", 4966ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// "launch_type": "pinned" } 4967ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Sample JSON output: {} 4968ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::SetAppLaunchType( 4969ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Browser* browser, 4970ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* args, 4971ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 4972ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply reply(this, reply_message); 4973ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4974ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string id; 4975ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!args->GetString("id", &id)) { 4976ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError("Must include string id."); 4977ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4978ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4979ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4980ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string launch_type_str; 4981ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!args->GetString("launch_type", &launch_type_str)) { 4982ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError("Must specify app launch type."); 4983ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4984ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4985ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4986ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExtensionService* service = browser->profile()->GetExtensionService(); 4987ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!service) { 4988ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError("No extensions service."); 4989ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4990ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4991ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4992ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const Extension* extension = service->GetExtensionById( 4993ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen id, true /* include disabled extensions */); 4994ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!extension) { 4995ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError( 4996ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StringPrintf("Extension with ID '%s' doesn't exist.", id.c_str())); 4997ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 4998ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 4999ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5000ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExtensionPrefs::LaunchType launch_type; 5001ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (launch_type_str == "pinned") { 5002ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen launch_type = ExtensionPrefs::LAUNCH_PINNED; 5003ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else if (launch_type_str == "regular") { 5004ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen launch_type = ExtensionPrefs::LAUNCH_REGULAR; 5005ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else if (launch_type_str == "fullscreen") { 5006ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen launch_type = ExtensionPrefs::LAUNCH_FULLSCREEN; 5007ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else if (launch_type_str == "window") { 5008ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen launch_type = ExtensionPrefs::LAUNCH_WINDOW; 5009ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 5010ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError( 5011ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StringPrintf("Unexpected launch type '%s'.", launch_type_str.c_str())); 5012ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 5013ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 5014ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5015ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service->extension_prefs()->SetLaunchType(extension->id(), launch_type); 5016ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendSuccess(NULL); 5017ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 5018ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5019dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::WaitForAllTabsToStopLoading( 5020dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 5021dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 5022ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // This class will send the message immediately if no tab is loading. 5023dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new AllTabsStoppedLoadingObserver(this, reply_message); 5024dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5025dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5026dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::GetIndicesFromTab( 5027dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 5028dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 5029dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply reply(this, reply_message); 5030dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int id_or_handle = 0; 5031dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool has_id = args->HasKey("tab_id"); 5032dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool has_handle = args->HasKey("tab_handle"); 5033dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (has_id && has_handle) { 5034dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError( 5035dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Both 'tab_id' and 'tab_handle' were specified. Only one is allowed"); 5036dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5037dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else if (!has_id && !has_handle) { 5038dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError("Either 'tab_id' or 'tab_handle' must be specified"); 5039dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5040dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5041dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (has_id && !args->GetInteger("tab_id", &id_or_handle)) { 5042dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError("'tab_id' is invalid"); 5043dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5044dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5045dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (has_handle && (!args->GetInteger("tab_handle", &id_or_handle) || 5046dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen !tab_tracker_->ContainsHandle(id_or_handle))) { 5047dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError("'tab_handle' is invalid"); 5048dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5049dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5050dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int id = id_or_handle; 5051dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (has_handle) 5052dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen id = tab_tracker_->GetResource(id_or_handle)->session_id().id(); 5053dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen BrowserList::const_iterator iter = BrowserList::begin(); 5054dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int browser_index = 0; 5055dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (; iter != BrowserList::end(); ++iter, ++browser_index) { 5056dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Browser* browser = *iter; 5057dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (int tab_index = 0; tab_index < browser->tab_count(); ++tab_index) { 5058dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab = browser->GetTabContentsAt(tab_index); 5059dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (tab->controller().session_id().id() == id) { 5060dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue dict; 5061dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen dict.SetInteger("windex", browser_index); 5062dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen dict.SetInteger("tab_index", tab_index); 5063dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendSuccess(&dict); 5064dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5065dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5066dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5067dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5068dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError("Could not find tab among current browser windows"); 5069dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5070dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5071dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::NavigateToURL( 5072dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 5073dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 5074dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int navigation_count; 5075dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string url, error; 5076dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Browser* browser; 5077dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab_contents; 5078dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!GetBrowserAndTabFromJSONArgs(args, &browser, &tab_contents, &error)) { 5079dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message).SendError(error); 5080dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5081dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5082dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!args->GetString("url", &url)) { 5083dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 5084dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("'url' missing or invalid"); 5085dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5086dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5087dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!args->GetInteger("navigation_count", &navigation_count)) { 5088dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 5089dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("'navigation_count' missing or invalid"); 5090dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5091dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5092dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new NavigationNotificationObserver( 5093dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &tab_contents->controller(), this, reply_message, 5094dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen navigation_count, false, true); 5095dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen browser->OpenURLFromTab( 5096dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents, GURL(url), GURL(), CURRENT_TAB, PageTransition::TYPED); 5097dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5098dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5099dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::ExecuteJavascriptJSON( 5100dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 5101dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 5102dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen string16 frame_xpath, javascript; 5103dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string error; 5104dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab_contents; 5105dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!GetTabFromJSONArgs(args, &tab_contents, &error)) { 5106dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message).SendError(error); 5107dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5108dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5109dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!args->GetString("frame_xpath", &frame_xpath)) { 5110dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 5111dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("'frame_xpath' missing or invalid"); 5112dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5113dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5114dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!args->GetString("javascript", &javascript)) { 5115dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message) 5116dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen .SendError("'javascript' missing or invalid"); 5117dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5118dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5119dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5120dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Set the routing id of this message with the controller. 5121dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // This routing id needs to be remembered for the reverse 5122dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // communication while sending back the response of 5123dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // this javascript execution. 5124dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string set_automation_id; 5125dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::SStringPrintf(&set_automation_id, 5126dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "window.domAutomationController.setAutomationId(%d);", 5127dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply_message->routing_id()); 5128dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new DomOperationMessageSender(this, reply_message, true); 5130dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents->render_view_host()->ExecuteJavascriptInWebFrame( 5131dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen frame_xpath, UTF8ToUTF16(set_automation_id)); 5132dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents->render_view_host()->ExecuteJavascriptInWebFrame( 5133dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen frame_xpath, javascript); 5134dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5135dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5136dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::GoForward( 5137dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 5138dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 5139dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab_contents; 5140dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string error; 5141dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!GetTabFromJSONArgs(args, &tab_contents, &error)) { 5142dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message).SendError(error); 5143dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5144dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5145dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NavigationController& controller = tab_contents->controller(); 5146dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!controller.CanGoForward()) { 5147dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue dict; 5148dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen dict.SetBoolean("did_go_forward", false); 5149dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(&dict); 5150dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5151dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5152dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new NavigationNotificationObserver(&controller, this, reply_message, 5153dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 1, false, true); 5154dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen controller.GoForward(); 5155dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5156dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5157dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::GoBack( 5158dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 5159dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 5160dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab_contents; 5161dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string error; 5162dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!GetTabFromJSONArgs(args, &tab_contents, &error)) { 5163dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message).SendError(error); 5164dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5165dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5166dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NavigationController& controller = tab_contents->controller(); 5167dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!controller.CanGoBack()) { 5168dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue dict; 5169dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen dict.SetBoolean("did_go_back", false); 5170dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(&dict); 5171dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5172dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5173dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new NavigationNotificationObserver(&controller, this, reply_message, 5174dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 1, false, true); 5175dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen controller.GoBack(); 5176dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5177dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5178dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::ReloadJSON( 5179dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 5180dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 5181dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab_contents; 5182dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string error; 5183dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!GetTabFromJSONArgs(args, &tab_contents, &error)) { 5184dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message).SendError(error); 5185dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5186dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5187dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NavigationController& controller = tab_contents->controller(); 5188dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new NavigationNotificationObserver(&controller, this, reply_message, 5189dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 1, false, true); 5190dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen controller.Reload(false); 5191dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5192dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5193dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::GetTabURLJSON( 5194dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 5195dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 5196dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply reply(this, reply_message); 5197dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab_contents; 5198dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string error; 5199dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!GetTabFromJSONArgs(args, &tab_contents, &error)) { 5200dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError(error); 5201dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5202dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5203dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue dict; 5204dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen dict.SetString("url", tab_contents->GetURL().possibly_invalid_spec()); 5205dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendSuccess(&dict); 5206dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5207dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5208dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::GetTabTitleJSON( 5209dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 5210dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 5211dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply reply(this, reply_message); 5212dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab_contents; 5213dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string error; 5214dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!GetTabFromJSONArgs(args, &tab_contents, &error)) { 5215dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError(error); 5216dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5217dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5218dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue dict; 5219dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen dict.SetString("title", tab_contents->GetTitle()); 5220dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendSuccess(&dict); 5221dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5222dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::CaptureEntirePageJSON( 5224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* args, 5225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 5226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContents* tab_contents; 5227dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string error; 5228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!GetTabFromJSONArgs(args, &tab_contents, &error)) { 5230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError(error); 5231dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5232dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FilePath::StringType path_str; 5235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!args->GetString("path", &path_str)) { 5236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message) 5237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .SendError("'path' missing or invalid"); 5238dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5239dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5240dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen RenderViewHost* render_view = tab_contents->render_view_host(); 5242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (render_view) { 5243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FilePath path(path_str); 5244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // This will delete itself when finished. 5245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PageSnapshotTaker* snapshot_taker = new PageSnapshotTaker( 5246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this, reply_message, render_view, path); 5247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen snapshot_taker->Start(); 5248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 5249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message) 5250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .SendError("Tab has no associated RenderViewHost"); 5251dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 5253dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::GetCookiesJSON( 5255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* args, IPC::Message* reply_message) { 5256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen automation_util::GetCookiesJSON(this, args, reply_message); 5257dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5258dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5259dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::DeleteCookieJSON( 5260dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, IPC::Message* reply_message) { 5261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen automation_util::DeleteCookieJSON(this, args, reply_message); 5262dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5263dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5264dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::SetCookieJSON( 5265dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, IPC::Message* reply_message) { 5266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen automation_util::SetCookieJSON(this, args, reply_message); 5267dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5268dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5269dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::GetTabIds( 5270dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, IPC::Message* reply_message) { 5271dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ListValue* id_list = new ListValue(); 5272dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen BrowserList::const_iterator iter = BrowserList::begin(); 5273dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (; iter != BrowserList::end(); ++iter) { 5274dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Browser* browser = *iter; 5275dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (int i = 0; i < browser->tab_count(); ++i) { 5276dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int id = browser->GetTabContentsAt(i)->controller().session_id().id(); 5277dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen id_list->Append(Value::CreateIntegerValue(id)); 5278dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5279dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5280dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue dict; 5281dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen dict.Set("ids", id_list); 5282dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(&dict); 5283dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5284dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5285dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::IsTabIdValid( 5286dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, IPC::Message* reply_message) { 5287dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply reply(this, reply_message); 5288dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int id; 5289dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!args->GetInteger("id", &id)) { 5290dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError("'id' missing or invalid"); 5291dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5292dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5293dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool is_valid = false; 5294dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen BrowserList::const_iterator iter = BrowserList::begin(); 5295dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (; iter != BrowserList::end(); ++iter) { 5296dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Browser* browser = *iter; 5297dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (int i = 0; i < browser->tab_count(); ++i) { 5298dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab = browser->GetTabContentsAt(i); 5299dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (tab->controller().session_id().id() == id) { 5300dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen is_valid = true; 5301dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen break; 5302dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5303dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5304dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5305dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue dict; 5306dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen dict.SetBoolean("is_valid", is_valid); 5307dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendSuccess(&dict); 5308dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5309dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5310dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::CloseTabJSON( 5311dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, IPC::Message* reply_message) { 5312dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply reply(this, reply_message); 5313dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Browser* browser; 5314dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab_contents; 5315dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string error; 5316dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!GetBrowserAndTabFromJSONArgs(args, &browser, &tab_contents, &error)) { 5317dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError(error); 5318dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5319dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5320dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen browser->CloseTabContents(tab_contents); 5321dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendSuccess(NULL); 5322dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5323dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5324dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::ActivateTabJSON( 5325dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* args, 5326dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message) { 5327dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutomationJSONReply reply(this, reply_message); 5328dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Browser* browser; 5329dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TabContents* tab_contents; 5330dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string error; 5331dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!GetBrowserAndTabFromJSONArgs(args, &browser, &tab_contents, &error)) { 5332dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendError(error); 5333dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return; 5334dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5335ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser->ActivateTabAt( 5336dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen browser->GetIndexOfController(&tab_contents->controller()), true); 5337dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen reply.SendSuccess(NULL); 533872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 533972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5340ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Sample json input: { "command": "UpdateExtensionsNow" } 5341ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Sample json output: {} 5342ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::UpdateExtensionsNow( 5343ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* args, 5344ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 5345ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExtensionService* service = profile()->GetExtensionService(); 5346ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!service) { 5347ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError( 5348ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "No extensions service."); 5349ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 5350ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 5351ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5352ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExtensionUpdater* updater = service->updater(); 5353ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!updater) { 5354ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError( 5355ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "No updater for extensions service."); 5356ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 5357ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 5358ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5359ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExtensionProcessManager* manager = profile()->GetExtensionProcessManager(); 5360ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!manager) { 5361ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendError( 5362ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "No extension process manager."); 5363ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 5364ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 5365ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5366ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Create a new observer that waits until the extensions have been fully 5367ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // updated (we should not send the reply until after all extensions have 5368ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // been updated). This observer will delete itself. 5369ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new ExtensionsUpdatedObserver(manager, this, reply_message); 5370ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen updater->CheckNow(); 5371ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 5372ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5373ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::GetChromeDriverAutomationVersion( 5374ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* args, 5375ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 5376ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue reply_dict; 5377ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply_dict.SetInteger("version", automation::kChromeDriverAutomationVersion); 5378ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(&reply_dict); 5379ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 5380ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5381bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::WaitForTabCountToBecome( 5382bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int browser_handle, 5383bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int target_tab_count, 5384bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 5385bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!browser_tracker_->ContainsHandle(browser_handle)) { 5386bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_WaitForTabCountToBecome::WriteReplyParams(reply_message, 5387bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen false); 5388bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message); 5389bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 5390bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 5391bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5392bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(browser_handle); 5393bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5394bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The observer will delete itself. 5395bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new TabCountChangeObserver(this, browser, reply_message, target_tab_count); 5396bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 5397bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5398bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::WaitForInfoBarCount( 5399bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int tab_handle, 540072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen size_t target_count, 5401bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::Message* reply_message) { 5402bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!tab_tracker_->ContainsHandle(tab_handle)) { 5403bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_WaitForInfoBarCount::WriteReplyParams(reply_message_, false); 5404bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message_); 5405bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 5406bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 5407bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5408bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* controller = tab_tracker_->GetResource(tab_handle); 5409bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!controller) { 5410bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationMsg_WaitForInfoBarCount::WriteReplyParams(reply_message_, false); 5411bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message_); 5412bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 5413bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 5414bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5415bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The delegate will delete itself. 5416bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new InfoBarCountObserver(this, reply_message, controller->tab_contents(), 5417bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen target_count); 5418bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 5419bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5420bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Gets the current used encoding name of the page in the specified tab. 5421bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::GetPageCurrentEncoding( 5422bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int tab_handle, std::string* current_encoding) { 5423bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (tab_tracker_->ContainsHandle(tab_handle)) { 5424bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NavigationController* nav = tab_tracker_->GetResource(tab_handle); 5425bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = FindAndActivateTab(nav); 5426bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(browser); 5427bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5428bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser->command_updater()->IsCommandEnabled(IDC_ENCODING_MENU)) 5429bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *current_encoding = nav->tab_contents()->encoding(); 5430bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 5431bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 5432bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5433bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ShutdownSessionService(int handle, 5434bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* result) { 5435bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 5436bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 5437bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->profile()->ShutdownSessionService(); 5438bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *result = true; 5439bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 5440bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *result = false; 5441bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 5442bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 5443bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5444bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::SetContentSetting( 5445bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int handle, 5446bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& host, 5447bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ContentSettingsType content_type, 5448bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ContentSetting setting, 5449bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool* success) { 5450bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = false; 5451bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (browser_tracker_->ContainsHandle(handle)) { 5452bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Browser* browser = browser_tracker_->GetResource(handle); 5453bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen HostContentSettingsMap* map = 5454bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen browser->profile()->GetHostContentSettingsMap(); 5455bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (host.empty()) { 5456bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen map->SetDefaultContentSetting(content_type, setting); 5457bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 545821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen map->SetContentSetting(ContentSettingsPattern(host), 5459bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen content_type, "", setting); 5460bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 5461bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *success = true; 5462bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 5463bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 5464bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5465513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid TestingAutomationProvider::LoadBlockedPlugins(int tab_handle, 5466513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool* success) { 5467513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch *success = false; 5468513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (tab_tracker_->ContainsHandle(tab_handle)) { 5469513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NavigationController* nav = tab_tracker_->GetResource(tab_handle); 5470513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!nav) 5471513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 5472513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* contents = nav->tab_contents(); 5473513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!contents) 5474513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 5475513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch contents->render_view_host()->LoadBlockedPlugins(); 5476513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch *success = true; 5477513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 5478513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 5479513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 5480bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::ResetToDefaultTheme() { 5481ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ThemeServiceFactory::GetForProfile(profile_)->UseDefaultTheme(); 5482bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 5483bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 548472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid TestingAutomationProvider::WaitForProcessLauncherThreadToGoIdle( 548572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC::Message* reply_message) { 548672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new WaitForProcessLauncherThreadToGoIdleObserver(this, reply_message); 548772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 548872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5489dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TestingAutomationProvider::GetParentBrowserOfTab(int tab_handle, 5490dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int* browser_handle, 5491dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool* success) { 5492dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen *success = false; 5493dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (tab_tracker_->ContainsHandle(tab_handle)) { 5494dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NavigationController* controller = tab_tracker_->GetResource(tab_handle); 5495dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int index; 5496dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Browser* browser = Browser::GetBrowserForController(controller, &index); 5497dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (browser) { 5498dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen *browser_handle = browser_tracker_->Add(browser); 5499dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen *success = true; 5500dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5501dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5502dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 5503dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5504bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// TODO(brettw) change this to accept GURLs when history supports it 5505bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::OnRedirectQueryComplete( 5506bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen HistoryService::Handle request_handle, 5507bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GURL from_url, 5508bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool success, 5509bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen history::RedirectList* redirects) { 5510dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DCHECK_EQ(redirect_query_, request_handle); 5511bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DCHECK(reply_message_ != NULL); 5512bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5513bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::vector<GURL> redirects_gurl; 5514bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message_->WriteBool(success); 5515bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (success) { 5516bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (size_t i = 0; i < redirects->size(); i++) 5517bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen redirects_gurl.push_back(redirects->at(i)); 5518bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 5519bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5520bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen IPC::ParamTraits<std::vector<GURL> >::Write(reply_message_, redirects_gurl); 5521bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5522bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Send(reply_message_); 5523bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen redirect_query_ = 0; 5524bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen reply_message_ = NULL; 5525bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 5526bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5527bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestingAutomationProvider::OnRemoveProvider() { 5528bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AutomationProviderList::GetInstance()->RemoveProvider(this); 5529bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 5530