| // 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. |
| |
| #include "content/public/browser/context_factory.h" |
| #include "content/shell/browser/shell_browser_context.h" |
| #include "ui/aura/test/test_screen.h" |
| #include "ui/aura/window.h" |
| #include "ui/gfx/screen.h" |
| #include "ui/views_content_client/views_content_client.h" |
| #include "ui/views_content_client/views_content_client_main_parts_aura.h" |
| #include "ui/wm/core/nested_accelerator_controller.h" |
| #include "ui/wm/core/nested_accelerator_delegate.h" |
| #include "ui/wm/test/wm_test_helper.h" |
| |
| namespace ui { |
| |
| namespace { |
| |
| // A dummy version of the delegate usually provided by the Ash Shell. |
| class NestedAcceleratorDelegate : public ::wm::NestedAcceleratorDelegate { |
| public: |
| NestedAcceleratorDelegate() {} |
| ~NestedAcceleratorDelegate() override {} |
| |
| // ::wm::NestedAcceleratorDelegate: |
| Result ProcessAccelerator(const ui::Accelerator& accelerator) override { |
| return RESULT_NOT_PROCESSED; |
| } |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(NestedAcceleratorDelegate); |
| }; |
| |
| class ViewsContentClientMainPartsChromeOS |
| : public ViewsContentClientMainPartsAura { |
| public: |
| ViewsContentClientMainPartsChromeOS( |
| const content::MainFunctionParams& content_params, |
| ViewsContentClient* views_content_client); |
| ~ViewsContentClientMainPartsChromeOS() override {} |
| |
| // content::BrowserMainParts: |
| void PreMainMessageLoopRun() override; |
| void PostMainMessageLoopRun() override; |
| |
| private: |
| // Enable a minimal set of views::corewm to be initialized. |
| scoped_ptr<gfx::Screen> test_screen_; |
| scoped_ptr< ::wm::WMTestHelper> wm_test_helper_; |
| scoped_ptr< ::wm::NestedAcceleratorController> nested_accelerator_controller_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ViewsContentClientMainPartsChromeOS); |
| }; |
| |
| ViewsContentClientMainPartsChromeOS::ViewsContentClientMainPartsChromeOS( |
| const content::MainFunctionParams& content_params, |
| ViewsContentClient* views_content_client) |
| : ViewsContentClientMainPartsAura(content_params, views_content_client) { |
| } |
| |
| void ViewsContentClientMainPartsChromeOS::PreMainMessageLoopRun() { |
| ViewsContentClientMainPartsAura::PreMainMessageLoopRun(); |
| |
| gfx::Size host_size(800, 600); |
| test_screen_.reset(aura::TestScreen::Create(host_size)); |
| gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, test_screen_.get()); |
| // Set up basic pieces of views::corewm. |
| wm_test_helper_.reset( |
| new ::wm::WMTestHelper(host_size, content::GetContextFactory())); |
| // Ensure the X window gets mapped. |
| wm_test_helper_->host()->Show(); |
| |
| // Ensure Aura knows where to open new windows. |
| aura::Window* root_window = wm_test_helper_->host()->window(); |
| views_content_client()->task().Run(browser_context(), root_window); |
| |
| nested_accelerator_controller_.reset( |
| new ::wm::NestedAcceleratorController(new NestedAcceleratorDelegate)); |
| aura::client::SetDispatcherClient(root_window, |
| nested_accelerator_controller_.get()); |
| } |
| |
| void ViewsContentClientMainPartsChromeOS::PostMainMessageLoopRun() { |
| aura::client::SetDispatcherClient(wm_test_helper_->host()->window(), NULL); |
| nested_accelerator_controller_.reset(); |
| wm_test_helper_.reset(); |
| test_screen_.reset(); |
| |
| ViewsContentClientMainPartsAura::PostMainMessageLoopRun(); |
| } |
| |
| } // namespace |
| |
| // static |
| ViewsContentClientMainParts* ViewsContentClientMainParts::Create( |
| const content::MainFunctionParams& content_params, |
| ViewsContentClient* views_content_client) { |
| return new ViewsContentClientMainPartsChromeOS( |
| content_params, views_content_client); |
| } |
| |
| } // namespace ui |