diff options
author | tapted@chromium.org <tapted@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-04 11:29:03 +0000 |
---|---|---|
committer | tapted@chromium.org <tapted@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-04 11:29:03 +0000 |
commit | 724efd8b4cec9db11a53ff2f7cead7aff211835a (patch) | |
tree | c1de6393b58fdd164a60f2251cfc90b273e2ad99 /ui/views_content_client | |
parent | 21b6636c8fae9e12e7b0917f2d6eefefeb42e83d (diff) | |
download | chromium_src-724efd8b4cec9db11a53ff2f7cead7aff211835a.zip chromium_src-724efd8b4cec9db11a53ff2f7cead7aff211835a.tar.gz chromium_src-724efd8b4cec9db11a53ff2f7cead7aff211835a.tar.bz2 |
MacViews: Gets views_examples_with_content_exe compiling on Mac
This splits views_content_client_main_parts_* into versions for
ChromeOS, Mac and Desktop Aura, with a per-platform Create(..) function.
ChromeOS and Desktop Aura sharing a common Aura part.
desktop_test_views_delegate.cc is moved to an _aura version, and a _mac
version added.
views_content_client now loads content_resources.pak to access sandbox
profiles required for mac.
A macviews_builder target is added to expose
views_examples_with_content_exe on Mac, and to give the fyi trybot
something to build.
BUG=366007
Review URL: https://codereview.chromium.org/297143009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@274775 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/views_content_client')
10 files changed, 294 insertions, 65 deletions
diff --git a/ui/views_content_client/views_content_browser_client.cc b/ui/views_content_client/views_content_browser_client.cc index c886506..4bc3786 100644 --- a/ui/views_content_client/views_content_browser_client.cc +++ b/ui/views_content_client/views_content_browser_client.cc @@ -21,7 +21,7 @@ ViewsContentBrowserClient::~ViewsContentBrowserClient() { content::BrowserMainParts* ViewsContentBrowserClient::CreateBrowserMainParts( const content::MainFunctionParams& parameters) { views_content_main_parts_ = - new ViewsContentClientMainParts(parameters, views_content_client_); + ViewsContentClientMainParts::Create(parameters, views_content_client_); return views_content_main_parts_; } diff --git a/ui/views_content_client/views_content_client.gyp b/ui/views_content_client/views_content_client.gyp index 100504b..1773c2a 100644 --- a/ui/views_content_client/views_content_client.gyp +++ b/ui/views_content_client/views_content_client.gyp @@ -16,7 +16,6 @@ '../../content/content_shell_and_tests.gyp:content_shell_lib', '../../third_party/icu/icu.gyp:icui18n', '../../third_party/icu/icu.gyp:icuuc', - '../aura/aura.gyp:aura', '../base/ui_base.gyp:ui_base', '../events/events.gyp:events', '../gfx/gfx.gyp:gfx', @@ -37,8 +36,25 @@ 'views_content_client_export.h', 'views_content_client_main_parts.cc', 'views_content_client_main_parts.h', + 'views_content_client_main_parts_aura.cc', + 'views_content_client_main_parts_aura.h', + 'views_content_client_main_parts_chromeos.cc', + 'views_content_client_main_parts_desktop_aura.cc', + 'views_content_client_main_parts_mac.mm', 'views_content_main_delegate.cc', ], + 'conditions': [ + ['use_aura==1', { + 'dependencies': [ + '../aura/aura.gyp:aura', + ], + }], # use_aura==1 + ['chromeos==1', { + 'sources!': [ + 'views_content_client_main_parts_desktop_aura.cc', + ] + }], # chromeos==1 + ], }, # target_name: views_content_client ], } diff --git a/ui/views_content_client/views_content_client_main_parts.cc b/ui/views_content_client/views_content_client_main_parts.cc index 00ffc49..d51ceb2 100644 --- a/ui/views_content_client/views_content_client_main_parts.cc +++ b/ui/views_content_client/views_content_client_main_parts.cc @@ -4,32 +4,10 @@ #include "ui/views_content_client/views_content_client_main_parts.h" -#include "base/bind.h" -#include "base/command_line.h" -#include "base/message_loop/message_loop.h" #include "base/run_loop.h" -#include "base/strings/string_number_conversions.h" -#include "base/threading/thread.h" -#include "base/threading/thread_restrictions.h" -#include "content/public/browser/context_factory.h" -#include "content/public/common/content_switches.h" #include "content/shell/browser/shell_browser_context.h" -#include "ui/aura/env.h" #include "ui/base/ime/input_method_initializer.h" -#include "ui/gfx/screen.h" #include "ui/views/test/desktop_test_views_delegate.h" -#include "ui/views/widget/native_widget_aura.h" -#include "ui/views_content_client/views_content_client.h" -#include "ui/wm/core/wm_state.h" - -#if defined(OS_CHROMEOS) -#include "ui/aura/test/test_screen.h" -#include "ui/aura/window.h" -#include "ui/aura/window_event_dispatcher.h" -#include "ui/wm/test/wm_test_helper.h" -#else // !defined(OS_CHROMEOS) -#include "ui/views/widget/desktop_aura/desktop_screen.h" -#endif namespace ui { @@ -42,42 +20,15 @@ ViewsContentClientMainParts::ViewsContentClientMainParts( ViewsContentClientMainParts::~ViewsContentClientMainParts() { } -void ViewsContentClientMainParts::ToolkitInitialized() { - wm_state_.reset(new ::wm::WMState); -} - void ViewsContentClientMainParts::PreMainMessageLoopRun() { ui::InitializeInputMethodForTesting(); browser_context_.reset(new content::ShellBrowserContext(false, NULL)); - - gfx::NativeView window_context = NULL; -#if defined(OS_CHROMEOS) - gfx::Screen::SetScreenInstance( - gfx::SCREEN_TYPE_NATIVE, aura::TestScreen::Create()); - // Set up basic pieces of views::corewm. - wm_test_helper_.reset(new ::wm::WMTestHelper(gfx::Size(800, 600), - content::GetContextFactory())); - // Ensure the X window gets mapped. - wm_test_helper_->host()->Show(); - // Ensure Aura knows where to open new windows. - window_context = wm_test_helper_->host()->window(); -#else - aura::Env::CreateInstance(true); - gfx::Screen::SetScreenInstance( - gfx::SCREEN_TYPE_NATIVE, views::CreateDesktopScreen()); -#endif views_delegate_.reset(new views::DesktopTestViewsDelegate); - - views_content_client_->task().Run(browser_context_.get(), window_context); } void ViewsContentClientMainParts::PostMainMessageLoopRun() { browser_context_.reset(); -#if defined(OS_CHROMEOS) - wm_test_helper_.reset(); -#endif views_delegate_.reset(); - aura::Env::DeleteInstance(); } bool ViewsContentClientMainParts::MainMessageLoopRun(int* result_code) { diff --git a/ui/views_content_client/views_content_client_main_parts.h b/ui/views_content_client/views_content_client_main_parts.h index bfaf091..113e352 100644 --- a/ui/views_content_client/views_content_client_main_parts.h +++ b/ui/views_content_client/views_content_client_main_parts.h @@ -18,24 +18,20 @@ namespace views { class ViewsDelegate; } -namespace wm { -class WMState; -class WMTestHelper; -} - namespace ui { class ViewsContentClient; class ViewsContentClientMainParts : public content::BrowserMainParts { public: - ViewsContentClientMainParts( + // Platform-specific create function. + static ViewsContentClientMainParts* Create( const content::MainFunctionParams& content_params, ViewsContentClient* views_content_client); + virtual ~ViewsContentClientMainParts(); // content::BrowserMainParts: - virtual void ToolkitInitialized() OVERRIDE; virtual void PreMainMessageLoopRun() OVERRIDE; virtual bool MainMessageLoopRun(int* result_code) OVERRIDE; virtual void PostMainMessageLoopRun() OVERRIDE; @@ -44,18 +40,20 @@ class ViewsContentClientMainParts : public content::BrowserMainParts { return browser_context_.get(); } + ViewsContentClient* views_content_client() { + return views_content_client_; + } + + protected: + ViewsContentClientMainParts( + const content::MainFunctionParams& content_params, + ViewsContentClient* views_content_client); + private: scoped_ptr<content::ShellBrowserContext> browser_context_; scoped_ptr<views::ViewsDelegate> views_delegate_; -#if defined(OS_CHROMEOS) - // Enable a minimal set of views::corewm to be initialized. - scoped_ptr<wm::WMTestHelper> wm_test_helper_; -#endif - - scoped_ptr<wm::WMState> wm_state_; - ViewsContentClient* views_content_client_; DISALLOW_COPY_AND_ASSIGN(ViewsContentClientMainParts); diff --git a/ui/views_content_client/views_content_client_main_parts_aura.cc b/ui/views_content_client/views_content_client_main_parts_aura.cc new file mode 100644 index 0000000..5e1c69a --- /dev/null +++ b/ui/views_content_client/views_content_client_main_parts_aura.cc @@ -0,0 +1,33 @@ +// 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 "ui/views_content_client/views_content_client_main_parts_aura.h" + +#include "ui/aura/env.h" +#include "ui/wm/core/wm_state.h" + +namespace ui { + +ViewsContentClientMainPartsAura::ViewsContentClientMainPartsAura( + const content::MainFunctionParams& content_params, + ViewsContentClient* views_content_client) + : ViewsContentClientMainParts(content_params, views_content_client) { +} + +ViewsContentClientMainPartsAura::~ViewsContentClientMainPartsAura() { +} + +void ViewsContentClientMainPartsAura::ToolkitInitialized() { + ViewsContentClientMainParts::ToolkitInitialized(); + + wm_state_.reset(new ::wm::WMState); +} + +void ViewsContentClientMainPartsAura::PostMainMessageLoopRun() { + aura::Env::DeleteInstance(); + + ViewsContentClientMainParts::PostMainMessageLoopRun(); +} + +} // namespace ui diff --git a/ui/views_content_client/views_content_client_main_parts_aura.h b/ui/views_content_client/views_content_client_main_parts_aura.h new file mode 100644 index 0000000..06b273a --- /dev/null +++ b/ui/views_content_client/views_content_client_main_parts_aura.h @@ -0,0 +1,37 @@ +// 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. + +#ifndef UI_VIEWS_CONTENT_CLIENT_VIEWS_CONTENT_CLIENT_MAIN_PARTS_AURA_H_ +#define UI_VIEWS_CONTENT_CLIENT_VIEWS_CONTENT_CLIENT_MAIN_PARTS_AURA_H_ + +#include "base/macros.h" +#include "base/memory/scoped_ptr.h" +#include "ui/views_content_client/views_content_client_main_parts.h" + +namespace wm { +class WMState; +} + +namespace ui { + +class ViewsContentClientMainPartsAura : public ViewsContentClientMainParts { + protected: + ViewsContentClientMainPartsAura( + const content::MainFunctionParams& content_params, + ViewsContentClient* views_content_client); + virtual ~ViewsContentClientMainPartsAura(); + + // content::BrowserMainParts: + virtual void ToolkitInitialized() OVERRIDE; + virtual void PostMainMessageLoopRun() OVERRIDE; + + private: + scoped_ptr< ::wm::WMState> wm_state_; + + DISALLOW_COPY_AND_ASSIGN(ViewsContentClientMainPartsAura); +}; + +} // namespace ui + +#endif // UI_VIEWS_CONTENT_CLIENT_VIEWS_CONTENT_CLIENT_MAIN_PARTS_AURA_H_ diff --git a/ui/views_content_client/views_content_client_main_parts_chromeos.cc b/ui/views_content_client/views_content_client_main_parts_chromeos.cc new file mode 100644 index 0000000..034cba9 --- /dev/null +++ b/ui/views_content_client/views_content_client_main_parts_chromeos.cc @@ -0,0 +1,75 @@ +// 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/test/wm_test_helper.h" + +namespace ui { + +namespace { + +class ViewsContentClientMainPartsChromeOS + : public ViewsContentClientMainPartsAura { + public: + ViewsContentClientMainPartsChromeOS( + const content::MainFunctionParams& content_params, + ViewsContentClient* views_content_client); + virtual ~ViewsContentClientMainPartsChromeOS() {} + + // content::BrowserMainParts: + virtual void PreMainMessageLoopRun() OVERRIDE; + virtual void PostMainMessageLoopRun() OVERRIDE; + + private: + // Enable a minimal set of views::corewm to be initialized. + scoped_ptr< ::wm::WMTestHelper> wm_test_helper_; + + 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::Screen::SetScreenInstance( + gfx::SCREEN_TYPE_NATIVE, aura::TestScreen::Create()); + // Set up basic pieces of views::corewm. + wm_test_helper_.reset(new ::wm::WMTestHelper(gfx::Size(800, 600), + content::GetContextFactory())); + // Ensure the X window gets mapped. + wm_test_helper_->host()->Show(); + + // Ensure Aura knows where to open new windows. + views_content_client()->task().Run(browser_context(), + wm_test_helper_->host()->window()); +} + +void ViewsContentClientMainPartsChromeOS::PostMainMessageLoopRun() { + wm_test_helper_.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 diff --git a/ui/views_content_client/views_content_client_main_parts_desktop_aura.cc b/ui/views_content_client/views_content_client_main_parts_desktop_aura.cc new file mode 100644 index 0000000..ec8b75b --- /dev/null +++ b/ui/views_content_client/views_content_client_main_parts_desktop_aura.cc @@ -0,0 +1,57 @@ +// 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/shell/browser/shell_browser_context.h" +#include "ui/aura/env.h" +#include "ui/gfx/screen.h" +#include "ui/views/widget/desktop_aura/desktop_screen.h" +#include "ui/views_content_client/views_content_client.h" +#include "ui/views_content_client/views_content_client_main_parts_aura.h" + +namespace ui { + +namespace { + +class ViewsContentClientMainPartsDesktopAura + : public ViewsContentClientMainPartsAura { + public: + ViewsContentClientMainPartsDesktopAura( + const content::MainFunctionParams& content_params, + ViewsContentClient* views_content_client); + virtual ~ViewsContentClientMainPartsDesktopAura() {} + + // content::BrowserMainParts: + virtual void PreMainMessageLoopRun() OVERRIDE; + + private: + DISALLOW_COPY_AND_ASSIGN(ViewsContentClientMainPartsDesktopAura); +}; + +ViewsContentClientMainPartsDesktopAura::ViewsContentClientMainPartsDesktopAura( + const content::MainFunctionParams& content_params, + ViewsContentClient* views_content_client) + : ViewsContentClientMainPartsAura(content_params, views_content_client) { +} + +void ViewsContentClientMainPartsDesktopAura::PreMainMessageLoopRun() { + ViewsContentClientMainPartsAura::PreMainMessageLoopRun(); + + aura::Env::CreateInstance(true); + gfx::Screen::SetScreenInstance( + gfx::SCREEN_TYPE_NATIVE, views::CreateDesktopScreen()); + + views_content_client()->task().Run(browser_context(), NULL); +} + +} // namespace + +// static +ViewsContentClientMainParts* ViewsContentClientMainParts::Create( + const content::MainFunctionParams& content_params, + ViewsContentClient* views_content_client) { + return new ViewsContentClientMainPartsDesktopAura( + content_params, views_content_client); +} + +} // namespace ui diff --git a/ui/views_content_client/views_content_client_main_parts_mac.mm b/ui/views_content_client/views_content_client_main_parts_mac.mm new file mode 100644 index 0000000..8d2f12b --- /dev/null +++ b/ui/views_content_client/views_content_client_main_parts_mac.mm @@ -0,0 +1,55 @@ +// 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 "base/files/file_path.h" +#include "base/path_service.h" +#include "content/public/common/content_paths.h" +#include "content/shell/browser/shell_browser_context.h" +#include "ui/views_content_client/views_content_client.h" +#include "ui/views_content_client/views_content_client_main_parts.h" + +namespace ui { + +namespace { + +class ViewsContentClientMainPartsMac : public ViewsContentClientMainParts { + public: + ViewsContentClientMainPartsMac( + const content::MainFunctionParams& content_params, + ViewsContentClient* views_content_client); + virtual ~ViewsContentClientMainPartsMac() {} + + // content::BrowserMainParts: + virtual void PreMainMessageLoopRun() OVERRIDE; + + private: + DISALLOW_COPY_AND_ASSIGN(ViewsContentClientMainPartsMac); +}; + +ViewsContentClientMainPartsMac::ViewsContentClientMainPartsMac( + const content::MainFunctionParams& content_params, + ViewsContentClient* views_content_client) + : ViewsContentClientMainParts(content_params, views_content_client) { + // Cache the child process path to avoid triggering an AssertIOAllowed. + base::FilePath child_process_exe; + PathService::Get(content::CHILD_PROCESS_EXE, &child_process_exe); +} + +void ViewsContentClientMainPartsMac::PreMainMessageLoopRun() { + ViewsContentClientMainParts::PreMainMessageLoopRun(); + + views_content_client()->task().Run(browser_context(), NULL); +} + +} // namespace + +// static +ViewsContentClientMainParts* ViewsContentClientMainParts::Create( + const content::MainFunctionParams& content_params, + ViewsContentClient* views_content_client) { + return + new ViewsContentClientMainPartsMac(content_params, views_content_client); +} + +} // namespace ui diff --git a/ui/views_content_client/views_content_main_delegate.cc b/ui/views_content_client/views_content_main_delegate.cc index a97c812..1fb3a69 100644 --- a/ui/views_content_client/views_content_main_delegate.cc +++ b/ui/views_content_client/views_content_main_delegate.cc @@ -61,6 +61,13 @@ void ViewsContentMainDelegate::PreSandboxStartup() { base::FilePath ui_test_pak_path; DCHECK(PathService::Get(ui::UI_TEST_PAK, &ui_test_pak_path)); ui::ResourceBundle::InitSharedInstanceWithPakPath(ui_test_pak_path); + + // Load content resources to provide, e.g., sandbox configuration data on Mac. + base::FilePath content_resources_pak_path; + PathService::Get(base::DIR_MODULE, &content_resources_pak_path); + ui::ResourceBundle::GetSharedInstance().AddDataPackFromPath( + content_resources_pak_path.AppendASCII("content_resources.pak"), + ui::SCALE_FACTOR_100P); } content::ContentBrowserClient* |