blob: 30004e4c000a92c78ef1f207eb64b911773415f8 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/public/browser/page_navigator.h"
#include "content/browser/frame_host/navigation_request.h"
namespace content {
OpenURLParams::OpenURLParams(const GURL& url,
const Referrer& referrer,
WindowOpenDisposition disposition,
ui::PageTransition transition,
bool is_renderer_initiated)
: url(url),
referrer(referrer),
frame_tree_node_id(RenderFrameHost::kNoFrameTreeNodeId),
disposition(disposition),
transition(transition),
is_renderer_initiated(is_renderer_initiated),
should_replace_current_entry(false),
user_gesture(!is_renderer_initiated),
started_from_context_menu(false),
open_app_window_if_possible(false),
reload_type(ReloadType::NONE) {}
OpenURLParams::OpenURLParams(const GURL& url,
const Referrer& referrer,
WindowOpenDisposition disposition,
ui::PageTransition transition,
bool is_renderer_initiated,
bool started_from_context_menu)
: url(url),
referrer(referrer),
frame_tree_node_id(RenderFrameHost::kNoFrameTreeNodeId),
disposition(disposition),
transition(transition),
is_renderer_initiated(is_renderer_initiated),
should_replace_current_entry(false),
user_gesture(!is_renderer_initiated),
started_from_context_menu(started_from_context_menu),
open_app_window_if_possible(false),
reload_type(ReloadType::NONE) {}
OpenURLParams::OpenURLParams(const GURL& url,
const Referrer& referrer,
int frame_tree_node_id,
WindowOpenDisposition disposition,
ui::PageTransition transition,
bool is_renderer_initiated)
: url(url),
referrer(referrer),
frame_tree_node_id(frame_tree_node_id),
disposition(disposition),
transition(transition),
is_renderer_initiated(is_renderer_initiated),
should_replace_current_entry(false),
user_gesture(!is_renderer_initiated),
started_from_context_menu(false),
open_app_window_if_possible(false),
reload_type(ReloadType::NONE) {}
OpenURLParams::OpenURLParams(const OpenURLParams& other) = default;
OpenURLParams::~OpenURLParams() = default;
// static
OpenURLParams OpenURLParams::FromNavigationHandle(NavigationHandle* handle) {
OpenURLParams params(
handle->GetURL(), Referrer(handle->GetReferrer()),
handle->GetFrameTreeNodeId(), WindowOpenDisposition::CURRENT_TAB,
handle->GetPageTransition(), handle->IsRendererInitiated());
params.initiator_origin = handle->GetInitiatorOrigin();
params.source_site_instance = handle->GetSourceSiteInstance();
params.redirect_chain = handle->GetRedirectChain();
params.user_gesture = handle->HasUserGesture();
params.started_from_context_menu = handle->WasStartedFromContextMenu();
params.href_translate = handle->GetHrefTranslate();
params.reload_type = handle->GetReloadType();
// A non-null |source_site_instance| is important for picking the right
// renderer process for hosting about:blank and/or data: URLs (their origin's
// precursor is based on |initiator_origin|).
if (params.url.IsAboutBlank() || params.url.SchemeIs(url::kDataScheme)) {
DCHECK_EQ(params.initiator_origin.has_value(),
static_cast<bool>(params.source_site_instance));
}
// TODO(lukasza): Consider also covering |post_data| (and |uses_post|) and
// |extra_headers| (this is difficult, because we can't cast |handle| to
// NavigationRequest*, because it may be MockNavigationHandle in unit tests).
return params;
}
} // namespace content