| // 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/renderer/renderer_webapplicationcachehost_impl.h" |
| |
| #include "content/common/view_messages.h" |
| #include "content/renderer/render_frame_impl.h" |
| #include "content/renderer/render_thread_impl.h" |
| #include "content/renderer/render_view_impl.h" |
| #include "third_party/blink/public/web/web_frame.h" |
| #include "third_party/blink/public/web/web_local_frame.h" |
| #include "third_party/blink/public/web/web_view.h" |
| |
| using blink::WebApplicationCacheHostClient; |
| using blink::WebConsoleMessage; |
| |
| namespace content { |
| |
| RendererWebApplicationCacheHostImpl::RendererWebApplicationCacheHostImpl( |
| RenderViewImpl* render_view, |
| WebApplicationCacheHostClient* client, |
| AppCacheBackend* backend, |
| int appcache_host_id, |
| int frame_routing_id) |
| : WebApplicationCacheHostImpl(client, backend, appcache_host_id), |
| routing_id_(render_view->GetRoutingID()), |
| frame_routing_id_(frame_routing_id) {} |
| |
| void RendererWebApplicationCacheHostImpl::OnLogMessage( |
| AppCacheLogLevel log_level, const std::string& message) { |
| if (RenderThreadImpl::current()->layout_test_mode()) |
| return; |
| |
| RenderViewImpl* render_view = GetRenderView(); |
| if (!render_view || !render_view->webview() || |
| !render_view->webview()->MainFrame()) |
| return; |
| |
| blink::WebFrame* frame = render_view->webview()->MainFrame(); |
| if (!frame->IsWebLocalFrame()) |
| return; |
| // TODO(michaeln): Make app cache host per-frame and correctly report to the |
| // involved frame. |
| frame->ToWebLocalFrame()->AddMessageToConsole( |
| WebConsoleMessage(static_cast<WebConsoleMessage::Level>(log_level), |
| blink::WebString::FromUTF8(message.c_str()))); |
| } |
| |
| void RendererWebApplicationCacheHostImpl::OnContentBlocked( |
| const GURL& manifest_url) { |
| RenderThreadImpl::current()->Send(new ViewHostMsg_AppCacheAccessed( |
| routing_id_, manifest_url, true)); |
| } |
| |
| void RendererWebApplicationCacheHostImpl::OnCacheSelected( |
| const AppCacheInfo& info) { |
| if (!info.manifest_url.is_empty()) { |
| RenderThreadImpl::current()->Send(new ViewHostMsg_AppCacheAccessed( |
| routing_id_, info.manifest_url, false)); |
| } |
| WebApplicationCacheHostImpl::OnCacheSelected(info); |
| } |
| |
| void RendererWebApplicationCacheHostImpl::SetSubresourceFactory( |
| network::mojom::URLLoaderFactoryPtr url_loader_factory) { |
| RenderFrameImpl* render_frame = |
| RenderFrameImpl::FromRoutingID(frame_routing_id_); |
| if (render_frame) { |
| render_frame->SetCustomURLLoaderFactory(std::move(url_loader_factory)); |
| } |
| } |
| |
| RenderViewImpl* RendererWebApplicationCacheHostImpl::GetRenderView() { |
| return RenderViewImpl::FromRoutingID(routing_id_); |
| } |
| |
| } // namespace content |