diff options
Diffstat (limited to 'chrome/browser/automation')
-rw-r--r-- | chrome/browser/automation/automation_provider_observers.cc | 24 | ||||
-rw-r--r-- | chrome/browser/automation/automation_provider_observers.h | 2 |
2 files changed, 25 insertions, 1 deletions
diff --git a/chrome/browser/automation/automation_provider_observers.cc b/chrome/browser/automation/automation_provider_observers.cc index c9be799..aff40eb3 100644 --- a/chrome/browser/automation/automation_provider_observers.cc +++ b/chrome/browser/automation/automation_provider_observers.cc @@ -27,6 +27,7 @@ #include "chrome/browser/automation/automation_provider_json.h" #include "chrome/browser/bookmarks/bookmark_model.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/content_settings/tab_specific_content_settings.h" #include "chrome/browser/dom_operation_notification_details.h" #include "chrome/browser/extensions/crx_installer.h" #include "chrome/browser/extensions/extension_host.h" @@ -69,6 +70,7 @@ #include "chrome/browser/ui/webui/ntp/recently_closed_tabs_handler.h" #include "chrome/common/automation_messages.h" #include "chrome/common/chrome_notification_types.h" +#include "chrome/common/content_settings_types.h" #include "chrome/common/extensions/extension.h" #include "content/browser/download/save_package.h" #include "content/browser/renderer_host/render_process_host.h" @@ -1164,6 +1166,8 @@ DomOperationObserver::DomOperationObserver() { content::NotificationService::AllSources()); registrar_.Add(this, chrome::NOTIFICATION_APP_MODAL_DIALOG_SHOWN, content::NotificationService::AllSources()); + registrar_.Add(this, chrome::NOTIFICATION_TAB_CONTENT_SETTINGS_CHANGED, + content::NotificationService::AllSources()); } DomOperationObserver::~DomOperationObserver() {} @@ -1176,6 +1180,17 @@ void DomOperationObserver::Observe( OnDomOperationCompleted(dom_op_details->json()); } else if (type == chrome::NOTIFICATION_APP_MODAL_DIALOG_SHOWN) { OnModalDialogShown(); + } else if (type == chrome::NOTIFICATION_TAB_CONTENT_SETTINGS_CHANGED) { + TabContents* tab_contents = content::Source<TabContents>(source).ptr(); + if (tab_contents) { + TabContentsWrapper* wrapper = + TabContentsWrapper::GetCurrentWrapperForContents(tab_contents); + if (wrapper && + wrapper->content_settings()->IsContentBlocked( + CONTENT_SETTINGS_TYPE_JAVASCRIPT)) { + OnJavascriptBlocked(); + } + } } } @@ -1215,6 +1230,14 @@ void DomOperationMessageSender::OnModalDialogShown() { } } +void DomOperationMessageSender::OnJavascriptBlocked() { + if (automation_ && use_json_interface_) { + AutomationJSONReply(automation_, reply_message_.release()) + .SendError("Javascript execution was blocked"); + delete this; + } +} + DocumentPrintedNotificationObserver::DocumentPrintedNotificationObserver( AutomationProvider* automation, IPC::Message* reply_message) : automation_(automation->AsWeakPtr()), @@ -1934,7 +1957,6 @@ void PageSnapshotTaker::Observe(int type, SendMessage(false, "a modal dialog is active"); } - void PageSnapshotTaker::SendMessage(bool success, const std::string& error_msg) { if (automation_) { diff --git a/chrome/browser/automation/automation_provider_observers.h b/chrome/browser/automation/automation_provider_observers.h index 6a42122..e342029 100644 --- a/chrome/browser/automation/automation_provider_observers.h +++ b/chrome/browser/automation/automation_provider_observers.h @@ -601,6 +601,7 @@ class DomOperationObserver : public content::NotificationObserver { virtual void OnDomOperationCompleted(const std::string& json) = 0; virtual void OnModalDialogShown() = 0; + virtual void OnJavascriptBlocked() = 0; private: content::NotificationRegistrar registrar_; @@ -619,6 +620,7 @@ class DomOperationMessageSender : public DomOperationObserver { virtual void OnDomOperationCompleted(const std::string& json) OVERRIDE; virtual void OnModalDialogShown() OVERRIDE; + virtual void OnJavascriptBlocked() OVERRIDE; private: base::WeakPtr<AutomationProvider> automation_; |