OLD | NEW |
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/web_ui_mojo.h" | 5 #include "content/renderer/web_ui_mojo.h" |
6 | 6 |
7 #include "content/common/view_messages.h" | 7 #include "content/common/view_messages.h" |
8 #include "content/public/renderer/render_frame.h" | 8 #include "content/public/renderer/render_frame.h" |
9 #include "content/public/renderer/render_view.h" | 9 #include "content/public/renderer/render_view.h" |
10 #include "content/renderer/web_ui_mojo_context_state.h" | 10 #include "content/renderer/web_ui_mojo_context_state.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 SetHandleOnContextState(handle.Pass()); | 58 SetHandleOnContextState(handle.Pass()); |
59 else | 59 else |
60 pending_handle_ = handle.Pass(); | 60 pending_handle_ = handle.Pass(); |
61 } | 61 } |
62 | 62 |
63 WebUIMojo::~WebUIMojo() { | 63 WebUIMojo::~WebUIMojo() { |
64 } | 64 } |
65 | 65 |
66 void WebUIMojo::CreateContextState() { | 66 void WebUIMojo::CreateContextState() { |
67 v8::HandleScope handle_scope(blink::mainThreadIsolate()); | 67 v8::HandleScope handle_scope(blink::mainThreadIsolate()); |
68 blink::WebFrame* frame = render_view()->GetWebView()->mainFrame(); | 68 blink::WebFrame* frame = |
| 69 render_view()->GetWebView()->mainFrame()->toWebLocalFrame(); |
69 v8::Handle<v8::Context> context = frame->mainWorldScriptContext(); | 70 v8::Handle<v8::Context> context = frame->mainWorldScriptContext(); |
70 gin::PerContextData* context_data = gin::PerContextData::From(context); | 71 gin::PerContextData* context_data = gin::PerContextData::From(context); |
71 WebUIMojoContextStateData* data = new WebUIMojoContextStateData; | 72 WebUIMojoContextStateData* data = new WebUIMojoContextStateData; |
72 data->state.reset(new WebUIMojoContextState( | 73 data->state.reset(new WebUIMojoContextState( |
73 render_view()->GetWebView()->mainFrame(), context)); | 74 render_view()->GetWebView()->mainFrame(), context)); |
74 context_data->SetUserData(kWebUIMojoContextStateKey, data); | 75 context_data->SetUserData(kWebUIMojoContextStateKey, data); |
75 } | 76 } |
76 | 77 |
77 void WebUIMojo::DestroyContextState(v8::Handle<v8::Context> context) { | 78 void WebUIMojo::DestroyContextState(v8::Handle<v8::Context> context) { |
78 gin::PerContextData* context_data = gin::PerContextData::From(context); | 79 gin::PerContextData* context_data = gin::PerContextData::From(context); |
(...skipping 10 matching lines...) Expand all Loading... |
89 | 90 |
90 void WebUIMojo::SetHandleOnContextState(mojo::ScopedMessagePipeHandle handle) { | 91 void WebUIMojo::SetHandleOnContextState(mojo::ScopedMessagePipeHandle handle) { |
91 DCHECK(did_finish_document_load_); | 92 DCHECK(did_finish_document_load_); |
92 v8::HandleScope handle_scope(blink::mainThreadIsolate()); | 93 v8::HandleScope handle_scope(blink::mainThreadIsolate()); |
93 WebUIMojoContextState* state = GetContextState(); | 94 WebUIMojoContextState* state = GetContextState(); |
94 if (state) | 95 if (state) |
95 state->SetHandle(handle.Pass()); | 96 state->SetHandle(handle.Pass()); |
96 } | 97 } |
97 | 98 |
98 WebUIMojoContextState* WebUIMojo::GetContextState() { | 99 WebUIMojoContextState* WebUIMojo::GetContextState() { |
99 blink::WebFrame* frame = render_view()->GetWebView()->mainFrame(); | 100 blink::WebLocalFrame* frame = |
| 101 render_view()->GetWebView()->mainFrame()->toWebLocalFrame(); |
100 v8::HandleScope handle_scope(blink::mainThreadIsolate()); | 102 v8::HandleScope handle_scope(blink::mainThreadIsolate()); |
101 v8::Handle<v8::Context> context = frame->mainWorldScriptContext(); | 103 v8::Handle<v8::Context> context = frame->mainWorldScriptContext(); |
102 gin::PerContextData* context_data = gin::PerContextData::From(context); | 104 gin::PerContextData* context_data = gin::PerContextData::From(context); |
103 if (!context_data) | 105 if (!context_data) |
104 return NULL; | 106 return NULL; |
105 WebUIMojoContextStateData* context_state = | 107 WebUIMojoContextStateData* context_state = |
106 static_cast<WebUIMojoContextStateData*>( | 108 static_cast<WebUIMojoContextStateData*>( |
107 context_data->GetUserData(kWebUIMojoContextStateKey)); | 109 context_data->GetUserData(kWebUIMojoContextStateKey)); |
108 return context_state ? context_state->state.get() : NULL; | 110 return context_state ? context_state->state.get() : NULL; |
109 } | 111 } |
110 | 112 |
111 void WebUIMojo::DidClearWindowObject(blink::WebFrame* frame, int world_id) { | 113 void WebUIMojo::DidClearWindowObject(blink::WebLocalFrame* frame, |
| 114 int world_id) { |
112 if (frame != render_view()->GetWebView()->mainFrame()) | 115 if (frame != render_view()->GetWebView()->mainFrame()) |
113 return; | 116 return; |
114 | 117 |
115 // NOTE: this function may be called early on twice. From the constructor | 118 // NOTE: this function may be called early on twice. From the constructor |
116 // mainWorldScriptContext() may trigger this to be called. If we are created | 119 // mainWorldScriptContext() may trigger this to be called. If we are created |
117 // before the page is loaded (which is very likely), then on first load this | 120 // before the page is loaded (which is very likely), then on first load this |
118 // is called. In the case of the latter we may have already supplied the | 121 // is called. In the case of the latter we may have already supplied the |
119 // handle to the context state so that if we destroy now the handle is | 122 // handle to the context state so that if we destroy now the handle is |
120 // lost. If this is the result of the first load then the contextstate should | 123 // lost. If this is the result of the first load then the contextstate should |
121 // be empty and we don't need to destroy it. | 124 // be empty and we don't need to destroy it. |
122 WebUIMojoContextState* state = GetContextState(); | 125 WebUIMojoContextState* state = GetContextState(); |
123 if (state && !state->module_added()) | 126 if (state && !state->module_added()) |
124 return; | 127 return; |
125 | 128 |
126 v8::HandleScope handle_scope(blink::mainThreadIsolate()); | 129 v8::HandleScope handle_scope(blink::mainThreadIsolate()); |
127 DestroyContextState(frame->mainWorldScriptContext()); | 130 DestroyContextState(frame->mainWorldScriptContext()); |
128 CreateContextState(); | 131 CreateContextState(); |
129 } | 132 } |
130 | 133 |
131 } // namespace content | 134 } // namespace content |
OLD | NEW |