// 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(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