// 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 "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::Handle context, int world_id) override; void DidFinishDocumentLoad() override; private: WebUIMojo* web_ui_mojo_; DISALLOW_COPY_AND_ASSIGN(MainFrameObserver); }; ~WebUIMojo() override; void CreateContextState(); void DestroyContextState(v8::Handle 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_