| // 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 <string> | 
 |  | 
 | #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<WebUIMojo> { | 
 |  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<v8::Context> 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<v8::Context> 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_ |