172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_AUTOMATION_AUTOMATION_PROVIDER_OBSERVERS_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_AUTOMATION_AUTOMATION_PROVIDER_OBSERVERS_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <deque> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <map> 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <set> 12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include <string> 13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include <vector> 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/compiler_specific.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/weak_ptr.h" 18513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/automation/automation_provider_json.h" 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/automation/automation_tab_helper.h" 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/bookmarks/bookmark_model_observer.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/browsing_data_remover.h" 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if defined(OS_CHROMEOS) 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/cros/network_library.h" 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif // defined(OS_CHROMEOS) 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/download/download_item.h" 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/download/download_manager.h" 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/history/history.h" 28201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/history/history_types.h" 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/importer/importer_data_types.h" 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/importer/importer_progress_observer.h" 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/password_manager/password_store_consumer.h" 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/search_engines/template_url_model_observer.h" 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/tabs/tab_strip_model.h" 3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/common/automation_constants.h" 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/common/extensions/extension_constants.h" 36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/cancelable_request.h" 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h" 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h" 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_type.h" 4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/size.h" 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass AutocompleteEditModel; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutomationProvider; 44513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass BalloonCollection; 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Browser; 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Extension; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionProcessManager; 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NavigationController; 494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass RenderViewHost; 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SavePackage; 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContents; 523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass TranslateInfoBarDelegate; 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochnamespace history { 55201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass TopSites; 56201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 57201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace IPC { 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Message; 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InitialLoadObserver : public NotificationObserver { 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch InitialLoadObserver(size_t tab_count, AutomationProvider* automation); 6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~InitialLoadObserver(); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Caller owns the return value and is responsible for deleting it. 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Example return value: 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // {'tabs': [{'start_time_ms': 1, 'stop_time_ms': 2.5}, 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // {'start_time_ms': 0.5, 'stop_time_ms': 3}]} 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // stop_time_ms values may be null if WaitForInitialLoads has not finished. 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Only includes entries for the |tab_count| tabs we are monitoring. 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // There is no defined ordering of the return value. 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DictionaryValue* GetTimingInformation() const; 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class TabTime; 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef std::map<uintptr_t, TabTime> TabTimeMap; 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef std::set<uintptr_t> TabSet; 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ConditionMet(); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t outstanding_tab_count_; 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::TimeTicks init_time_; 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabTimeMap loading_tabs_; 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabSet finished_tabs_; 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(InitialLoadObserver); 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if defined(OS_CHROMEOS) 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Watches for NetworkManager events. Because NetworkLibrary loads 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// asynchronously, this is used to make sure it is done before tests are run. 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NetworkManagerInitObserver 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : public chromeos::NetworkLibrary::NetworkManagerObserver { 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen explicit NetworkManagerInitObserver(AutomationProvider* automation); 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~NetworkManagerInitObserver(); 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool Init(); 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnNetworkManagerChanged(chromeos::NetworkLibrary* obj); 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(NetworkManagerInitObserver); 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif // defined(OS_CHROMEOS) 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Watches for NewTabUI page loads for performance timing purposes. 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NewTabUILoadObserver : public NotificationObserver { 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit NewTabUILoadObserver(AutomationProvider* automation); 12072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~NewTabUILoadObserver(); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 12872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(NewTabUILoadObserver); 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NavigationControllerRestoredObserver : public NotificationObserver { 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigationControllerRestoredObserver(AutomationProvider* automation, 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigationController* controller, 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 13872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~NavigationControllerRestoredObserver(); 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool FinishedRestoring(); 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SendDone(); 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 14972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigationController* controller_; 15172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(NavigationControllerRestoredObserver); 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NavigationNotificationObserver : public NotificationObserver { 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigationNotificationObserver(NavigationController* controller, 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* automation, 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message, 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int number_of_navigations, 162dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool include_current_navigation, 163dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool use_json_interface); 16472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~NavigationNotificationObserver(); 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ConditionMet(AutomationMsg_NavigationResponseValues navigation_result); 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 17472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 17572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigationController* controller_; 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int navigations_remaining_; 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool navigation_started_; 179dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool use_json_interface_; 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(NavigationNotificationObserver); 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabStripNotificationObserver : public NotificationObserver { 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabStripNotificationObserver(NotificationType notification, 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* automation); 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~TabStripNotificationObserver(); 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ObserveTab(NavigationController* controller) = 0; 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationType notification_; 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabAppendedNotificationObserver : public TabStripNotificationObserver { 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabAppendedNotificationObserver(Browser* parent, 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* automation, 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 20772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~TabAppendedNotificationObserver(); 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ObserveTab(NavigationController* controller); 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Browser* parent_; 21372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(TabAppendedNotificationObserver); 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabClosedNotificationObserver : public TabStripNotificationObserver { 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabClosedNotificationObserver(AutomationProvider* automation, 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool wait_until_closed, 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 22472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~TabClosedNotificationObserver(); 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ObserveTab(NavigationController* controller); 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_for_browser_command(bool for_browser_command); 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 23172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool for_browser_command_; 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(TabClosedNotificationObserver); 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Notifies when the tab count reaches the target number. 2393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass TabCountChangeObserver : public TabStripModelObserver { 2403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 2413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TabCountChangeObserver(AutomationProvider* automation, 2423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Browser* browser, 2433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IPC::Message* reply_message, 2443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int target_tab_count); 2453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Implementation of TabStripModelObserver. 246201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void TabInsertedAt(TabContentsWrapper* contents, 2473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int index, 2483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool foreground); 249201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void TabDetachedAt(TabContentsWrapper* contents, int index); 2503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void TabStripModelDeleted(); 2513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 25372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~TabCountChangeObserver(); 2543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Checks if the current tab count matches our target, and if so, 2563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // sends the reply message and deletes self. 2573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void CheckTabCount(); 2583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 25972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 26072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 2613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TabStripModel* tab_strip_model_; 2633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const int target_tab_count_; 2653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(TabCountChangeObserver); 2673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 2683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Observes when an extension has finished installing or possible install 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// errors. This does not guarantee that the extension is ready for use. 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionInstallNotificationObserver : public NotificationObserver { 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExtensionInstallNotificationObserver(AutomationProvider* automation, 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int id, 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 27672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~ExtensionInstallNotificationObserver(); 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Implementation of NotificationObserver. 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Send |response| back to the provider's client. 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SendResponse(AutomationMsg_ExtensionResponseValues response); 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 28872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int id_; 29072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(ExtensionInstallNotificationObserver); 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Observes when an extension has been uninstalled. 296ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ExtensionUninstallObserver : public NotificationObserver { 297ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 298ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExtensionUninstallObserver(AutomationProvider* automation, 299ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message, 300ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& id); 301ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~ExtensionUninstallObserver(); 302ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 303ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Implementation of NotificationObserver. 304ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Observe(NotificationType type, 305ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const NotificationSource& source, 306ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const NotificationDetails& details); 307ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 308ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 309ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NotificationRegistrar registrar_; 310ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 311ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 312ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string id_; 313ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 314ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(ExtensionUninstallObserver); 315ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 316ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Observes when an extension has finished loading and is ready for use. Also 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// checks for possible install errors. 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionReadyNotificationObserver : public NotificationObserver { 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExtensionReadyNotificationObserver(ExtensionProcessManager* manager, 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* automation, 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int id, 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 32572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~ExtensionReadyNotificationObserver(); 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Implementation of NotificationObserver. 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExtensionProcessManager* manager_; 33572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int id_; 33772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 338513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const Extension* extension_; 339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(ExtensionReadyNotificationObserver); 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionUnloadNotificationObserver : public NotificationObserver { 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExtensionUnloadNotificationObserver(); 34672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~ExtensionUnloadNotificationObserver(); 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Implementation of NotificationObserver. 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool did_receive_unload_notification() { 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return did_receive_unload_notification_; 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool did_receive_unload_notification_; 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(ExtensionUnloadNotificationObserver); 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 364ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Observes when the extensions have been fully updated. The ExtensionUpdater 365ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// service provides notifications for each extension that gets updated, but 366ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// it does not wait for the updated extensions to be installed or loaded. This 367ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// observer waits until all updated extensions have actually been loaded. 368ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ExtensionsUpdatedObserver : public NotificationObserver { 369ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 370ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExtensionsUpdatedObserver(ExtensionProcessManager* manager, 371ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationProvider* automation, 372ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message); 373ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~ExtensionsUpdatedObserver(); 374ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 375ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Implementation of NotificationObserver. 376ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Observe(NotificationType type, 377ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const NotificationSource& source, 378ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const NotificationDetails& details); 379ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 380ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 381ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NotificationRegistrar registrar_; 382ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExtensionProcessManager* manager_; 383ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 384ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 385ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::set<std::string> in_progress_updates_; 386ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool updater_finished_; 387ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 388ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(ExtensionsUpdatedObserver); 389ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 390ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionTestResultNotificationObserver : public NotificationObserver { 392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit ExtensionTestResultNotificationObserver( 394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* automation); 39572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~ExtensionTestResultNotificationObserver(); 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Implementation of NotificationObserver. 398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sends a test result back to the provider's client, if there is a pending 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // provider message and there is a result in the queue. 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void MaybeSendResult(); 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 40872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Two queues containing the test results. Although typically only 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // one result will be in each queue, there are cases where a queue is 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // needed. 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // For example, perhaps two events occur asynchronously and their 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // order of completion is not guaranteed. If the test wants to make sure 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // both finish before continuing, a queue is needed. The test would then 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // need to wait twice. 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::deque<bool> results_; 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::deque<std::string> messages_; 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(ExtensionTestResultNotificationObserver); 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 422ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Observes when a new browser has been opened and a tab within it has stopped 423ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// loading. 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BrowserOpenedNotificationObserver : public NotificationObserver { 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowserOpenedNotificationObserver(AutomationProvider* automation, 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 42872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~BrowserOpenedNotificationObserver(); 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_for_browser_command(bool for_browser_command); 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 43872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 43972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 440ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int new_window_id_; 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool for_browser_command_; 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(BrowserOpenedNotificationObserver); 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BrowserClosedNotificationObserver : public NotificationObserver { 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowserClosedNotificationObserver(Browser* browser, 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* automation, 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 45172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~BrowserClosedNotificationObserver(); 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_for_browser_command(bool for_browser_command); 458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 46172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 46272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool for_browser_command_; 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(BrowserClosedNotificationObserver); 466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BrowserCountChangeNotificationObserver : public NotificationObserver { 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BrowserCountChangeNotificationObserver(int target_count, 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* automation, 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 47372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~BrowserCountChangeNotificationObserver(); 474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int target_count_; 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 48272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 48372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(BrowserCountChangeNotificationObserver); 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AppModalDialogShownObserver : public NotificationObserver { 489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AppModalDialogShownObserver(AutomationProvider* automation, 491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 49272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~AppModalDialogShownObserver(); 493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 50072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 50172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(AppModalDialogShownObserver); 504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExecuteBrowserCommandObserver : public NotificationObserver { 507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 50872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~ExecuteBrowserCommandObserver(); 509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static bool CreateAndRegisterObserver(AutomationProvider* automation, 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Browser* browser, 512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int command, 513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExecuteBrowserCommandObserver(AutomationProvider* automation, 521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool Register(int command); 524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool GetNotificationType(int command, NotificationType::Type* type); 526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 52872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationType::Type notification_type_; 53072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(ExecuteBrowserCommandObserver); 533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass FindInPageNotificationObserver : public NotificationObserver { 536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageNotificationObserver(AutomationProvider* automation, 538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContents* parent_tab, 539731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool reply_with_json, 540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 54172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~FindInPageNotificationObserver(); 542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The Find mechanism is over asynchronous IPC, so a search is kicked off and 548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // we wait for notification to find out what the results are. As the user is 549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // typing, new search requests can be issued and the Request ID helps us make 550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // sense of whether this is the current request or an old one. The unit tests, 551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // however, which uses this constant issues only one search at a time, so we 552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // don't need a rolling id to identify each search. But, we still need to 553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // specify one, so we just use a fixed one - its value does not matter. 554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static const int kFindInPageRequestId; 555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 55872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We will at some point (before final update) be notified of the ordinal and 560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // we need to preserve it so we can send it later. 561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int active_match_ordinal_; 562731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Send reply using json automation interface. 563731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool reply_with_json_; 56472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(FindInPageNotificationObserver); 567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass DomOperationObserver : public NotificationObserver { 570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 5714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DomOperationObserver(); 57272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~DomOperationObserver(); 573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void OnDomOperationCompleted(const std::string& json) = 0; 5794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 5824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DISALLOW_COPY_AND_ASSIGN(DomOperationObserver); 5844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}; 5854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 586ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Sends a message back to the automation client with the results of the DOM 587ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// operation. 5884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass DomOperationMessageSender : public DomOperationObserver { 5894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public: 590ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen explicit DomOperationMessageSender(AutomationProvider* automation, 591ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* relpy_message, 592ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool use_json_interface); 59372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~DomOperationMessageSender(); 5944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void OnDomOperationCompleted(const std::string& json); 5964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private: 59872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 599ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 600ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool use_json_interface_; 601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DISALLOW_COPY_AND_ASSIGN(DomOperationMessageSender); 603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass DocumentPrintedNotificationObserver : public NotificationObserver { 606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DocumentPrintedNotificationObserver(AutomationProvider* automation, 608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 60972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~DocumentPrintedNotificationObserver(); 610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 611c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, const NotificationSource& source, 612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 61672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool success_; 61872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(DocumentPrintedNotificationObserver); 621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Collects METRIC_EVENT_DURATION notifications and keep track of the times. 624c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MetricEventDurationObserver : public NotificationObserver { 625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 626c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MetricEventDurationObserver(); 627731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual ~MetricEventDurationObserver(); 628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get the duration of an event. Returns -1 if we haven't seen the event. 630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int GetEventDurationMs(const std::string& event_name); 631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NotificationObserver interface. 633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, const NotificationSource& source, 634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 637c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 638c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef std::map<std::string, int> EventDurationMap; 640c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EventDurationMap durations_; 641c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 642c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(MetricEventDurationObserver); 643c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass PageTranslatedObserver : public NotificationObserver { 6463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 6473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick PageTranslatedObserver(AutomationProvider* automation, 6483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IPC::Message* reply_message, 6493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TabContents* tab_contents); 650731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual ~PageTranslatedObserver(); 6513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // NotificationObserver interface. 6533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void Observe(NotificationType type, 6543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const NotificationSource& source, 6553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const NotificationDetails& details); 6563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 6583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NotificationRegistrar registrar_; 65972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 66072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 6613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(PageTranslatedObserver); 6633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 6643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass TabLanguageDeterminedObserver : public NotificationObserver { 6663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 6673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TabLanguageDeterminedObserver(AutomationProvider* automation, 6683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IPC::Message* reply_message, 6693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TabContents* tab_contents, 6703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TranslateInfoBarDelegate* translate_bar); 67172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~TabLanguageDeterminedObserver(); 6723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // NotificationObserver interface. 6743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void Observe(NotificationType type, 6753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const NotificationSource& source, 6763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const NotificationDetails& details); 6773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 6793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NotificationRegistrar registrar_; 68072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 68172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 6823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TabContents* tab_contents_; 6833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TranslateInfoBarDelegate* translate_bar_; 6843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(TabLanguageDeterminedObserver); 6863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 6873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass InfoBarCountObserver : public NotificationObserver { 6893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 6903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick InfoBarCountObserver(AutomationProvider* automation, 6913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IPC::Message* reply_message, 6923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TabContents* tab_contents, 69372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen size_t target_count); 69472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~InfoBarCountObserver(); 6953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // NotificationObserver interface. 6973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void Observe(NotificationType type, 6983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const NotificationSource& source, 6993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const NotificationDetails& details); 7003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 7013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 7023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Checks whether the infobar count matches our target, and if so 7033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // sends the reply message and deletes itself. 7043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void CheckCount(); 7053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 7063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NotificationRegistrar registrar_; 70772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 70872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 7093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TabContents* tab_contents_; 7103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 71172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const size_t target_count_; 7123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 7133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(InfoBarCountObserver); 7143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 7153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_CHROMEOS) 71772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Collects LOGIN_USER_CHANGED notifications and returns 718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// whether authentication succeeded to the automation provider. 719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass LoginManagerObserver : public NotificationObserver { 720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LoginManagerObserver(AutomationProvider* automation, 722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 723ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~LoginManagerObserver(); 724c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 725c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NotificationObserver interface. 726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, const NotificationSource& source, 727c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 728c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 729c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 73172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 73272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 73372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 73472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DISALLOW_COPY_AND_ASSIGN(LoginManagerObserver); 73572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 73672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 73772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Collects SCREEN_LOCK_STATE_CHANGED notifications and returns 73872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// whether authentication succeeded to the automation provider. 73972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass ScreenLockUnlockObserver : public NotificationObserver { 74072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 74172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Set lock_screen to true to observe lock screen events, 74272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // false for unlock screen events. 74372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ScreenLockUnlockObserver(AutomationProvider* automation, 74472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC::Message* reply_message, 74572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool lock_screen); 746ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~ScreenLockUnlockObserver(); 74772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 74872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // NotificationObserver interface. 74972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Observe(NotificationType type, const NotificationSource& source, 75072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationDetails& details); 75172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 75272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen private: 75372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NotificationRegistrar registrar_; 754c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* automation_; 755c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message_; 75672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool lock_screen_; 757c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DISALLOW_COPY_AND_ASSIGN(ScreenLockUnlockObserver); 759c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 760ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 761ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NetworkScanObserver 762ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : public chromeos::NetworkLibrary::NetworkManagerObserver { 763ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 764ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkScanObserver(AutomationProvider* automation, 765ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message); 766ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 767ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~NetworkScanObserver(); 768ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 769ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // NetworkLibrary::NetworkManagerObserver implementation. 770ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnNetworkManagerChanged(chromeos::NetworkLibrary* obj); 771ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 772ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 773ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationProvider* automation_; 774ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message_; 775ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 776ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(NetworkScanObserver); 777ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 778ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 779ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Waits for a connection success or failure for the specified 780ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// network and returns the status to the automation provider. 781ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NetworkConnectObserver 782ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : public chromeos::NetworkLibrary::NetworkManagerObserver { 783ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 784ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkConnectObserver(AutomationProvider* automation, 785ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message); 786ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 787ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~NetworkConnectObserver(); 788ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 789ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual const chromeos::WifiNetwork* GetWifiNetwork( 790ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::NetworkLibrary* network_library) = 0; 791ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 792ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // NetworkLibrary::NetworkManagerObserver implementation. 793ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnNetworkManagerChanged(chromeos::NetworkLibrary* obj); 794ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 795ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 796ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationProvider* automation_; 797ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message_; 798ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 799ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(NetworkConnectObserver); 800ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 801ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 802ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Waits for a connection success or failure for the specified 803ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// network and returns the status to the automation provider. 804ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ServicePathConnectObserver : public NetworkConnectObserver { 805ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 806ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ServicePathConnectObserver(AutomationProvider* automation, 807ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message, 808ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& service_path); 809ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 810ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual const chromeos::WifiNetwork* GetWifiNetwork( 811ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::NetworkLibrary* network_library); 812ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 813ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 814ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string service_path_; 815ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 816ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(ServicePathConnectObserver); 817ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 818ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 819ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Waits for a connection success or failure for the specified 820ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// network and returns the status to the automation provider. 821ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass SSIDConnectObserver : public NetworkConnectObserver { 822ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 823ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SSIDConnectObserver(AutomationProvider* automation, 824ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message, 825ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& ssid); 826ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 827ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual const chromeos::WifiNetwork* GetWifiNetwork( 828ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::NetworkLibrary* network_library); 829ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 830ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 831ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string ssid_; 832ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 833ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(SSIDConnectObserver); 834ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 835ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif // defined(OS_CHROMEOS) 836c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 837c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Waits for the bookmark model to load. 838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutomationProviderBookmarkModelObserver : BookmarkModelObserver { 839c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 840c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProviderBookmarkModelObserver(AutomationProvider* provider, 841c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message, 842c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BookmarkModel* model); 843c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~AutomationProviderBookmarkModelObserver(); 844c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 84521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void Loaded(BookmarkModel* model); 84621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void BookmarkModelBeingDeleted(BookmarkModel* model); 847c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void BookmarkNodeMoved(BookmarkModel* model, 848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BookmarkNode* old_parent, 849c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int old_index, 850c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BookmarkNode* new_parent, 851c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int new_index) {} 852c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void BookmarkNodeAdded(BookmarkModel* model, 853c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BookmarkNode* parent, 854c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int index) {} 855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void BookmarkNodeRemoved(BookmarkModel* model, 856c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BookmarkNode* parent, 857c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int old_index, 858c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BookmarkNode* node) {} 859c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void BookmarkNodeChanged(BookmarkModel* model, 860c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BookmarkNode* node) {} 861ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void BookmarkNodeFaviconLoaded(BookmarkModel* model, 862c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BookmarkNode* node) {} 863c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void BookmarkNodeChildrenReordered(BookmarkModel* model, 864c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BookmarkNode* node) {} 865c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 866c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 867c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reply to the automation message with the given success value, 868c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // then delete myself (which removes myself from the bookmark model 869c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // observer list). 870c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ReplyAndDelete(bool success); 871c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_provider_; 87372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 874c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BookmarkModel* model_; 875c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 876c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(AutomationProviderBookmarkModelObserver); 877c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 878c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 879c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Allows the automation provider to wait for all downloads to finish. 880ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// If any download is interrupted, it will cancel all the other downloads at 881ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// the next |OnDownloadUpdated|, and send an error when all are done. 882c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutomationProviderDownloadItemObserver : public DownloadItem::Observer { 883c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 884c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProviderDownloadItemObserver( 885c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* provider, 886c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message, 88772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int downloads); 88872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~AutomationProviderDownloadItemObserver(); 889c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 89072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void OnDownloadUpdated(DownloadItem* download); 89172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void OnDownloadOpened(DownloadItem* download); 892c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 893c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 894ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void RemoveAndCleanupOnLastEntry(DownloadItem* download); 895ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 89672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> provider_; 89772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 898c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int downloads_; 899ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool interrupted_; 900c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 901c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(AutomationProviderDownloadItemObserver); 902c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 903c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Allows the automation provider to wait until the download has been updated 9053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// or opened. 9063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass AutomationProviderDownloadUpdatedObserver 9073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : public DownloadItem::Observer { 9083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 9093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AutomationProviderDownloadUpdatedObserver( 9103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AutomationProvider* provider, 9113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IPC::Message* reply_message, 91272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool wait_for_open); 91372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~AutomationProviderDownloadUpdatedObserver(); 9143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 9153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void OnDownloadUpdated(DownloadItem* download); 9163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void OnDownloadOpened(DownloadItem* download); 9173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 9183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 91972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> provider_; 92072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 9213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool wait_for_open_; 9223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 9233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(AutomationProviderDownloadUpdatedObserver); 9243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 9253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 9263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Allows the automation provider to wait until the download model has changed 9273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// (because a new download has been added or removed). 9283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass AutomationProviderDownloadModelChangedObserver 9293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : public DownloadManager::Observer { 9303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 9313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AutomationProviderDownloadModelChangedObserver( 9323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AutomationProvider* provider, 9333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IPC::Message* reply_message, 93472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DownloadManager* download_manager); 93572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~AutomationProviderDownloadModelChangedObserver(); 9363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 9373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void ModelChanged(); 9383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 9393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 94072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> provider_; 94172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 9423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DownloadManager* download_manager_; 9433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 9443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(AutomationProviderDownloadModelChangedObserver); 9453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 9463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 9473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Allows automation provider to wait until TemplateURLModel has loaded 9483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// before looking up/returning search engine info. 9493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass AutomationProviderSearchEngineObserver 9503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : public TemplateURLModelObserver { 9513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 9523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AutomationProviderSearchEngineObserver( 953731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AutomationProvider* provider, 95472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC::Message* reply_message); 95572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~AutomationProviderSearchEngineObserver(); 9563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 95721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void OnTemplateURLModelChanged(); 9583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 9593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 96072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> provider_; 96172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 9623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 9633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(AutomationProviderSearchEngineObserver); 9643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 9653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 966c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Allows the automation provider to wait for history queries to finish. 967c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutomationProviderHistoryObserver { 968c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 969c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProviderHistoryObserver( 970c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* provider, 97172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC::Message* reply_message); 97272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~AutomationProviderHistoryObserver(); 97372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 974c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void HistoryQueryComplete(HistoryService::Handle request_handle, 975c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::QueryResults* results); 976c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 977c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 97872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> provider_; 97972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 980c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 981c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 982c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Allows the automation provider to wait for import queries to finish. 983c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutomationProviderImportSettingsObserver 984ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : public importer::ImporterProgressObserver { 985c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 986c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProviderImportSettingsObserver( 987c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* provider, 98872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC::Message* reply_message); 98972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~AutomationProviderImportSettingsObserver(); 99072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 991ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // importer::ImporterProgressObserver: 992ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportStarted() OVERRIDE; 993ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportItemStarted(importer::ImportItem item) OVERRIDE; 994ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportItemEnded(importer::ImportItem item) OVERRIDE; 995ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportEnded() OVERRIDE; 996ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 997c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 99872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> provider_; 99972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 1000c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 1001c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1002c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Allows automation provider to wait for getting passwords to finish. 1003ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass AutomationProviderGetPasswordsObserver : public PasswordStoreConsumer { 1004c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 1005c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProviderGetPasswordsObserver( 1006c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* provider, 100772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC::Message* reply_message); 100872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~AutomationProviderGetPasswordsObserver(); 1009c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 101021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void OnPasswordStoreRequestDone( 1011ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CancelableRequestProvider::Handle handle, 1012ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<webkit_glue::PasswordForm*>& result); 1013c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1014c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 101572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> provider_; 101672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 1017c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 1018c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1019c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Allows the automation provider to wait for clearing browser data to finish. 1020c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutomationProviderBrowsingDataObserver 1021c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : public BrowsingDataRemover::Observer { 1022c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 1023c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProviderBrowsingDataObserver( 1024c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* provider, 102572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC::Message* reply_message); 102672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~AutomationProviderBrowsingDataObserver(); 102772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 102821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void OnBrowsingDataRemoverDone(); 1029c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1030c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 103172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> provider_; 103272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 1033c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 1034c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1035c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Allows automation provider to wait until page load after selecting an item 1036c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// in the omnibox popup. 1037c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass OmniboxAcceptNotificationObserver : public NotificationObserver { 1038c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 1039c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OmniboxAcceptNotificationObserver(NavigationController* controller, 1040c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* automation, 1041c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 104272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~OmniboxAcceptNotificationObserver(); 1043c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1044c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 1045c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 1046c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 1047c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1048c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 1049c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 105072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 105172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 1052c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigationController* controller_; 1053c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1054c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(OmniboxAcceptNotificationObserver); 1055c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 1056c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1057c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Allows the automation provider to wait for a save package notification. 1058c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SavePackageNotificationObserver : public NotificationObserver { 1059c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 1060c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SavePackageNotificationObserver(SavePackage* save_package, 1061c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutomationProvider* automation, 1062c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_message); 106372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~SavePackageNotificationObserver(); 1064c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1065c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 1066c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 1067c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 1068c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1069c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 1070c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 107172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 107272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 1073c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1074c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(SavePackageNotificationObserver); 1075c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 1076c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 10774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// This class manages taking a snapshot of a page. This requires waiting on 10784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// asynchronous callbacks and notifications. 10794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass PageSnapshotTaker : public DomOperationObserver { 10804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public: 10814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch PageSnapshotTaker(AutomationProvider* automation, 10824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch IPC::Message* reply_message, 10834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch RenderViewHost* render_view, 10844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const FilePath& path); 108572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~PageSnapshotTaker(); 10864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 10874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Start the process of taking a snapshot of the entire page. 10884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void Start(); 10894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 10904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private: 10914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Overriden from DomOperationObserver. 10924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void OnDomOperationCompleted(const std::string& json); 10934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 10944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Called by the ThumbnailGenerator when the requested snapshot has been 10954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // generated. 10964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void OnSnapshotTaken(const SkBitmap& bitmap); 10974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 10984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Helper method to send arbitrary javascript to the renderer for evaluation. 10994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void ExecuteScript(const std::wstring& javascript); 11004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 11014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Helper method to send a response back to the client. Deletes this. 11024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void SendMessage(bool success); 11034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 110472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 110572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 11064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch RenderViewHost* render_view_; 11074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FilePath image_path_; 11084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool received_width_; 11094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch gfx::Size entire_page_size_; 11104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 11114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DISALLOW_COPY_AND_ASSIGN(PageSnapshotTaker); 11124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}; 11134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1114201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass NTPInfoObserver : public NotificationObserver { 1115201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public: 1116201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch NTPInfoObserver(AutomationProvider* automation, 1117201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch IPC::Message* reply_message, 1118201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch CancelableRequestConsumer* consumer); 111921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~NTPInfoObserver(); 1120201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 1121201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void Observe(NotificationType type, 1122201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const NotificationSource& source, 1123201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const NotificationDetails& details); 1124201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 1125201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private: 1126201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void OnTopSitesLoaded(); 1127201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void OnTopSitesReceived(const history::MostVisitedURLList& visited_list); 1128201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 112972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 113072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 1131201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch CancelableRequestConsumer* consumer_; 1132201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch CancelableRequestProvider::Handle request_; 1133201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch scoped_ptr<DictionaryValue> ntp_info_; 1134201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch history::TopSites* top_sites_; 1135201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch NotificationRegistrar registrar_; 1136201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 1137201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch DISALLOW_COPY_AND_ASSIGN(NTPInfoObserver); 1138201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 1139201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 1140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Observes when an app has been launched, as indicated by a notification that 1141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// a content load in some tab has stopped. 1142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass AppLaunchObserver : public NotificationObserver { 1143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 1144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AppLaunchObserver(NavigationController* controller, 1145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationProvider* automation, 1146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message, 1147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_misc::LaunchContainer launch_container); 1148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~AppLaunchObserver(); 1149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Observe(NotificationType type, 1151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const NotificationSource& source, 1152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const NotificationDetails& details); 1153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 1155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NavigationController* controller_; 1156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 1157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 1158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NotificationRegistrar registrar_; 1159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_misc::LaunchContainer launch_container_; 1160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int new_window_id_; 1161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(AppLaunchObserver); 1163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 1164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 11653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Allows automation provider to wait until the autocomplete edit 11663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// has received focus 11673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass AutocompleteEditFocusedObserver : public NotificationObserver { 1168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 11693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AutocompleteEditFocusedObserver(AutomationProvider* automation, 11703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AutocompleteEditModel* autocomplete_edit, 11713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IPC::Message* reply_message); 117272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~AutocompleteEditFocusedObserver(); 1173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 1175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 1176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 1177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 1179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 118072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 118172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 11823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AutocompleteEditModel* autocomplete_edit_model_; 1183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(AutocompleteEditFocusedObserver); 1185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 1186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 118721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Allows the automation provider to wait until all the notification 118821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// processes are ready. 118921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass GetActiveNotificationsObserver : public NotificationObserver { 119021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public: 119121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen GetActiveNotificationsObserver(AutomationProvider* automation, 119221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen IPC::Message* reply_message); 119372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~GetActiveNotificationsObserver(); 119421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 119521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void Observe(NotificationType type, 119621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const NotificationSource& source, 119721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const NotificationDetails& details); 119821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 119921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen private: 120021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen void SendMessage(); 120121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 120221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen AutomationJSONReply reply_; 120321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen NotificationRegistrar registrar_; 120421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 120521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DISALLOW_COPY_AND_ASSIGN(GetActiveNotificationsObserver); 120621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}; 120721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 1208513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Allows the automation provider to wait for a given number of 1209513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// notification balloons. 1210513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass OnNotificationBalloonCountObserver { 1211513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public: 1212513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch OnNotificationBalloonCountObserver(AutomationProvider* provider, 1213513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch IPC::Message* reply_message, 1214513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch BalloonCollection* collection, 1215513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int count); 1216513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1217513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void OnBalloonCollectionChanged(); 1218513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1219513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch private: 1220513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AutomationJSONReply reply_; 1221513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch BalloonCollection* collection_; 1222513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int count_; 1223513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1224513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DISALLOW_COPY_AND_ASSIGN(OnNotificationBalloonCountObserver); 1225513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}; 1226513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 122721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Allows the automation provider to wait for a RENDERER_PROCESS_CLOSED 122821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// notification. 122921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass RendererProcessClosedObserver : public NotificationObserver { 123021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public: 123121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen RendererProcessClosedObserver(AutomationProvider* automation, 123221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen IPC::Message* reply_message); 123372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~RendererProcessClosedObserver(); 123421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 123521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void Observe(NotificationType type, 123621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const NotificationSource& source, 123721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const NotificationDetails& details); 123821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 123921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen private: 124021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen NotificationRegistrar registrar_; 124172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 124272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 124321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 124421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DISALLOW_COPY_AND_ASSIGN(RendererProcessClosedObserver); 124521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}; 124621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 124772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Allows the automation provider to wait for acknowledgement that a input 124872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// event has been handled. 124972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass InputEventAckNotificationObserver : public NotificationObserver { 125072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 125172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen InputEventAckNotificationObserver(AutomationProvider* automation, 125272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC::Message* reply_message, 125372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int event_type); 125472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~InputEventAckNotificationObserver(); 125572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 125672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Observe(NotificationType type, 125772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationSource& source, 125872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationDetails& details); 125972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 126072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen private: 126172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NotificationRegistrar registrar_; 126272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 126372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 126472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int event_type_; 126572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 126672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DISALLOW_COPY_AND_ASSIGN(InputEventAckNotificationObserver); 126772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 126872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Allows the automation provider to wait for all the tabs to finish any 1270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// pending loads. This only waits for tabs that exist at the observer's 1271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// creation. Will send a message on construction if no tabs are loading 1272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// currently. 1273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass AllTabsStoppedLoadingObserver : public TabEventObserver { 1274dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public: 1275dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AllTabsStoppedLoadingObserver(AutomationProvider* automation, 1276dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC::Message* reply_message); 1277dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual ~AllTabsStoppedLoadingObserver(); 1278dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 1279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TabEventObserver implementation. 1280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnFirstPendingLoad(TabContents* tab_contents); 1281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnNoMorePendingLoads(TabContents* tab_contents); 1282dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 1283dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private: 1284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen typedef std::set<TabContents*> TabSet; 1285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Checks if there are no pending loads. If none, it will send an automation 1287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // relpy and delete itself. 1288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void CheckIfNoMorePendingLoads(); 1289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabSet pending_tabs_; 1291dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NotificationRegistrar registrar_; 1292dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::WeakPtr<AutomationProvider> automation_; 1293dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_ptr<IPC::Message> reply_message_; 1294dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 1295dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DISALLOW_COPY_AND_ASSIGN(AllTabsStoppedLoadingObserver); 1296dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 1297dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 129872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Observer used to listen for new tab creation to complete. 129972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass NewTabObserver : public NotificationObserver { 130072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 130172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NewTabObserver(AutomationProvider* automation, IPC::Message* reply_message); 130272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 130372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Observe(NotificationType type, 130472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationSource& source, 130572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationDetails& details) OVERRIDE; 130672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 130772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen private: 130872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~NewTabObserver(); 130972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 131072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NotificationRegistrar registrar_; 131172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 131272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 131372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 131472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DISALLOW_COPY_AND_ASSIGN(NewTabObserver); 131572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 131672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 131772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Posts a task to the PROCESS_LAUNCHER thread, once processed posts a task 131872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// back to the UI thread that notifies the provider we're done. 131972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass WaitForProcessLauncherThreadToGoIdleObserver 132072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : public base::RefCountedThreadSafe< 132172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WaitForProcessLauncherThreadToGoIdleObserver, 132272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen BrowserThread::DeleteOnUIThread> { 132372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 132472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WaitForProcessLauncherThreadToGoIdleObserver( 132572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen AutomationProvider* automation, IPC::Message* reply_message); 132672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 132772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen private: 1328dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>; 132972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen friend class DeleteTask<WaitForProcessLauncherThreadToGoIdleObserver>; 133072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 133172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~WaitForProcessLauncherThreadToGoIdleObserver(); 133272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1333dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Schedules a task on the PROCESS_LAUNCHER thread to execute 1334dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // |RunOnProcessLauncherThread2|. By the time the task is executed the 1335dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // PROCESS_LAUNCHER thread should be some what idle. 133672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void RunOnProcessLauncherThread(); 1337dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 1338dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // When executed the PROCESS_LAUNCHER thread should have processed any pending 1339dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // tasks. Schedules a task on the UI thread that sends the message saying 1340dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // we're done. 1341dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void RunOnProcessLauncherThread2(); 1342dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 1343dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Sends the |reply_message_| to |automation_| indicating we're done. 134472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void RunOnUIThread(); 134572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 134672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::WeakPtr<AutomationProvider> automation_; 134772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<IPC::Message> reply_message_; 134872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 134972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DISALLOW_COPY_AND_ASSIGN(WaitForProcessLauncherThreadToGoIdleObserver); 135072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 1351513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_AUTOMATION_AUTOMATION_PROVIDER_OBSERVERS_H_ 1353