1// Copyright 2014 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#ifndef CONTENT_RENDERER_WEB_UI_MOJO_H_ 6#define CONTENT_RENDERER_WEB_UI_MOJO_H_ 7 8#include <string> 9 10#include "content/public/renderer/render_frame_observer.h" 11#include "content/public/renderer/render_view_observer.h" 12#include "content/public/renderer/render_view_observer_tracker.h" 13#include "mojo/public/cpp/system/core.h" 14 15namespace gin { 16class PerContextData; 17} 18 19namespace content { 20 21class WebUIMojoContextState; 22 23// WebUIMojo is responsible for enabling the renderer side of mojo bindings. 24// It creates (and destroys) a WebUIMojoContextState at the appropriate times 25// and handles the necessary browser messages. WebUIMojo destroys itself when 26// the RendererView it is created with is destroyed. 27class WebUIMojo 28 : public RenderViewObserver, 29 public RenderViewObserverTracker<WebUIMojo> { 30 public: 31 explicit WebUIMojo(RenderView* render_view); 32 33 private: 34 class MainFrameObserver : public RenderFrameObserver { 35 public: 36 explicit MainFrameObserver(WebUIMojo* web_ui_mojo); 37 virtual ~MainFrameObserver(); 38 39 // RenderFrameObserver overrides: 40 virtual void WillReleaseScriptContext(v8::Handle<v8::Context> context, 41 int world_id) OVERRIDE; 42 virtual void DidFinishDocumentLoad() OVERRIDE; 43 44 private: 45 WebUIMojo* web_ui_mojo_; 46 47 DISALLOW_COPY_AND_ASSIGN(MainFrameObserver); 48 }; 49 50 virtual ~WebUIMojo(); 51 52 void CreateContextState(); 53 void DestroyContextState(v8::Handle<v8::Context> context); 54 55 // Invoked when the frame finishes loading. Invokes Run() on the 56 // WebUIMojoContextState. 57 void OnDidFinishDocumentLoad(); 58 59 WebUIMojoContextState* GetContextState(); 60 61 // RenderViewObserver overrides: 62 virtual void DidCreateDocumentElement(blink::WebLocalFrame* frame) OVERRIDE; 63 virtual void DidClearWindowObject(blink::WebLocalFrame* frame) OVERRIDE; 64 65 MainFrameObserver main_frame_observer_; 66 67 DISALLOW_COPY_AND_ASSIGN(WebUIMojo); 68}; 69 70} // namespace content 71 72#endif // CONTENT_RENDERER_WEB_UI_MOJO_H_ 73