1 // Copyright 2015 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "components/contextual_search/content/renderer/overlay_js_render_frame_observer.h" 6 7 #include <utility> 8 9 #include "base/bind.h" 10 #include "components/contextual_search/content/renderer/contextual_search_wrapper.h" 11 #include "content/public/renderer/render_frame.h" 12 #include "services/service_manager/public/cpp/binder_registry.h" 13 #include "third_party/blink/public/common/browser_interface_broker_proxy.h" 14 #include "third_party/blink/public/platform/web_url.h" 15 #include "third_party/blink/public/web/web_document.h" 16 #include "v8/include/v8.h" 17 18 namespace contextual_search { 19 OverlayJsRenderFrameObserver(content::RenderFrame * render_frame,service_manager::BinderRegistry * registry)20OverlayJsRenderFrameObserver::OverlayJsRenderFrameObserver( 21 content::RenderFrame* render_frame, 22 service_manager::BinderRegistry* registry) 23 : RenderFrameObserver(render_frame) {} 24 ~OverlayJsRenderFrameObserver()25OverlayJsRenderFrameObserver::~OverlayJsRenderFrameObserver() {} 26 DidClearWindowObject()27void OverlayJsRenderFrameObserver::DidClearWindowObject() { 28 if (!did_start_enabling_js_api_) { 29 blink::WebURL url = render_frame()->GetWebFrame()->GetDocument().Url(); 30 GURL gurl(url); 31 if (!url.IsEmpty() && EnsureServiceConnected()) { 32 did_start_enabling_js_api_ = true; 33 contextual_search_js_api_service_->ShouldEnableJsApi( 34 gurl, base::BindOnce(&OverlayJsRenderFrameObserver::EnableJsApi, 35 weak_factory_.GetWeakPtr())); 36 } 37 } 38 } 39 EnableJsApi(bool should_enable)40void OverlayJsRenderFrameObserver::EnableJsApi(bool should_enable) { 41 if (!should_enable) 42 return; 43 contextual_search::ContextualSearchWrapper::Install(render_frame()); 44 } 45 EnsureServiceConnected()46bool OverlayJsRenderFrameObserver::EnsureServiceConnected() { 47 if (render_frame() && !contextual_search_js_api_service_) { 48 render_frame()->GetBrowserInterfaceBroker()->GetInterface( 49 contextual_search_js_api_service_.BindNewPipeAndPassReceiver()); 50 return true; 51 } 52 return false; 53 } 54 OnDestruct()55void OverlayJsRenderFrameObserver::OnDestruct() { 56 delete this; 57 } 58 59 } // namespace contextual_search 60