Index: content/browser/renderer_host/render_view_host.cc |
diff --git a/content/browser/renderer_host/render_view_host.cc b/content/browser/renderer_host/render_view_host.cc |
index 441acb68d0af6feca7bf6053804fd4c59949fb21..f854182f5ebc19f14babe980309bfffbbeeb6d95 100644 |
--- a/content/browser/renderer_host/render_view_host.cc |
+++ b/content/browser/renderer_host/render_view_host.cc |
@@ -50,6 +50,8 @@ |
#include "webkit/glue/webaccessibility.h" |
#include "webkit/glue/webdropdata.h" |
+#include "content/common/notification_details.h" |
+ |
using base::TimeDelta; |
using WebKit::WebConsoleMessage; |
using WebKit::WebDragOperation; |
@@ -481,6 +483,36 @@ int RenderViewHost::ExecuteJavascriptInWebFrameNotifyResult( |
return next_id++; |
} |
+typedef std::pair<int, Value*> ExecuteDetailType; |
+ |
+ExecuteNotificationObserver::ExecuteNotificationObserver(int id) : id_(id) { } |
Avi (use Gerrit)
2011/10/17 14:20:38
adhere to style guide
keishi
2011/10/21 05:05:43
Done.
|
+ExecuteNotificationObserver::~ExecuteNotificationObserver() { } |
Avi (use Gerrit)
2011/10/17 14:20:38
ditto
keishi
2011/10/21 05:05:43
Done.
|
+void ExecuteNotificationObserver::Observe(int type, |
+ const NotificationSource& source, |
+ const NotificationDetails& details) |
+{ |
Avi (use Gerrit)
2011/10/17 14:20:38
opening brace always on previous line
keishi
2011/10/21 05:05:43
Done.
|
+ int id = (static_cast<Details<ExecuteDetailType > >(details))->first; |
Avi (use Gerrit)
2011/10/17 14:20:38
no space before first >
keishi
2011/10/21 05:05:43
Done.
|
+ if (id != id_) |
+ return; |
+ Value* value = (static_cast<Details<ExecuteDetailType > >(details))->second; |
Avi (use Gerrit)
2011/10/17 14:20:38
ditto
keishi
2011/10/21 05:05:43
Done.
|
+ if (value) |
+ value_.reset(value->DeepCopy()); |
+ MessageLoop::current()->Quit(); |
+} |
+ |
+Value* RenderViewHost::ExecuteJavascriptAndGetValue(const string16& frame_xpath, |
+ const string16& jscript) { |
Avi (use Gerrit)
2011/10/17 14:20:38
align params
keishi
2011/10/21 05:05:43
Done.
|
+ int id = ExecuteJavascriptInWebFrameNotifyResult(frame_xpath, jscript); |
+ ExecuteNotificationObserver observer(id); |
+ NotificationRegistrar notification_registrar; |
+ notification_registrar.Add( |
+ &observer, content::NOTIFICATION_EXECUTE_JAVASCRIPT_RESULT, |
+ Source<RenderViewHost>(this)); |
+ MessageLoop* loop = MessageLoop::current(); |
+ loop->Run(); |
+ return observer.value()->DeepCopy(); |
Avi (use Gerrit)
2011/10/17 14:20:38
We make two copies?
keishi
2011/10/21 05:05:43
The value must outlive the observer so this copy i
|
+} |
+ |
void RenderViewHost::JavaScriptDialogClosed(IPC::Message* reply_msg, |
bool success, |
const string16& user_input) { |