| OLD | NEW | 
|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "apps/shell/renderer/shell_content_renderer_client.h" | 5 #include "extensions/shell/renderer/shell_content_renderer_client.h" | 
| 6 | 6 | 
| 7 #include "apps/shell/common/shell_extensions_client.h" |  | 
| 8 #include "apps/shell/renderer/shell_dispatcher_delegate.h" |  | 
| 9 #include "apps/shell/renderer/shell_extensions_renderer_client.h" |  | 
| 10 #include "apps/shell/renderer/shell_renderer_main_delegate.h" |  | 
| 11 #include "content/public/renderer/render_frame.h" | 7 #include "content/public/renderer/render_frame.h" | 
| 12 #include "content/public/renderer/render_frame_observer.h" | 8 #include "content/public/renderer/render_frame_observer.h" | 
| 13 #include "content/public/renderer/render_frame_observer_tracker.h" | 9 #include "content/public/renderer/render_frame_observer_tracker.h" | 
| 14 #include "content/public/renderer/render_thread.h" | 10 #include "content/public/renderer/render_thread.h" | 
| 15 #include "extensions/common/extensions_client.h" | 11 #include "extensions/common/extensions_client.h" | 
| 16 #include "extensions/renderer/dispatcher.h" | 12 #include "extensions/renderer/dispatcher.h" | 
| 17 #include "extensions/renderer/extension_helper.h" | 13 #include "extensions/renderer/extension_helper.h" | 
|  | 14 #include "extensions/shell/common/shell_extensions_client.h" | 
|  | 15 #include "extensions/shell/renderer/shell_dispatcher_delegate.h" | 
|  | 16 #include "extensions/shell/renderer/shell_extensions_renderer_client.h" | 
|  | 17 #include "extensions/shell/renderer/shell_renderer_main_delegate.h" | 
| 18 | 18 | 
| 19 using blink::WebFrame; | 19 using blink::WebFrame; | 
| 20 using blink::WebString; | 20 using blink::WebString; | 
| 21 using content::RenderThread; | 21 using content::RenderThread; | 
| 22 | 22 | 
| 23 namespace apps { | 23 namespace extensions { | 
| 24 | 24 | 
| 25 namespace { | 25 namespace { | 
| 26 | 26 | 
| 27 // TODO: promote ExtensionFrameHelper to a common place and share with this. | 27 // TODO: promote ExtensionFrameHelper to a common place and share with this. | 
| 28 class ShellFrameHelper | 28 class ShellFrameHelper | 
| 29     : public content::RenderFrameObserver, | 29     : public content::RenderFrameObserver, | 
| 30       public content::RenderFrameObserverTracker<ShellFrameHelper> { | 30       public content::RenderFrameObserverTracker<ShellFrameHelper> { | 
| 31  public: | 31  public: | 
| 32   ShellFrameHelper(content::RenderFrame* render_frame, | 32   ShellFrameHelper(content::RenderFrame* render_frame, | 
| 33                    extensions::Dispatcher* extension_dispatcher); | 33                    Dispatcher* extension_dispatcher); | 
| 34   virtual ~ShellFrameHelper(); | 34   virtual ~ShellFrameHelper(); | 
| 35 | 35 | 
| 36   // RenderFrameObserver implementation. | 36   // RenderFrameObserver implementation. | 
| 37   virtual void WillReleaseScriptContext(v8::Handle<v8::Context>, | 37   virtual void WillReleaseScriptContext(v8::Handle<v8::Context>, | 
| 38                                         int world_id) OVERRIDE; | 38                                         int world_id) OVERRIDE; | 
| 39 | 39 | 
| 40  private: | 40  private: | 
| 41   extensions::Dispatcher* extension_dispatcher_; | 41   Dispatcher* extension_dispatcher_; | 
| 42 | 42 | 
| 43   DISALLOW_COPY_AND_ASSIGN(ShellFrameHelper); | 43   DISALLOW_COPY_AND_ASSIGN(ShellFrameHelper); | 
| 44 }; | 44 }; | 
| 45 | 45 | 
| 46 ShellFrameHelper::ShellFrameHelper(content::RenderFrame* render_frame, | 46 ShellFrameHelper::ShellFrameHelper(content::RenderFrame* render_frame, | 
| 47                                    extensions::Dispatcher* extension_dispatcher) | 47                                    Dispatcher* extension_dispatcher) | 
| 48     : content::RenderFrameObserver(render_frame), | 48     : content::RenderFrameObserver(render_frame), | 
| 49       content::RenderFrameObserverTracker<ShellFrameHelper>(render_frame), | 49       content::RenderFrameObserverTracker<ShellFrameHelper>(render_frame), | 
| 50       extension_dispatcher_(extension_dispatcher) {} | 50       extension_dispatcher_(extension_dispatcher) { | 
|  | 51 } | 
| 51 | 52 | 
| 52 ShellFrameHelper::~ShellFrameHelper() {} | 53 ShellFrameHelper::~ShellFrameHelper() { | 
|  | 54 } | 
| 53 | 55 | 
| 54 void ShellFrameHelper::WillReleaseScriptContext(v8::Handle<v8::Context> context, | 56 void ShellFrameHelper::WillReleaseScriptContext(v8::Handle<v8::Context> context, | 
| 55                                                 int world_id) { | 57                                                 int world_id) { | 
| 56   extension_dispatcher_->WillReleaseScriptContext( | 58   extension_dispatcher_->WillReleaseScriptContext( | 
| 57       render_frame()->GetWebFrame(), context, world_id); | 59       render_frame()->GetWebFrame(), context, world_id); | 
| 58 } | 60 } | 
| 59 | 61 | 
| 60 }  // namespace | 62 }  // namespace | 
| 61 | 63 | 
| 62 ShellContentRendererClient::ShellContentRendererClient( | 64 ShellContentRendererClient::ShellContentRendererClient( | 
| 63     scoped_ptr<ShellRendererMainDelegate> delegate) | 65     scoped_ptr<ShellRendererMainDelegate> delegate) | 
| 64     : delegate_(delegate.Pass()) { | 66     : delegate_(delegate.Pass()) { | 
| 65 } | 67 } | 
| 66 | 68 | 
| 67 ShellContentRendererClient::~ShellContentRendererClient() {} | 69 ShellContentRendererClient::~ShellContentRendererClient() { | 
|  | 70 } | 
| 68 | 71 | 
| 69 void ShellContentRendererClient::RenderThreadStarted() { | 72 void ShellContentRendererClient::RenderThreadStarted() { | 
| 70   RenderThread* thread = RenderThread::Get(); | 73   RenderThread* thread = RenderThread::Get(); | 
| 71 | 74 | 
| 72   extensions_client_.reset(new ShellExtensionsClient); | 75   extensions_client_.reset(new ShellExtensionsClient); | 
| 73   extensions::ExtensionsClient::Set(extensions_client_.get()); | 76   ExtensionsClient::Set(extensions_client_.get()); | 
| 74 | 77 | 
| 75   extensions_renderer_client_.reset(new ShellExtensionsRendererClient); | 78   extensions_renderer_client_.reset(new ShellExtensionsRendererClient); | 
| 76   extensions::ExtensionsRendererClient::Set(extensions_renderer_client_.get()); | 79   ExtensionsRendererClient::Set(extensions_renderer_client_.get()); | 
| 77 | 80 | 
| 78   extension_dispatcher_delegate_.reset(new ShellDispatcherDelegate()); | 81   extension_dispatcher_delegate_.reset(new ShellDispatcherDelegate()); | 
| 79 | 82 | 
| 80   // Must be initialized after ExtensionsRendererClient. | 83   // Must be initialized after ExtensionsRendererClient. | 
| 81   extension_dispatcher_.reset( | 84   extension_dispatcher_.reset( | 
| 82       new extensions::Dispatcher(extension_dispatcher_delegate_.get())); | 85       new Dispatcher(extension_dispatcher_delegate_.get())); | 
| 83   thread->AddObserver(extension_dispatcher_.get()); | 86   thread->AddObserver(extension_dispatcher_.get()); | 
| 84 | 87 | 
| 85   // TODO(jamescook): Init WebSecurityPolicy for chrome-extension: schemes. | 88   // TODO(jamescook): Init WebSecurityPolicy for chrome-extension: schemes. | 
| 86   // See ChromeContentRendererClient for details. | 89   // See ChromeContentRendererClient for details. | 
| 87   if (delegate_) | 90   if (delegate_) | 
| 88     delegate_->OnThreadStarted(thread); | 91     delegate_->OnThreadStarted(thread); | 
| 89 } | 92 } | 
| 90 | 93 | 
| 91 void ShellContentRendererClient::RenderFrameCreated( | 94 void ShellContentRendererClient::RenderFrameCreated( | 
| 92     content::RenderFrame* render_frame) { | 95     content::RenderFrame* render_frame) { | 
| 93   // ShellFrameHelper destroyes itself when the RenderFrame is destroyed. | 96   // ShellFrameHelper destroyes itself when the RenderFrame is destroyed. | 
| 94   new ShellFrameHelper(render_frame, extension_dispatcher_.get()); | 97   new ShellFrameHelper(render_frame, extension_dispatcher_.get()); | 
| 95 } | 98 } | 
| 96 | 99 | 
| 97 void ShellContentRendererClient::RenderViewCreated( | 100 void ShellContentRendererClient::RenderViewCreated( | 
| 98     content::RenderView* render_view) { | 101     content::RenderView* render_view) { | 
| 99   new extensions::ExtensionHelper(render_view, extension_dispatcher_.get()); | 102   new ExtensionHelper(render_view, extension_dispatcher_.get()); | 
| 100   if (delegate_) | 103   if (delegate_) | 
| 101     delegate_->OnViewCreated(render_view); | 104     delegate_->OnViewCreated(render_view); | 
| 102 } | 105 } | 
| 103 | 106 | 
| 104 bool ShellContentRendererClient::WillSendRequest( | 107 bool ShellContentRendererClient::WillSendRequest( | 
| 105     blink::WebFrame* frame, | 108     blink::WebFrame* frame, | 
| 106     content::PageTransition transition_type, | 109     content::PageTransition transition_type, | 
| 107     const GURL& url, | 110     const GURL& url, | 
| 108     const GURL& first_party_for_cookies, | 111     const GURL& first_party_for_cookies, | 
| 109     GURL* new_url) { | 112     GURL* new_url) { | 
| 110   // TODO(jamescook): Cause an error for bad extension scheme requests? | 113   // TODO(jamescook): Cause an error for bad extension scheme requests? | 
| 111   return false; | 114   return false; | 
| 112 } | 115 } | 
| 113 | 116 | 
| 114 void ShellContentRendererClient::DidCreateScriptContext( | 117 void ShellContentRendererClient::DidCreateScriptContext( | 
| 115     WebFrame* frame, v8::Handle<v8::Context> context, int extension_group, | 118     WebFrame* frame, | 
|  | 119     v8::Handle<v8::Context> context, | 
|  | 120     int extension_group, | 
| 116     int world_id) { | 121     int world_id) { | 
| 117   extension_dispatcher_->DidCreateScriptContext( | 122   extension_dispatcher_->DidCreateScriptContext( | 
| 118       frame, context, extension_group, world_id); | 123       frame, context, extension_group, world_id); | 
| 119 } | 124 } | 
| 120 | 125 | 
| 121 bool ShellContentRendererClient::ShouldEnableSiteIsolationPolicy() const { | 126 bool ShellContentRendererClient::ShouldEnableSiteIsolationPolicy() const { | 
| 122   // Extension renderers don't need site isolation. | 127   // Extension renderers don't need site isolation. | 
| 123   return false; | 128   return false; | 
| 124 } | 129 } | 
| 125 | 130 | 
| 126 }  // namespace apps | 131 }  // namespace extensions | 
| OLD | NEW | 
|---|