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

Side by Side Diff: content/renderer/java/gin_java_bridge_dispatcher.cc

Issue 323403007: [Android] Java Bridge with Gin: implement Java bound object (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 6 years, 6 months 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
« no previous file with comments | « content/renderer/java/gin_java_bridge_dispatcher.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/renderer/java/gin_java_bridge_dispatcher.h" 5 #include "content/renderer/java/gin_java_bridge_dispatcher.h"
6 6
7 #include "base/strings/string_number_conversions.h" 7 #include "base/strings/string_number_conversions.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "content/common/gin_java_bridge_messages.h" 9 #include "content/common/gin_java_bridge_messages.h"
10 #include "content/public/renderer/render_frame.h" 10 #include "content/public/renderer/render_frame.h"
11 #include "content/renderer/java/gin_java_bridge_object.h" 11 #include "content/renderer/java/gin_java_bridge_object.h"
12 #include "third_party/WebKit/public/web/WebFrame.h" 12 #include "third_party/WebKit/public/web/WebFrame.h"
13 #include "third_party/WebKit/public/web/WebView.h" 13 #include "third_party/WebKit/public/web/WebView.h"
14 14
15 namespace content { 15 namespace content {
16 16
17 GinJavaBridgeDispatcher::GinJavaBridgeDispatcher(RenderFrame* render_frame) 17 GinJavaBridgeDispatcher::GinJavaBridgeDispatcher(RenderFrame* render_frame)
18 : RenderFrameObserver(render_frame) { 18 : RenderFrameObserver(render_frame),
19 inside_did_clear_window_object_(false) {
19 } 20 }
20 21
21 GinJavaBridgeDispatcher::~GinJavaBridgeDispatcher() { 22 GinJavaBridgeDispatcher::~GinJavaBridgeDispatcher() {
22 } 23 }
23 24
24 bool GinJavaBridgeDispatcher::OnMessageReceived(const IPC::Message& msg) { 25 bool GinJavaBridgeDispatcher::OnMessageReceived(const IPC::Message& msg) {
25 bool handled = true; 26 bool handled = true;
26 IPC_BEGIN_MESSAGE_MAP(GinJavaBridgeDispatcher, msg) 27 IPC_BEGIN_MESSAGE_MAP(GinJavaBridgeDispatcher, msg)
27 IPC_MESSAGE_HANDLER(GinJavaBridgeMsg_AddNamedObject, OnAddNamedObject) 28 IPC_MESSAGE_HANDLER(GinJavaBridgeMsg_AddNamedObject, OnAddNamedObject)
28 IPC_MESSAGE_HANDLER(GinJavaBridgeMsg_RemoveNamedObject, OnRemoveNamedObject) 29 IPC_MESSAGE_HANDLER(GinJavaBridgeMsg_RemoveNamedObject, OnRemoveNamedObject)
29 IPC_MESSAGE_UNHANDLED(handled = false) 30 IPC_MESSAGE_UNHANDLED(handled = false)
30 IPC_END_MESSAGE_MAP() 31 IPC_END_MESSAGE_MAP()
31 return handled; 32 return handled;
32 } 33 }
33 34
35 namespace {
36
37 class ScopedFlag {
38 public:
39 ScopedFlag(bool* flag) : flag_(flag) {
40 DCHECK(!*flag_);
41 *flag_ = true;
42 }
43 ~ScopedFlag() {
44 DCHECK(*flag_);
45 *flag_ = false;
46 }
47 private:
48 bool* flag_;
49
50 DISALLOW_COPY_AND_ASSIGN(ScopedFlag);
51 };
52
53 } // namespace
54
34 void GinJavaBridgeDispatcher::DidClearWindowObject() { 55 void GinJavaBridgeDispatcher::DidClearWindowObject() {
56 // Accessing window object when adding properties to it may trigger
57 // a nested call to DidClearWindowObject.
58 if (inside_did_clear_window_object_)
59 return;
60 ScopedFlag flag(&inside_did_clear_window_object_);
35 for (NamedObjectMap::const_iterator iter = named_objects_.begin(); 61 for (NamedObjectMap::const_iterator iter = named_objects_.begin();
36 iter != named_objects_.end(); ++iter) { 62 iter != named_objects_.end(); ++iter) {
37 // Always create a new GinJavaBridgeObject, so we don't pull any of the V8 63 // Always create a new GinJavaBridgeObject, so we don't pull any of the V8
38 // wrapper's custom properties into the context of the page we have 64 // wrapper's custom properties into the context of the page we have
39 // navigated to. The old GinJavaBridgeObject will be automatically 65 // navigated to. The old GinJavaBridgeObject will be automatically
40 // deleted after its wrapper will be collected. 66 // deleted after its wrapper will be collected.
41 // On the browser side, we ignore wrapper deletion events for named objects, 67 // On the browser side, we ignore wrapper deletion events for named objects,
42 // as they are only removed upon embedder's request (RemoveNamedObject). 68 // as they are only removed upon embedder's request (RemoveNamedObject).
43 if (objects_.Lookup(iter->second)) 69 if (objects_.Lookup(iter->second))
44 objects_.Remove(iter->second); 70 objects_.Remove(iter->second);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 142
117 void GinJavaBridgeDispatcher::OnGinJavaBridgeObjectDeleted(ObjectID object_id) { 143 void GinJavaBridgeDispatcher::OnGinJavaBridgeObjectDeleted(ObjectID object_id) {
118 if (!objects_.Lookup(object_id)) 144 if (!objects_.Lookup(object_id))
119 return; 145 return;
120 objects_.Remove(object_id); 146 objects_.Remove(object_id);
121 render_frame()->Send( 147 render_frame()->Send(
122 new GinJavaBridgeHostMsg_ObjectWrapperDeleted(routing_id(), object_id)); 148 new GinJavaBridgeHostMsg_ObjectWrapperDeleted(routing_id(), object_id));
123 } 149 }
124 150
125 } // namespace content 151 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/java/gin_java_bridge_dispatcher.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698