summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorrafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-17 02:47:53 +0000
committerrafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-17 02:47:53 +0000
commit533ba2ca7197b5b528173f207d0be4d171595cc2 (patch)
treeead0b4aa73845f27bfa2fd98282ad20f06acb452 /chrome/renderer
parent2e4bafe9a8e928042606c46af7a0fd69d5af37d5 (diff)
downloadchromium_src-533ba2ca7197b5b528173f207d0be4d171595cc2.zip
chromium_src-533ba2ca7197b5b528173f207d0be4d171595cc2.tar.gz
chromium_src-533ba2ca7197b5b528173f207d0be4d171595cc2.tar.bz2
Make SearchBox extension call through WebFrame to execute page script
This cleans up another instance of renderer code directly invoking page/author script. When all instances are fixed, we can land https://bugs.webkit.org/show_bug.cgi?id=84094 BUG= TEST= Review URL: http://codereview.chromium.org/9969191 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@132526 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/searchbox_extension.cc88
1 files changed, 46 insertions, 42 deletions
diff --git a/chrome/renderer/searchbox_extension.cc b/chrome/renderer/searchbox_extension.cc
index e04bf91..d21906e 100644
--- a/chrome/renderer/searchbox_extension.cc
+++ b/chrome/renderer/searchbox_extension.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -59,13 +59,41 @@ static const char kSearchBoxExtensionScript[] =
" };"
"}";
-static const char kChangeEventName[] = "chrome.searchBox.onchange";
+static const char kDispatchChangeEventScript[] =
+ "if (window.chrome &&"
+ " window.chrome.searchBox &&"
+ " window.chrome.searchBox.onchange &&"
+ " typeof window.chrome.searchBox.onchange == 'function') {"
+ " window.chrome.searchBox.onchange();"
+ " true;"
+ "}";
-static const char kSubmitEventName[] = "chrome.searchBox.onsubmit";
+static const char kDispatchSubmitEventScript[] =
+ "if (window.chrome &&"
+ " window.chrome.searchBox &&"
+ " window.chrome.searchBox.onsubmit &&"
+ " typeof window.chrome.searchBox.onsubmit == 'function') {"
+ " window.chrome.searchBox.onsubmit();"
+ " true;"
+ "}";
-static const char kCancelEventName[] = "chrome.searchBox.oncancel";
+static const char kDispatchCancelEventScript[] =
+ "if (window.chrome &&"
+ " window.chrome.searchBox &&"
+ " window.chrome.searchBox.oncancel &&"
+ " typeof window.chrome.searchBox.oncancel == 'function') {"
+ " window.chrome.searchBox.oncancel();"
+ " true;"
+ "}";
-static const char kResizeEventName[] = "chrome.searchBox.onresize";
+static const char kDispatchResizeEventScript[] =
+ "if (window.chrome &&"
+ " window.chrome.searchBox &&"
+ " window.chrome.searchBox.onresize &&"
+ " typeof window.chrome.searchBox.onresize == 'function') {"
+ " window.chrome.searchBox.onresize();"
+ " true;"
+ "}";
// Deprecated API support.
// TODO(tonyg): Remove these when they are no longer used.
@@ -349,61 +377,37 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions(
}
// static
-bool Dispatch(WebFrame* frame, const std::string& event_name) {
+void Dispatch(WebFrame* frame,
+ WebString event_dispatch_script,
+ WebString no_event_handler_script) {
DCHECK(frame) << "Dispatch requires frame";
- if (!frame) return false;
-
- v8::HandleScope handle_scope;
- v8::Local<v8::Context> context = frame->mainWorldScriptContext();
- if (context.IsEmpty())
- return false;
- v8::Context::Scope context_scope(context);
-
- v8::Local<v8::Value> value =
- context->Global()->Get(v8::String::New("window"));
- std::vector<std::string> components;
- base::SplitStringDontTrim(event_name, '.', &components);
- for (size_t i = 0; i < components.size(); ++i) {
- if (!value.IsEmpty() && value->IsObject())
- value = value->ToObject()->Get(v8::String::New(components[i].c_str()));
- }
- if (value.IsEmpty() || !value->IsFunction())
- return false;
-
- v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value);
- if (function.IsEmpty())
- return false;
+ if (!frame)
+ return;
- function->Call(v8::Object::New(), 0, NULL);
- return true;
+ v8::Handle<v8::Value> result = frame->executeScriptAndReturnValue(
+ WebScriptSource(event_dispatch_script));
+ if (result.IsEmpty())
+ frame->executeScript(WebScriptSource(no_event_handler_script));
}
// static
void SearchBoxExtension::DispatchChange(WebFrame* frame) {
- if (Dispatch(frame, kChangeEventName))
- return;
- frame->executeScript(WebScriptSource(kUserInputScript));
+ Dispatch(frame, kDispatchChangeEventScript, kUserInputScript);
}
// static
void SearchBoxExtension::DispatchSubmit(WebFrame* frame) {
- if (Dispatch(frame, kSubmitEventName))
- return;
- frame->executeScript(WebScriptSource(kUserDoneScript));
+ Dispatch(frame, kDispatchSubmitEventScript, kUserDoneScript);
}
// static
void SearchBoxExtension::DispatchCancel(WebFrame* frame) {
- if (Dispatch(frame, kCancelEventName))
- return;
- frame->executeScript(WebScriptSource(kUserDoneScript));
+ Dispatch(frame, kDispatchCancelEventScript, kUserDoneScript);
}
// static
void SearchBoxExtension::DispatchResize(WebFrame* frame) {
- if (Dispatch(frame, kResizeEventName))
- return;
- frame->executeScript(WebScriptSource(kSetOmniboxBoundsScript));
+ Dispatch(frame, kDispatchResizeEventScript, kSetOmniboxBoundsScript);
}
// static