// Copyright 2014 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. #ifndef CONTENT_RENDERER_WEB_UI_MOJO_H_ #define CONTENT_RENDERER_WEB_UI_MOJO_H_ #include #include "content/public/renderer/render_frame_observer.h" #include "content/public/renderer/render_view_observer.h" #include "content/public/renderer/render_view_observer_tracker.h" #include "third_party/mojo/src/mojo/public/cpp/system/core.h" namespace gin { class PerContextData; } namespace content { class WebUIMojoContextState; // WebUIMojo is responsible for enabling the renderer side of mojo bindings. // It creates (and destroys) a WebUIMojoContextState at the appropriate times // and handles the necessary browser messages. WebUIMojo destroys itself when // the RendererView it is created with is destroyed. class WebUIMojo : public RenderViewObserver, public RenderViewObserverTracker { public: explicit WebUIMojo(RenderView* render_view); private: class MainFrameObserver : public RenderFrameObserver { public: explicit MainFrameObserver(WebUIMojo* web_ui_mojo); ~MainFrameObserver() override; // RenderFrameObserver overrides: void WillReleaseScriptContext(v8::Local context, int world_id) override; void DidFinishDocumentLoad() override; // MainFrameObserver is inline owned by WebUIMojo and should not be // destroyed when the main RenderFrame is deleted. Overriding the // OnDestruct method allows this object to remain alive and be cleaned // up as part of WebUIMojo deletion. void OnDestruct() override; private: WebUIMojo* web_ui_mojo_; DISALLOW_COPY_AND_ASSIGN(MainFrameObserver); }; ~WebUIMojo() override; void CreateContextState(); void DestroyContextState(v8::Local context); // Invoked when the frame finishes loading. Invokes Run() on the // WebUIMojoContextState. void OnDidFinishDocumentLoad(); WebUIMojoContextState* GetContextState(); // RenderViewObserver overrides: void DidCreateDocumentElement(blink::WebLocalFrame* frame) override; void DidClearWindowObject(blink::WebLocalFrame* frame) override; MainFrameObserver main_frame_observer_; DISALLOW_COPY_AND_ASSIGN(WebUIMojo); }; } // namespace content #endif // CONTENT_RENDERER_WEB_UI_MOJO_H_