Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / content / renderer / web_ui_mojo.h
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
15 namespace gin {
16 class PerContextData;
17 }
18
19 namespace content {
20
21 class 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.
27 class 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     ~MainFrameObserver() override;
38
39     // RenderFrameObserver overrides:
40     void WillReleaseScriptContext(v8::Handle<v8::Context> context,
41                                   int world_id) override;
42     void DidFinishDocumentLoad() override;
43
44    private:
45     WebUIMojo* web_ui_mojo_;
46
47     DISALLOW_COPY_AND_ASSIGN(MainFrameObserver);
48   };
49
50   ~WebUIMojo() override;
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   void DidCreateDocumentElement(blink::WebLocalFrame* frame) override;
63   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_