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

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

Issue 2353003004: Move ViewHostMsg_CreateWindow to mojom (Closed)
Patch Set: . Created 4 years, 3 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
« no previous file with comments | « content/renderer/render_thread_impl.cc ('k') | content/test/test_web_contents.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <memory> 9 #include <memory>
10 10
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 #include "content/child/v8_value_converter_impl.h" 44 #include "content/child/v8_value_converter_impl.h"
45 #include "content/child/webmessageportchannel_impl.h" 45 #include "content/child/webmessageportchannel_impl.h"
46 #include "content/common/content_constants_internal.h" 46 #include "content/common/content_constants_internal.h"
47 #include "content/common/content_switches_internal.h" 47 #include "content/common/content_switches_internal.h"
48 #include "content/common/dom_storage/dom_storage_types.h" 48 #include "content/common/dom_storage/dom_storage_types.h"
49 #include "content/common/drag_messages.h" 49 #include "content/common/drag_messages.h"
50 #include "content/common/frame_messages.h" 50 #include "content/common/frame_messages.h"
51 #include "content/common/frame_replication_state.h" 51 #include "content/common/frame_replication_state.h"
52 #include "content/common/input_messages.h" 52 #include "content/common/input_messages.h"
53 #include "content/common/page_messages.h" 53 #include "content/common/page_messages.h"
54 #include "content/common/render_message_filter.mojom.h"
54 #include "content/common/site_isolation_policy.h" 55 #include "content/common/site_isolation_policy.h"
55 #include "content/common/view_messages.h" 56 #include "content/common/view_messages.h"
56 #include "content/public/common/bindings_policy.h" 57 #include "content/public/common/bindings_policy.h"
57 #include "content/public/common/browser_side_navigation_policy.h" 58 #include "content/public/common/browser_side_navigation_policy.h"
58 #include "content/public/common/content_client.h" 59 #include "content/public/common/content_client.h"
59 #include "content/public/common/content_constants.h" 60 #include "content/public/common/content_constants.h"
60 #include "content/public/common/content_switches.h" 61 #include "content/public/common/content_switches.h"
61 #include "content/public/common/drop_data.h" 62 #include "content/public/common/drop_data.h"
62 #include "content/public/common/favicon_url.h" 63 #include "content/public/common/favicon_url.h"
63 #include "content/public/common/page_importance_signals.h" 64 #include "content/public/common/page_importance_signals.h"
(...skipping 1424 matching lines...) Expand 10 before | Expand all | Expand 10 after
1488 } 1489 }
1489 1490
1490 // blink::WebViewClient ------------------------------------------------------ 1491 // blink::WebViewClient ------------------------------------------------------
1491 1492
1492 WebView* RenderViewImpl::createView(WebLocalFrame* creator, 1493 WebView* RenderViewImpl::createView(WebLocalFrame* creator,
1493 const WebURLRequest& request, 1494 const WebURLRequest& request,
1494 const WebWindowFeatures& features, 1495 const WebWindowFeatures& features,
1495 const WebString& frame_name, 1496 const WebString& frame_name,
1496 WebNavigationPolicy policy, 1497 WebNavigationPolicy policy,
1497 bool suppress_opener) { 1498 bool suppress_opener) {
1498 ViewHostMsg_CreateWindow_Params params; 1499 mojom::CreateWindowParamsPtr params = mojom::CreateWindowParams::New();
1499 params.opener_id = GetRoutingID(); 1500 params->opener_id = GetRoutingID();
1500 params.user_gesture = WebUserGestureIndicator::isProcessingUserGesture(); 1501 params->user_gesture = WebUserGestureIndicator::isProcessingUserGesture();
1501 if (GetContentClient()->renderer()->AllowPopup()) 1502 if (GetContentClient()->renderer()->AllowPopup())
1502 params.user_gesture = true; 1503 params->user_gesture = true;
1503 params.window_container_type = WindowFeaturesToContainerType(features); 1504 params->window_container_type = WindowFeaturesToContainerType(features);
1504 params.session_storage_namespace_id = session_storage_namespace_id_; 1505 params->session_storage_namespace_id = session_storage_namespace_id_;
1505 if (frame_name != "_blank") 1506 if (frame_name != "_blank")
1506 params.frame_name = base::UTF16ToUTF8(base::StringPiece16(frame_name)); 1507 params->frame_name = base::UTF16ToUTF8(base::StringPiece16(frame_name));
1507 params.opener_render_frame_id = 1508 params->opener_render_frame_id =
1508 RenderFrameImpl::FromWebFrame(creator)->GetRoutingID(); 1509 RenderFrameImpl::FromWebFrame(creator)->GetRoutingID();
1509 params.opener_url = creator->document().url(); 1510 params->opener_url = creator->document().url();
1510 1511
1511 // The browser process uses the top frame's URL for a content settings check 1512 // The browser process uses the top frame's URL for a content settings check
1512 // to determine whether the popup is allowed. If the top frame is remote, 1513 // to determine whether the popup is allowed. If the top frame is remote,
1513 // its URL is not available, so use its replicated origin instead. 1514 // its URL is not available, so use its replicated origin instead.
1514 // 1515 //
1515 // TODO(alexmos): This works fine for regular origins but may break path 1516 // TODO(alexmos): This works fine for regular origins but may break path
1516 // matching for file URLs with OOP subframes that open popups. This should 1517 // matching for file URLs with OOP subframes that open popups. This should
1517 // be fixed by either moving this lookup to the browser process or removing 1518 // be fixed by either moving this lookup to the browser process or removing
1518 // path-based matching for file URLs from content settings. See 1519 // path-based matching for file URLs from content settings. See
1519 // https://crbug.com/466297. 1520 // https://crbug.com/466297.
1520 if (creator->top()->isWebLocalFrame()) { 1521 if (creator->top()->isWebLocalFrame()) {
1521 params.opener_top_level_frame_url = creator->top()->document().url(); 1522 params->opener_top_level_frame_url = creator->top()->document().url();
1522 } else { 1523 } else {
1523 params.opener_top_level_frame_url = 1524 params->opener_top_level_frame_url =
1524 blink::WebStringToGURL(creator->top()->getSecurityOrigin().toString()); 1525 blink::WebStringToGURL(creator->top()->getSecurityOrigin().toString());
1525 } 1526 }
1526 1527
1527 GURL security_url(blink::WebStringToGURL( 1528 GURL security_url(blink::WebStringToGURL(
1528 creator->document().getSecurityOrigin().toString())); 1529 creator->document().getSecurityOrigin().toString()));
1529 if (!security_url.is_valid()) 1530 if (!security_url.is_valid())
1530 security_url = GURL(); 1531 security_url = GURL();
1531 params.opener_security_origin = security_url; 1532 params->opener_security_origin = security_url;
1532 params.opener_suppressed = suppress_opener; 1533 params->opener_suppressed = suppress_opener;
1533 params.disposition = NavigationPolicyToDisposition(policy); 1534 params->disposition = NavigationPolicyToDisposition(policy);
1534 if (!request.isNull()) { 1535 if (!request.isNull()) {
1535 params.target_url = request.url(); 1536 params->target_url = request.url();
1536 params.referrer = GetReferrerFromRequest(creator, request); 1537 params->referrer = GetReferrerFromRequest(creator, request);
1537 } 1538 }
1538 params.features = features; 1539 params->features = features;
1539 1540
1540 for (size_t i = 0; i < features.additionalFeatures.size(); ++i) 1541 mojom::CreateWindowReplyPtr reply;
1541 params.additional_features.push_back(features.additionalFeatures[i]); 1542 RenderThreadImpl::current_render_message_filter()->CreateWindow(
1542 1543 std::move(params), &reply);
1543 ViewHostMsg_CreateWindow_Reply reply; 1544 if (reply->route_id == MSG_ROUTING_NONE)
1544 RenderThread::Get()->Send(new ViewHostMsg_CreateWindow(params, &reply));
1545 if (reply.route_id == MSG_ROUTING_NONE)
1546 return NULL; 1545 return NULL;
1547 1546
1548 WebUserGestureIndicator::consumeUserGesture(); 1547 WebUserGestureIndicator::consumeUserGesture();
1549 1548
1550 // While this view may be a background extension page, it can spawn a visible 1549 // While this view may be a background extension page, it can spawn a visible
1551 // render view. So we just assume that the new one is not another background 1550 // render view. So we just assume that the new one is not another background
1552 // page instead of passing on our own value. 1551 // page instead of passing on our own value.
1553 // TODO(vangelis): Can we tell if the new view will be a background page? 1552 // TODO(vangelis): Can we tell if the new view will be a background page?
1554 bool never_visible = false; 1553 bool never_visible = false;
1555 1554
1556 ResizeParams initial_size = ResizeParams(); 1555 ResizeParams initial_size = ResizeParams();
1557 initial_size.screen_info = screen_info_; 1556 initial_size.screen_info = screen_info_;
1558 1557
1559 // The initial hidden state for the RenderViewImpl here has to match what the 1558 // The initial hidden state for the RenderViewImpl here has to match what the
1560 // browser will eventually decide for the given disposition. Since we have to 1559 // browser will eventually decide for the given disposition. Since we have to
1561 // return from this call synchronously, we just have to make our best guess 1560 // return from this call synchronously, we just have to make our best guess
1562 // and rely on the browser sending a WasHidden / WasShown message if it 1561 // and rely on the browser sending a WasHidden / WasShown message if it
1563 // disagrees. 1562 // disagrees.
1564 ViewMsg_New_Params view_params; 1563 ViewMsg_New_Params view_params;
1565 1564
1566 RenderFrameImpl* creator_frame = RenderFrameImpl::FromWebFrame(creator); 1565 RenderFrameImpl* creator_frame = RenderFrameImpl::FromWebFrame(creator);
1567 view_params.opener_frame_route_id = creator_frame->GetRoutingID(); 1566 view_params.opener_frame_route_id = creator_frame->GetRoutingID();
1568 DCHECK_EQ(GetRoutingID(), creator_frame->render_view()->GetRoutingID()); 1567 DCHECK_EQ(GetRoutingID(), creator_frame->render_view()->GetRoutingID());
1569 1568
1570 view_params.window_was_created_with_opener = true; 1569 view_params.window_was_created_with_opener = true;
1571 view_params.renderer_preferences = renderer_preferences_; 1570 view_params.renderer_preferences = renderer_preferences_;
1572 view_params.web_preferences = webkit_preferences_; 1571 view_params.web_preferences = webkit_preferences_;
1573 view_params.view_id = reply.route_id; 1572 view_params.view_id = reply->route_id;
1574 view_params.main_frame_routing_id = reply.main_frame_route_id; 1573 view_params.main_frame_routing_id = reply->main_frame_route_id;
1575 view_params.main_frame_widget_routing_id = reply.main_frame_widget_route_id; 1574 view_params.main_frame_widget_routing_id = reply->main_frame_widget_route_id;
1576 view_params.session_storage_namespace_id = 1575 view_params.session_storage_namespace_id =
1577 reply.cloned_session_storage_namespace_id; 1576 reply->cloned_session_storage_namespace_id;
1578 view_params.swapped_out = false; 1577 view_params.swapped_out = false;
1579 // WebCore will take care of setting the correct name. 1578 // WebCore will take care of setting the correct name.
1580 view_params.replicated_frame_state = FrameReplicationState(); 1579 view_params.replicated_frame_state = FrameReplicationState();
1581 view_params.hidden = 1580 view_params.hidden =
1582 (params.disposition == WindowOpenDisposition::NEW_BACKGROUND_TAB); 1581 (params->disposition == WindowOpenDisposition::NEW_BACKGROUND_TAB);
1583 view_params.never_visible = never_visible; 1582 view_params.never_visible = never_visible;
1584 view_params.next_page_id = 1; 1583 view_params.next_page_id = 1;
1585 view_params.initial_size = initial_size; 1584 view_params.initial_size = initial_size;
1586 view_params.enable_auto_resize = false; 1585 view_params.enable_auto_resize = false;
1587 view_params.min_size = gfx::Size(); 1586 view_params.min_size = gfx::Size();
1588 view_params.max_size = gfx::Size(); 1587 view_params.max_size = gfx::Size();
1589 view_params.page_zoom_level = page_zoom_level_; 1588 view_params.page_zoom_level = page_zoom_level_;
1590 1589
1591 RenderViewImpl* view = 1590 RenderViewImpl* view =
1592 RenderViewImpl::Create(compositor_deps_, view_params, true); 1591 RenderViewImpl::Create(compositor_deps_, view_params, true);
1593 view->opened_by_user_gesture_ = params.user_gesture; 1592 view->opened_by_user_gesture_ = params->user_gesture;
1594 1593
1595 return view->webview(); 1594 return view->webview();
1596 } 1595 }
1597 1596
1598 WebWidget* RenderViewImpl::createPopupMenu(blink::WebPopupType popup_type) { 1597 WebWidget* RenderViewImpl::createPopupMenu(blink::WebPopupType popup_type) {
1599 RenderWidget* widget = RenderWidget::Create(GetRoutingID(), compositor_deps_, 1598 RenderWidget* widget = RenderWidget::Create(GetRoutingID(), compositor_deps_,
1600 popup_type, screen_info_); 1599 popup_type, screen_info_);
1601 if (!widget) 1600 if (!widget)
1602 return NULL; 1601 return NULL;
1603 if (screen_metrics_emulator_) { 1602 if (screen_metrics_emulator_) {
(...skipping 1418 matching lines...) Expand 10 before | Expand all | Expand 10 after
3022 return render_frame->focused_pepper_plugin(); 3021 return render_frame->focused_pepper_plugin();
3023 } 3022 }
3024 frame = frame->traverseNext(false); 3023 frame = frame->traverseNext(false);
3025 } 3024 }
3026 3025
3027 return nullptr; 3026 return nullptr;
3028 } 3027 }
3029 #endif 3028 #endif
3030 3029
3031 } // namespace content 3030 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_thread_impl.cc ('k') | content/test/test_web_contents.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698