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

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

Issue 8649004: Allow chromedriver to install an extension and get all installed extension IDs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ... Created 9 years, 1 month 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 } 567 }
568 } 568 }
569 569
570 ExtensionReadyNotificationObserver::ExtensionReadyNotificationObserver( 570 ExtensionReadyNotificationObserver::ExtensionReadyNotificationObserver(
571 ExtensionProcessManager* manager, ExtensionService* service, 571 ExtensionProcessManager* manager, ExtensionService* service,
572 AutomationProvider* automation, int id, IPC::Message* reply_message) 572 AutomationProvider* automation, int id, IPC::Message* reply_message)
573 : manager_(manager), 573 : manager_(manager),
574 service_(service), 574 service_(service),
575 automation_(automation->AsWeakPtr()), 575 automation_(automation->AsWeakPtr()),
576 id_(id), 576 id_(id),
577 use_json_(false),
577 reply_message_(reply_message), 578 reply_message_(reply_message),
578 extension_(NULL) { 579 extension_(NULL) {
580 Init();
581 }
582
583 ExtensionReadyNotificationObserver::ExtensionReadyNotificationObserver(
584 ExtensionProcessManager* manager, ExtensionService* service,
585 AutomationProvider* automation, IPC::Message* reply_message)
586 : manager_(manager),
587 service_(service),
588 automation_(automation->AsWeakPtr()),
589 use_json_(true),
590 reply_message_(reply_message),
591 extension_(NULL) {
592 Init();
593 }
594
595 ExtensionReadyNotificationObserver::~ExtensionReadyNotificationObserver() {
596 }
597
598 void ExtensionReadyNotificationObserver::Init() {
579 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING, 599 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING,
580 content::NotificationService::AllSources()); 600 content::NotificationService::AllSources());
581 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, 601 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
582 content::NotificationService::AllSources()); 602 content::NotificationService::AllSources());
583 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOAD_ERROR, 603 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOAD_ERROR,
584 content::NotificationService::AllSources()); 604 content::NotificationService::AllSources());
585 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR, 605 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR,
586 content::NotificationService::AllSources()); 606 content::NotificationService::AllSources());
587 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED, 607 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED,
588 content::NotificationService::AllSources()); 608 content::NotificationService::AllSources());
589 } 609 }
590 610
591 ExtensionReadyNotificationObserver::~ExtensionReadyNotificationObserver() {
592 }
593
594 void ExtensionReadyNotificationObserver::Observe( 611 void ExtensionReadyNotificationObserver::Observe(
595 int type, const content::NotificationSource& source, 612 int type, const content::NotificationSource& source,
596 const content::NotificationDetails& details) { 613 const content::NotificationDetails& details) {
597 if (!automation_) { 614 if (!automation_) {
598 delete this; 615 delete this;
599 return; 616 return;
600 } 617 }
601 618
602 switch (type) { 619 switch (type) {
603 case chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING: 620 case chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING:
604 // Only continue on with this method if our extension has been loaded 621 // Only continue on with this method if our extension has been loaded
605 // and all the extension hosts have stopped loading. 622 // and all the extension hosts have stopped loading.
606 if (!extension_ || !DidExtensionHostsStopLoading(manager_)) 623 if (!extension_ || !DidExtensionHostsStopLoading(manager_))
607 return; 624 return;
608 break; 625 break;
609 case chrome::NOTIFICATION_EXTENSION_LOADED: 626 case chrome::NOTIFICATION_EXTENSION_LOADED: {
dennis_jeffrey 2011/11/22 23:32:16 Is there a reason this block is enclosed in braces
kkania 2011/11/23 17:31:23 I need the brace because I am defining a new var i
610 extension_ = content::Details<const Extension>(details).ptr(); 627 const Extension* loaded_extension =
628 content::Details<const Extension>(details).ptr();
629 // Only track internal extension loads.
630 if (loaded_extension->location() != Extension::INTERNAL)
631 return;
632 extension_ = loaded_extension;
611 if (!DidExtensionHostsStopLoading(manager_)) 633 if (!DidExtensionHostsStopLoading(manager_))
612 return; 634 return;
613 // For some reason, the background ExtensionHost is not yet 635 // For some reason, the background ExtensionHost is not yet
614 // created at this point so just checking whether all ExtensionHosts 636 // created at this point so just checking whether all ExtensionHosts
615 // are loaded is not sufficient. If background page is not ready, 637 // are loaded is not sufficient. If background page is not ready,
616 // we wait for NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING. 638 // we wait for NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING.
617 if (!service_->IsBackgroundPageReady(extension_)) 639 if (!service_->IsBackgroundPageReady(extension_))
618 return; 640 return;
619 break; 641 break;
642 }
620 case chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR: 643 case chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR:
621 case chrome::NOTIFICATION_EXTENSION_LOAD_ERROR: 644 case chrome::NOTIFICATION_EXTENSION_LOAD_ERROR:
622 case chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED: 645 case chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED:
623 break; 646 break;
624 default: 647 default:
625 NOTREACHED(); 648 NOTREACHED();
626 break; 649 break;
627 } 650 }
628 651
629 if (id_ == AutomationMsg_InstallExtension::ID) { 652 if (use_json_) {
630 // A handle of zero indicates an error. 653 DictionaryValue* dict = new DictionaryValue();
631 int extension_handle = 0; 654 dict->SetString("id", extension_->id());
632 if (extension_) 655 AutomationJSONReply(automation_, reply_message_.release())
633 extension_handle = automation_->AddExtension(extension_); 656 .SendSuccess(dict);
634 AutomationMsg_InstallExtension::WriteReplyParams(
635 reply_message_.get(), extension_handle);
636 } else if (id_ == AutomationMsg_EnableExtension::ID) {
637 AutomationMsg_EnableExtension::WriteReplyParams(reply_message_.get(), true);
638 } else { 657 } else {
639 NOTREACHED(); 658 if (id_ == AutomationMsg_InstallExtension::ID) {
640 LOG(ERROR) << "Cannot write reply params for unknown message id."; 659 // A handle of zero indicates an error.
660 int extension_handle = 0;
661 if (extension_)
662 extension_handle = automation_->AddExtension(extension_);
663 AutomationMsg_InstallExtension::WriteReplyParams(
664 reply_message_.get(), extension_handle);
665 } else if (id_ == AutomationMsg_EnableExtension::ID) {
666 AutomationMsg_EnableExtension::WriteReplyParams(
667 reply_message_.get(), true);
668 } else {
669 LOG(ERROR) << "Cannot write reply params for unknown message id.";
670 }
671 automation_->Send(reply_message_.release());
641 } 672 }
642
643 automation_->Send(reply_message_.release());
644 delete this; 673 delete this;
645 } 674 }
646 675
647 ExtensionUnloadNotificationObserver::ExtensionUnloadNotificationObserver() 676 ExtensionUnloadNotificationObserver::ExtensionUnloadNotificationObserver()
648 : did_receive_unload_notification_(false) { 677 : did_receive_unload_notification_(false) {
649 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, 678 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
650 content::NotificationService::AllSources()); 679 content::NotificationService::AllSources());
651 } 680 }
652 681
653 ExtensionUnloadNotificationObserver::~ExtensionUnloadNotificationObserver() { 682 ExtensionUnloadNotificationObserver::~ExtensionUnloadNotificationObserver() {
(...skipping 2271 matching lines...) Expand 10 before | Expand all | Expand 10 after
2925 if (automation_) { 2954 if (automation_) {
2926 AutomationJSONReply(automation_, reply_message_.release()) 2955 AutomationJSONReply(automation_, reply_message_.release())
2927 .SendSuccess(NULL); 2956 .SendSuccess(NULL);
2928 } 2957 }
2929 delete this; 2958 delete this;
2930 } 2959 }
2931 } else { 2960 } else {
2932 NOTREACHED(); 2961 NOTREACHED();
2933 } 2962 }
2934 } 2963 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698