summaryrefslogtreecommitdiffstats
path: root/chrome/browser/automation
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/automation')
-rw-r--r--chrome/browser/automation/automation_provider_observers.cc24
-rw-r--r--chrome/browser/automation/automation_provider_observers.h2
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_;