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

Side by Side Diff: content/renderer/render_view_impl.cc

Issue 10829225: Browser Plugin: Add HTML5-like postMessage support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge with ToT. Added subframe targeting + test. Created 8 years, 2 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/render_view_impl.h" 5 #include "content/renderer/render_view_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 3887 matching lines...) Expand 10 before | Expand all | Expand 10 after
3898 if (frame->document().body().appendChild(element)) { 3898 if (frame->document().body().appendChild(element)) {
3899 WebFrame* subframe = WebFrame::fromFrameOwnerElement(element); 3899 WebFrame* subframe = WebFrame::fromFrameOwnerElement(element);
3900 if (subframe) 3900 if (subframe)
3901 CreateFrameTree(subframe, child); 3901 CreateFrameTree(subframe, child);
3902 } else { 3902 } else {
3903 LOG(ERROR) << "Failed to append created iframe element."; 3903 LOG(ERROR) << "Failed to append created iframe element.";
3904 } 3904 }
3905 } 3905 }
3906 } 3906 }
3907 3907
3908 WebKit::WebFrame* RenderViewImpl::GetFrameByMappedID(int frame_id) { 3908 WebKit::WebFrame* RenderViewImpl::GetFrameByMappedID(int remote_frame_id) {
3909 std::map<int, int>::iterator it = active_frame_id_map_.find(frame_id); 3909 std::map<int, int>::const_iterator it = active_frame_id_map_.begin();
3910 if (it == active_frame_id_map_.end()) 3910 for (; it != active_frame_id_map_.end(); ++it) {
3911 return NULL; 3911 if (it->second == remote_frame_id) {
3912 3912 return FindFrameByID(webview()->mainFrame(), it->first);
3913 return FindFrameByID(webview()->mainFrame(), it->second); 3913 }
3914 }
3915 return NULL;
3914 } 3916 }
3915 3917
3916 void RenderViewImpl::EnsureMediaStreamImpl() { 3918 void RenderViewImpl::EnsureMediaStreamImpl() {
3917 if (!RenderThreadImpl::current()) // Will be NULL during unit tests. 3919 if (!RenderThreadImpl::current()) // Will be NULL during unit tests.
3918 return; 3920 return;
3919 3921
3920 #if defined(ENABLE_WEBRTC) 3922 #if defined(ENABLE_WEBRTC)
3921 if (!media_stream_dispatcher_) 3923 if (!media_stream_dispatcher_)
3922 media_stream_dispatcher_ = new MediaStreamDispatcher(this); 3924 media_stream_dispatcher_ = new MediaStreamDispatcher(this);
3923 3925
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
4184 params.target_process_id = target_process_id_; 4186 params.target_process_id = target_process_id_;
4185 params.target_routing_id = target_routing_id_; 4187 params.target_routing_id = target_routing_id_;
4186 4188
4187 std::map<int,int>::iterator it = active_frame_id_map_.find( 4189 std::map<int,int>::iterator it = active_frame_id_map_.find(
4188 targetFrame->identifier()); 4190 targetFrame->identifier());
4189 if (it != active_frame_id_map_.end()) { 4191 if (it != active_frame_id_map_.end()) {
4190 params.target_frame_id = it->second; 4192 params.target_frame_id = it->second;
4191 } else { 4193 } else {
4192 params.target_frame_id = 0; 4194 params.target_frame_id = 0;
4193 } 4195 }
4194
4195 Send(new ViewHostMsg_RouteMessageEvent(routing_id_, params)); 4196 Send(new ViewHostMsg_RouteMessageEvent(routing_id_, params));
4196 return true; 4197 return true;
4197 } 4198 }
4198 4199
4199 void RenderViewImpl::willOpenSocketStream( 4200 void RenderViewImpl::willOpenSocketStream(
4200 WebSocketStreamHandle* handle) { 4201 WebSocketStreamHandle* handle) {
4201 SocketStreamHandleData::AddToHandle(handle, routing_id_); 4202 SocketStreamHandleData::AddToHandle(handle, routing_id_);
4202 } 4203 }
4203 4204
4204 WebKit::WebString RenderViewImpl::userAgentOverride( 4205 WebKit::WebString RenderViewImpl::userAgentOverride(
(...skipping 2085 matching lines...) Expand 10 before | Expand all | Expand 10 after
6290 return !!RenderThreadImpl::current()->compositor_thread(); 6291 return !!RenderThreadImpl::current()->compositor_thread();
6291 } 6292 }
6292 6293
6293 void RenderViewImpl::OnJavaBridgeInit() { 6294 void RenderViewImpl::OnJavaBridgeInit() {
6294 DCHECK(!java_bridge_dispatcher_); 6295 DCHECK(!java_bridge_dispatcher_);
6295 #if defined(ENABLE_JAVA_BRIDGE) 6296 #if defined(ENABLE_JAVA_BRIDGE)
6296 java_bridge_dispatcher_ = new JavaBridgeDispatcher(this); 6297 java_bridge_dispatcher_ = new JavaBridgeDispatcher(this);
6297 #endif 6298 #endif
6298 } 6299 }
6299 6300
6300 void RenderViewImpl::OnUpdatedFrameTree( 6301 void RenderViewImpl::UpdateFrameTree(
6301 int process_id, 6302 int process_id,
6302 int route_id, 6303 int route_id,
6303 const std::string& frame_tree) { 6304 const std::string& frame_tree) {
6304 // We should only act on this message if we are swapped out. It's possible 6305 // We should only act on this message if we are swapped out. It's possible
6305 // for this to happen due to races. 6306 // for this to happen due to races.
6306 if (!is_swapped_out_)
6307 return;
6308
6309 base::DictionaryValue* frames = NULL; 6307 base::DictionaryValue* frames = NULL;
6310 scoped_ptr<base::Value> tree(base::JSONReader::Read(frame_tree)); 6308 scoped_ptr<base::Value> tree(base::JSONReader::Read(frame_tree));
6311 if (tree.get() && tree->IsType(base::Value::TYPE_DICTIONARY)) 6309 if (tree.get() && tree->IsType(base::Value::TYPE_DICTIONARY)) {
6312 tree->GetAsDictionary(&frames); 6310 if (!tree->GetAsDictionary(&frames))
6311 return;
6312 }
6313 6313
6314 updating_frame_tree_ = true; 6314 updating_frame_tree_ = true;
6315 active_frame_id_map_.clear(); 6315 active_frame_id_map_.clear();
6316 6316
6317 target_process_id_ = process_id; 6317 target_process_id_ = process_id;
6318 target_routing_id_ = route_id; 6318 target_routing_id_ = route_id;
6319 CreateFrameTree(webview()->mainFrame(), frames); 6319 CreateFrameTree(webview()->mainFrame(), frames);
6320 6320
6321 updating_frame_tree_ = false; 6321 updating_frame_tree_ = false;
6322 } 6322 }
6323
6324 void RenderViewImpl::OnUpdatedFrameTree(
nasko 2012/10/02 17:52:31 This change might be worthwhile as a separate bug/
Fady Samuel 2012/10/02 22:04:08 Done. Leaving it here until the other patch lands.
6325 int process_id,
6326 int route_id,
6327 const std::string& frame_tree) {
6328 if (!is_swapped_out_)
6329 return;
6330
6331 if (frame_tree.empty())
6332 return;
6333 // Post the task to update the frame tree on the task queue to ensure that
nasko 2012/10/02 17:52:31 nit: An empty line prior to the comment will make
6334 // that any pending postMessage tasks are handled before the frame tree is
6335 // updated. If we navigate between the time we schedule a postMessage, and
6336 // the time we handle it, we will get a navigation that will prevent the
6337 // message from being posted.
6338 MessageLoop::current()->PostTask(
6339 FROM_HERE,
6340 base::Bind(&RenderViewImpl::UpdateFrameTree, AsWeakPtr(),
6341 process_id, route_id, frame_tree));
6342 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698