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

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

Issue 10855253: Convert the autofill pyauto tests to browser tests, and remove all the supporting automation hooks … (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: review comments Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/automation/automation_provider_observers.h" 5 #include "chrome/browser/automation/automation_provider_observers.h"
6 6
7 #include <deque> 7 #include <deque>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 2224 matching lines...) Expand 10 before | Expand all | Expand 10 after
2235 } 2235 }
2236 } 2236 }
2237 } else if (type == chrome::NOTIFICATION_BROWSER_WINDOW_READY) { 2237 } else if (type == chrome::NOTIFICATION_BROWSER_WINDOW_READY) {
2238 new_window_id_ = ExtensionTabUtil::GetWindowId( 2238 new_window_id_ = ExtensionTabUtil::GetWindowId(
2239 content::Source<Browser>(source).ptr()); 2239 content::Source<Browser>(source).ptr());
2240 } else { 2240 } else {
2241 NOTREACHED(); 2241 NOTREACHED();
2242 } 2242 }
2243 } 2243 }
2244 2244
2245 AutofillDisplayedObserver::AutofillDisplayedObserver(
2246 int notification,
2247 RenderViewHost* render_view_host,
2248 AutomationProvider* automation,
2249 IPC::Message* reply_message)
2250 : notification_(notification),
2251 render_view_host_(render_view_host),
2252 automation_(automation->AsWeakPtr()),
2253 reply_message_(reply_message) {
2254 content::Source<RenderViewHost> source(render_view_host_);
2255 registrar_.Add(this, notification_, source);
2256 }
2257
2258 AutofillDisplayedObserver::~AutofillDisplayedObserver() {}
2259
2260 void AutofillDisplayedObserver::Observe(
2261 int type,
2262 const content::NotificationSource& source,
2263 const content::NotificationDetails& details) {
2264 DCHECK_EQ(type, notification_);
2265 DCHECK_EQ(content::Source<RenderViewHost>(source).ptr(), render_view_host_);
2266 if (automation_) {
2267 AutomationJSONReply(automation_,
2268 reply_message_.release()).SendSuccess(NULL);
2269 }
2270 delete this;
2271 }
2272
2273 AutofillChangedObserver::AutofillChangedObserver(
2274 AutomationProvider* automation,
2275 IPC::Message* reply_message,
2276 int num_profiles,
2277 int num_credit_cards)
2278 : automation_(automation->AsWeakPtr()),
2279 reply_message_(reply_message),
2280 num_profiles_(num_profiles),
2281 num_credit_cards_(num_credit_cards),
2282 done_event_(false, false) {
2283 DCHECK(num_profiles_ >= 0 && num_credit_cards_ >= 0);
2284 AddRef();
2285 }
2286
2287 AutofillChangedObserver::~AutofillChangedObserver() {
2288 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2289 }
2290
2291 void AutofillChangedObserver::Init() {
2292 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2293 BrowserThread::PostTask(
2294 BrowserThread::DB,
2295 FROM_HERE,
2296 base::Bind(&AutofillChangedObserver::RegisterObserversTask, this));
2297 done_event_.Wait();
2298 }
2299
2300 void AutofillChangedObserver::RegisterObserversTask() {
2301 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
2302 registrar_.reset(new content::NotificationRegistrar);
2303 registrar_->Add(this, chrome::NOTIFICATION_AUTOFILL_CREDIT_CARD_CHANGED,
2304 content::NotificationService::AllSources());
2305 registrar_->Add(this, chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
2306 content::NotificationService::AllSources());
2307 done_event_.Signal();
2308 }
2309
2310 void AutofillChangedObserver::Observe(
2311 int type,
2312 const content::NotificationSource& source,
2313 const content::NotificationDetails& details) {
2314 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
2315
2316 if (type == chrome::NOTIFICATION_AUTOFILL_CREDIT_CARD_CHANGED) {
2317 num_credit_cards_--;
2318 } else if (type == chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED) {
2319 num_profiles_--;
2320 } else {
2321 NOTREACHED();
2322 }
2323
2324 if (num_profiles_ <= 0 && num_credit_cards_ <= 0) {
2325 registrar_.reset(); // Must be done from the DB thread.
2326
2327 // Notify the UI thread that we're done listening for all relevant
2328 // autofill notifications.
2329 BrowserThread::PostTask(
2330 BrowserThread::UI,
2331 FROM_HERE,
2332 base::Bind(&AutofillChangedObserver::IndicateDone, this));
2333 }
2334 }
2335
2336 void AutofillChangedObserver::IndicateDone() {
2337 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2338 if (automation_) {
2339 AutomationJSONReply(automation_,
2340 reply_message_.release()).SendSuccess(NULL);
2341 }
2342 Release();
2343 }
2344
2345 AutofillFormSubmittedObserver::AutofillFormSubmittedObserver(
2346 AutomationProvider* automation,
2347 IPC::Message* reply_message,
2348 PersonalDataManager* pdm)
2349 : automation_(automation->AsWeakPtr()),
2350 reply_message_(reply_message),
2351 pdm_(pdm),
2352 infobar_helper_(NULL) {
2353 pdm_->SetObserver(this);
2354 registrar_.Add(this, chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED,
2355 content::NotificationService::AllSources());
2356 }
2357
2358 AutofillFormSubmittedObserver::~AutofillFormSubmittedObserver() {
2359 pdm_->RemoveObserver(this);
2360
2361 if (infobar_helper_) {
2362 InfoBarDelegate* infobar = NULL;
2363 if (infobar_helper_->GetInfoBarCount() > 0 &&
2364 (infobar = infobar_helper_->GetInfoBarDelegateAt(0))) {
2365 infobar_helper_->RemoveInfoBar(infobar);
2366 }
2367 }
2368 }
2369
2370 void AutofillFormSubmittedObserver::OnPersonalDataChanged() {
2371 if (automation_) {
2372 AutomationJSONReply(automation_,
2373 reply_message_.release()).SendSuccess(NULL);
2374 }
2375 delete this;
2376 }
2377
2378 void AutofillFormSubmittedObserver::OnInsufficientFormData() {
2379 if (automation_) {
2380 AutomationJSONReply(automation_,
2381 reply_message_.release()).SendSuccess(NULL);
2382 }
2383 delete this;
2384 }
2385
2386 void AutofillFormSubmittedObserver::Observe(
2387 int type,
2388 const content::NotificationSource& source,
2389 const content::NotificationDetails& details) {
2390 DCHECK(type == chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED);
2391
2392 // Accept in the infobar.
2393 infobar_helper_ = content::Source<InfoBarTabHelper>(source).ptr();
2394 InfoBarDelegate* infobar = NULL;
2395 infobar = infobar_helper_->GetInfoBarDelegateAt(0);
2396
2397 ConfirmInfoBarDelegate* confirm_infobar = infobar->AsConfirmInfoBarDelegate();
2398 if (!confirm_infobar) {
2399 if (automation_) {
2400 AutomationJSONReply(
2401 automation_, reply_message_.release()).SendError(
2402 "Infobar is not a confirm infobar.");
2403 }
2404 delete this;
2405 return;
2406 }
2407
2408 if (!confirm_infobar->Accept()) {
2409 if (automation_) {
2410 AutomationJSONReply(
2411 automation_, reply_message_.release()).SendError(
2412 "Could not accept in the infobar.");
2413 }
2414 delete this;
2415 return;
2416 }
2417 }
2418
2419 namespace { 2245 namespace {
2420 2246
2421 // Returns whether all active notifications have an associated process ID. 2247 // Returns whether all active notifications have an associated process ID.
2422 bool AreActiveNotificationProcessesReady() { 2248 bool AreActiveNotificationProcessesReady() {
2423 NotificationUIManager* manager = g_browser_process->notification_ui_manager(); 2249 NotificationUIManager* manager = g_browser_process->notification_ui_manager();
2424 const BalloonCollection::Balloons& balloons = 2250 const BalloonCollection::Balloons& balloons =
2425 manager->balloon_collection()->GetActiveBalloons(); 2251 manager->balloon_collection()->GetActiveBalloons();
2426 BalloonCollection::Balloons::const_iterator iter; 2252 BalloonCollection::Balloons::const_iterator iter;
2427 for (iter = balloons.begin(); iter != balloons.end(); ++iter) { 2253 for (iter = balloons.begin(); iter != balloons.end(); ++iter) {
2428 BalloonHost* balloon_host = (*iter)->balloon_view()->GetHost(); 2254 BalloonHost* balloon_host = (*iter)->balloon_view()->GetHost();
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
3169 if (automation_) { 2995 if (automation_) {
3170 AutomationJSONReply(automation_, reply_message_.release()) 2996 AutomationJSONReply(automation_, reply_message_.release())
3171 .SendSuccess(NULL); 2997 .SendSuccess(NULL);
3172 } 2998 }
3173 delete this; 2999 delete this;
3174 } 3000 }
3175 } else { 3001 } else {
3176 NOTREACHED(); 3002 NOTREACHED();
3177 } 3003 }
3178 } 3004 }
OLDNEW
« no previous file with comments | « chrome/browser/automation/automation_provider_observers.h ('k') | chrome/browser/automation/testing_automation_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698