summaryrefslogtreecommitdiff
path: root/chromium/content/renderer/navigation_client.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/renderer/navigation_client.cc')
-rw-r--r--chromium/content/renderer/navigation_client.cc75
1 files changed, 75 insertions, 0 deletions
diff --git a/chromium/content/renderer/navigation_client.cc b/chromium/content/renderer/navigation_client.cc
new file mode 100644
index 00000000000..209968171ba
--- /dev/null
+++ b/chromium/content/renderer/navigation_client.cc
@@ -0,0 +1,75 @@
+// Copyright 2018 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/renderer/navigation_client.h"
+#include "content/renderer/render_frame_impl.h"
+#include "third_party/blink/public/platform/task_type.h"
+
+namespace content {
+
+NavigationClient::NavigationClient(RenderFrameImpl* render_frame)
+ : navigation_client_binding_(this), render_frame_(render_frame) {}
+
+NavigationClient::~NavigationClient() {}
+
+void NavigationClient::CommitNavigation(
+ const network::ResourceResponseHead& head,
+ const CommonNavigationParams& common_params,
+ const RequestNavigationParams& request_params,
+ network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
+ std::unique_ptr<URLLoaderFactoryBundleInfo> subresource_loaders,
+ base::Optional<std::vector<::content::mojom::TransferrableURLLoaderPtr>>
+ subresource_overrides,
+ mojom::ControllerServiceWorkerInfoPtr controller_service_worker_info,
+ network::mojom::URLLoaderFactoryPtr prefetch_loader_factory,
+ const base::UnguessableToken& devtools_navigation_token) {
+ // TODO(ahemery): The reset should be done when the navigation did commit
+ // (meaning at a later stage). This is not currently possible because of
+ // race conditions leading to the early deletion of NavigationRequest would
+ // unexpectedly abort the ongoing navigation. Remove when the races are fixed.
+ ResetDisconnectionHandler();
+ render_frame_->CommitNavigation(
+ head, common_params, request_params,
+ std::move(url_loader_client_endpoints), std::move(subresource_loaders),
+ std::move(subresource_overrides),
+ std::move(controller_service_worker_info),
+ std::move(prefetch_loader_factory), devtools_navigation_token,
+ mojom::FrameNavigationControl::CommitNavigationCallback());
+}
+
+void NavigationClient::CommitFailedNavigation(
+ const CommonNavigationParams& common_params,
+ const RequestNavigationParams& request_params,
+ bool has_stale_copy_in_cache,
+ int error_code,
+ const base::Optional<std::string>& error_page_content,
+ std::unique_ptr<URLLoaderFactoryBundleInfo> subresource_loaders) {
+ ResetDisconnectionHandler();
+ render_frame_->CommitFailedNavigation(
+ common_params, request_params, has_stale_copy_in_cache, error_code,
+ error_page_content, std::move(subresource_loaders),
+ mojom::FrameNavigationControl::CommitFailedNavigationCallback());
+}
+
+void NavigationClient::Bind(mojom::NavigationClientAssociatedRequest request) {
+ navigation_client_binding_.Bind(
+ std::move(request),
+ render_frame_->GetTaskRunner(blink::TaskType::kInternalIPC));
+ SetDisconnectionHandler();
+}
+
+void NavigationClient::SetDisconnectionHandler() {
+ navigation_client_binding_.set_connection_error_handler(base::BindOnce(
+ &NavigationClient::OnDroppedNavigation, base::Unretained(this)));
+}
+
+void NavigationClient::ResetDisconnectionHandler() {
+ navigation_client_binding_.set_connection_error_handler(base::DoNothing());
+}
+
+void NavigationClient::OnDroppedNavigation() {
+ render_frame_->OnDroppedNavigation();
+}
+
+} // namespace content