Index: components/contextual_search/renderer/overlay_js_render_frame_observer.cc |
diff --git a/components/contextual_search/renderer/overlay_js_render_frame_observer.cc b/components/contextual_search/renderer/overlay_js_render_frame_observer.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..180953a5cbb8b58596b30dd8aba65db75197fec6 |
--- /dev/null |
+++ b/components/contextual_search/renderer/overlay_js_render_frame_observer.cc |
@@ -0,0 +1,64 @@ |
+// Copyright 2015 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 "components/contextual_search/renderer/overlay_js_render_frame_observer.h" |
+ |
+#include "base/bind.h" |
+#include "components/contextual_search/renderer/contextual_search_wrapper.h" |
+#include "components/contextual_search/renderer/overlay_page_notifier_service_impl.h" |
+#include "content/public/common/service_registry.h" |
+#include "content/public/renderer/render_frame.h" |
+#include "v8/include/v8.h" |
+ |
+namespace contextual_search { |
+ |
+OverlayJsRenderFrameObserver::OverlayJsRenderFrameObserver( |
+ content::RenderFrame* render_frame) |
+ : RenderFrameObserver(render_frame), |
+ is_contextual_search_overlay_(false), |
+ weak_factory_(this) {} |
+ |
+OverlayJsRenderFrameObserver::~OverlayJsRenderFrameObserver() {} |
+ |
+void OverlayJsRenderFrameObserver::DidStartProvisionalLoad() { |
+ RegisterMojoService(); |
+} |
+ |
+void OverlayJsRenderFrameObserver::RegisterMojoService() { |
+ render_frame()->GetServiceRegistry()->AddService(base::Bind( |
+ &OverlayJsRenderFrameObserver::CreateOverlayPageNotifierService, |
+ weak_factory_.GetWeakPtr())); |
+} |
+ |
+void OverlayJsRenderFrameObserver::CreateOverlayPageNotifierService( |
+ mojo::InterfaceRequest<OverlayPageNotifierService> request) { |
+ // This is strongly bound to and owned by the pipe. |
+ new OverlayPageNotifierServiceImpl(this, request.Pass()); |
+} |
+ |
+void OverlayJsRenderFrameObserver::SetIsContextualSearchOverlay() { |
+ is_contextual_search_overlay_ = true; |
+} |
+ |
+void OverlayJsRenderFrameObserver::DidCreateNewDocument() { |
+ if (is_contextual_search_overlay_) |
+ wrapper_ = |
+ contextual_search::ContextualSearchWrapper::Install(render_frame()); |
jochen (gone - plz use gerrit)
2015/12/02 12:59:15
this should happen in DidClearWindowObject()
Donn Denman
2015/12/03 01:21:09
Done.
|
+} |
+ |
+void OverlayJsRenderFrameObserver::DidFinishLoad() { |
+ // If no message about the Contextual Search overlay was received at this |
+ // point, there will not be one; remove the OverlayPageNotifierService |
+ // from the registry. |
+ render_frame() |
+ ->GetServiceRegistry() |
+ ->RemoveService<OverlayPageNotifierService>(); |
+} |
+ |
+void OverlayJsRenderFrameObserver::FrameWillClose() { |
Donn Denman
2015/12/02 03:32:48
This doesn't get called when I expect it to (when
Donn Denman
2015/12/03 01:21:09
There seems to be a problem with our RenderFrameOb
|
+ if (wrapper_ && wrapper_.get()) |
+ wrapper_.reset(); |
+} |
+ |
+} // namespace contextual_search |