| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/public/test/mock_render_thread.h" | 5 #include "content/public/test/mock_render_thread.h" | 
| 6 | 6 | 
| 7 #include "base/logging.h" | 7 #include "base/logging.h" | 
| 8 #include "base/single_thread_task_runner.h" | 8 #include "base/single_thread_task_runner.h" | 
| 9 #include "base/threading/thread_task_runner_handle.h" | 9 #include "base/threading/thread_task_runner_handle.h" | 
| 10 #include "build/build_config.h" | 10 #include "build/build_config.h" | 
| 11 #include "content/common/frame_messages.h" | 11 #include "content/common/frame_messages.h" | 
|  | 12 #include "content/common/render_message_filter.mojom.h" | 
| 12 #include "content/common/view_messages.h" | 13 #include "content/common/view_messages.h" | 
| 13 #include "content/public/renderer/render_thread_observer.h" | 14 #include "content/public/renderer/render_thread_observer.h" | 
|  | 15 #include "content/renderer/render_thread_impl.h" | 
| 14 #include "content/renderer/render_view_impl.h" | 16 #include "content/renderer/render_view_impl.h" | 
| 15 #include "ipc/ipc_message_utils.h" | 17 #include "ipc/ipc_message_utils.h" | 
| 16 #include "ipc/ipc_sync_message.h" | 18 #include "ipc/ipc_sync_message.h" | 
| 17 #include "ipc/message_filter.h" | 19 #include "ipc/message_filter.h" | 
| 18 #include "services/shell/public/cpp/interface_provider.h" | 20 #include "services/shell/public/cpp/interface_provider.h" | 
| 19 #include "services/shell/public/cpp/interface_registry.h" | 21 #include "services/shell/public/cpp/interface_registry.h" | 
| 20 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" | 
| 21 #include "third_party/WebKit/public/web/WebScriptController.h" | 23 #include "third_party/WebKit/public/web/WebScriptController.h" | 
| 22 | 24 | 
| 23 namespace content { | 25 namespace content { | 
| 24 | 26 | 
|  | 27 namespace { | 
|  | 28 | 
|  | 29 class MockRenderMessageFilterImpl : public mojom::RenderMessageFilter { | 
|  | 30  public: | 
|  | 31   explicit MockRenderMessageFilterImpl(MockRenderThread* thread) | 
|  | 32       : thread_(thread) {} | 
|  | 33   ~MockRenderMessageFilterImpl() override {} | 
|  | 34 | 
|  | 35   // mojom::RenderMessageFilter: | 
|  | 36   void GenerateRoutingID(const GenerateRoutingIDCallback& callback) override { | 
|  | 37     NOTREACHED(); | 
|  | 38   } | 
|  | 39 | 
|  | 40   void CreateWindow(mojom::CreateWindowParamsPtr params, | 
|  | 41                     const CreateWindowCallback& callback) override { | 
|  | 42     mojom::CreateWindowReplyPtr reply = mojom::CreateWindowReply::New(); | 
|  | 43     thread_->OnCreateWindow(*params, reply.get()); | 
|  | 44     callback.Run(std::move(reply)); | 
|  | 45   } | 
|  | 46 | 
|  | 47  private: | 
|  | 48   MockRenderThread* const thread_; | 
|  | 49 }; | 
|  | 50 | 
|  | 51 }  // namespace | 
|  | 52 | 
| 25 MockRenderThread::MockRenderThread() | 53 MockRenderThread::MockRenderThread() | 
| 26     : routing_id_(0), | 54     : routing_id_(0), | 
| 27       opener_id_(0), | 55       opener_id_(0), | 
| 28       new_window_routing_id_(0), | 56       new_window_routing_id_(0), | 
| 29       new_window_main_frame_routing_id_(0), | 57       new_window_main_frame_routing_id_(0), | 
| 30       new_window_main_frame_widget_routing_id_(0), | 58       new_window_main_frame_widget_routing_id_(0), | 
| 31       new_frame_routing_id_(0) {} | 59       new_frame_routing_id_(0), | 
|  | 60       mock_render_message_filter_(new MockRenderMessageFilterImpl(this)) { | 
|  | 61   RenderThreadImpl::SetRenderMessageFilterForTesting( | 
|  | 62       mock_render_message_filter_.get()); | 
|  | 63 } | 
| 32 | 64 | 
| 33 MockRenderThread::~MockRenderThread() { | 65 MockRenderThread::~MockRenderThread() { | 
| 34   while (!filters_.empty()) { | 66   while (!filters_.empty()) { | 
| 35     scoped_refptr<IPC::MessageFilter> filter = filters_.back(); | 67     scoped_refptr<IPC::MessageFilter> filter = filters_.back(); | 
| 36     filters_.pop_back(); | 68     filters_.pop_back(); | 
| 37     filter->OnFilterRemoved(); | 69     filter->OnFilterRemoved(); | 
| 38   } | 70   } | 
| 39 } | 71 } | 
| 40 | 72 | 
| 41 // Called by the Widget. Used to send messages to the browser. | 73 // Called by the Widget. Used to send messages to the browser. | 
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 211 } | 243 } | 
| 212 | 244 | 
| 213 // The Widget expects to be returned valid route_id. | 245 // The Widget expects to be returned valid route_id. | 
| 214 void MockRenderThread::OnCreateWidget(int opener_id, | 246 void MockRenderThread::OnCreateWidget(int opener_id, | 
| 215                                       blink::WebPopupType popup_type, | 247                                       blink::WebPopupType popup_type, | 
| 216                                       int* route_id) { | 248                                       int* route_id) { | 
| 217   opener_id_ = opener_id; | 249   opener_id_ = opener_id; | 
| 218   *route_id = routing_id_; | 250   *route_id = routing_id_; | 
| 219 } | 251 } | 
| 220 | 252 | 
| 221 // The View expects to be returned a valid route_id different from its own. |  | 
| 222 void MockRenderThread::OnCreateWindow( |  | 
| 223     const ViewHostMsg_CreateWindow_Params& params, |  | 
| 224     ViewHostMsg_CreateWindow_Reply* reply) { |  | 
| 225   reply->route_id = new_window_routing_id_; |  | 
| 226   reply->main_frame_route_id = new_window_main_frame_routing_id_; |  | 
| 227   reply->main_frame_widget_route_id = new_window_main_frame_widget_routing_id_; |  | 
| 228   reply->cloned_session_storage_namespace_id = 0; |  | 
| 229 } |  | 
| 230 |  | 
| 231 // The Frame expects to be returned a valid route_id different from its own. | 253 // The Frame expects to be returned a valid route_id different from its own. | 
| 232 void MockRenderThread::OnCreateChildFrame( | 254 void MockRenderThread::OnCreateChildFrame( | 
| 233     const FrameHostMsg_CreateChildFrame_Params& params, | 255     const FrameHostMsg_CreateChildFrame_Params& params, | 
| 234     int* new_render_frame_id) { | 256     int* new_render_frame_id) { | 
| 235   *new_render_frame_id = new_frame_routing_id_++; | 257   *new_render_frame_id = new_frame_routing_id_++; | 
| 236 } | 258 } | 
| 237 | 259 | 
| 238 bool MockRenderThread::OnControlMessageReceived(const IPC::Message& msg) { | 260 bool MockRenderThread::OnControlMessageReceived(const IPC::Message& msg) { | 
| 239   base::ObserverListBase<RenderThreadObserver>::Iterator it(&observers_); | 261   base::ObserverListBase<RenderThreadObserver>::Iterator it(&observers_); | 
| 240   RenderThreadObserver* observer; | 262   RenderThreadObserver* observer; | 
| 241   while ((observer = it.GetNext()) != NULL) { | 263   while ((observer = it.GetNext()) != NULL) { | 
| 242     if (observer->OnControlMessageReceived(msg)) | 264     if (observer->OnControlMessageReceived(msg)) | 
| 243       return true; | 265       return true; | 
| 244   } | 266   } | 
| 245   return OnMessageReceived(msg); | 267   return OnMessageReceived(msg); | 
| 246 } | 268 } | 
| 247 | 269 | 
| 248 bool MockRenderThread::OnMessageReceived(const IPC::Message& msg) { | 270 bool MockRenderThread::OnMessageReceived(const IPC::Message& msg) { | 
| 249   // Save the message in the sink. | 271   // Save the message in the sink. | 
| 250   sink_.OnMessageReceived(msg); | 272   sink_.OnMessageReceived(msg); | 
| 251 | 273 | 
| 252   bool handled = true; | 274   bool handled = true; | 
| 253   IPC_BEGIN_MESSAGE_MAP(MockRenderThread, msg) | 275   IPC_BEGIN_MESSAGE_MAP(MockRenderThread, msg) | 
| 254     IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWidget, OnCreateWidget) | 276     IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWidget, OnCreateWidget) | 
| 255     IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWindow, OnCreateWindow) |  | 
| 256     IPC_MESSAGE_HANDLER(FrameHostMsg_CreateChildFrame, OnCreateChildFrame) | 277     IPC_MESSAGE_HANDLER(FrameHostMsg_CreateChildFrame, OnCreateChildFrame) | 
| 257     IPC_MESSAGE_UNHANDLED(handled = false) | 278     IPC_MESSAGE_UNHANDLED(handled = false) | 
| 258   IPC_END_MESSAGE_MAP() | 279   IPC_END_MESSAGE_MAP() | 
| 259   return handled; | 280   return handled; | 
| 260 } | 281 } | 
| 261 | 282 | 
| 262 #if defined(OS_WIN) | 283 #if defined(OS_WIN) | 
| 263 void MockRenderThread::OnDuplicateSection( | 284 void MockRenderThread::OnDuplicateSection( | 
| 264     base::SharedMemoryHandle renderer_handle, | 285     base::SharedMemoryHandle renderer_handle, | 
| 265     base::SharedMemoryHandle* browser_handle) { | 286     base::SharedMemoryHandle* browser_handle) { | 
| 266   // We don't have to duplicate the input handles since RenderViewTest does not | 287   // We don't have to duplicate the input handles since RenderViewTest does not | 
| 267   // separate a browser process from a renderer process. | 288   // separate a browser process from a renderer process. | 
| 268   *browser_handle = renderer_handle; | 289   *browser_handle = renderer_handle; | 
| 269 } | 290 } | 
| 270 #endif  // defined(OS_WIN) | 291 #endif  // defined(OS_WIN) | 
| 271 | 292 | 
|  | 293 // The View expects to be returned a valid route_id different from its own. | 
|  | 294 void MockRenderThread::OnCreateWindow(const mojom::CreateWindowParams& params, | 
|  | 295                                       mojom::CreateWindowReply* reply) { | 
|  | 296   reply->route_id = new_window_routing_id_; | 
|  | 297   reply->main_frame_route_id = new_window_main_frame_routing_id_; | 
|  | 298   reply->main_frame_widget_route_id = new_window_main_frame_widget_routing_id_; | 
|  | 299   reply->cloned_session_storage_namespace_id = 0; | 
|  | 300 } | 
|  | 301 | 
| 272 }  // namespace content | 302 }  // namespace content | 
| OLD | NEW | 
|---|