| // 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 "apps/shell/app/shell_main_delegate.h" |
| #include "apps/shell/browser/shell_browser_main_delegate.h" |
| #include "apps/shell/browser/shell_desktop_controller.h" |
| #include "apps/shell/browser/shell_extension_system.h" |
| #include "apps/shell/renderer/shell_renderer_main_delegate.h" |
| #include "athena/content/public/content_activity_factory.h" |
| #include "athena/content/public/content_app_model_builder.h" |
| #include "athena/home/public/home_card.h" |
| #include "athena/main/athena_app_window_controller.h" |
| #include "athena/main/athena_launcher.h" |
| #include "athena/main/placeholder.h" |
| #include "athena/main/url_search_provider.h" |
| #include "athena/virtual_keyboard/public/virtual_keyboard_bindings.h" |
| #include "athena/virtual_keyboard/public/virtual_keyboard_manager.h" |
| #include "base/command_line.h" |
| #include "base/file_util.h" |
| #include "content/public/app/content_main.h" |
| #include "ui/aura/window_tree_host.h" |
| #include "ui/wm/core/visibility_controller.h" |
| |
| namespace { |
| const char kAppSwitch[] = "app"; |
| |
| // We want to load the sample calculator app by default, for a while. Expecting |
| // to run athena_main at src/ |
| const char kDefaultAppPath[] = |
| "chrome/common/extensions/docs/examples/apps/calculator/app"; |
| } // namespace |
| |
| class AthenaBrowserMainDelegate : public apps::ShellBrowserMainDelegate { |
| public: |
| AthenaBrowserMainDelegate() {} |
| virtual ~AthenaBrowserMainDelegate() {} |
| |
| // apps::ShellBrowserMainDelegate: |
| virtual void Start(content::BrowserContext* context) OVERRIDE { |
| base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| base::FilePath app_dir = base::FilePath::FromUTF8Unsafe( |
| command_line->HasSwitch(kAppSwitch) ? |
| command_line->GetSwitchValueNative(kAppSwitch) : |
| kDefaultAppPath); |
| |
| base::FilePath app_absolute_dir = base::MakeAbsoluteFilePath(app_dir); |
| if (base::DirectoryExists(app_absolute_dir)) { |
| extensions::ShellExtensionSystem* extension_system = |
| static_cast<extensions::ShellExtensionSystem*>( |
| extensions::ExtensionSystem::Get(context)); |
| extension_system->LoadApp(app_absolute_dir); |
| } |
| |
| athena::StartAthena( |
| apps::ShellDesktopController::instance()->host()->window(), |
| new athena::ContentActivityFactory(), |
| new athena::ContentAppModelBuilder(context)); |
| athena::HomeCard::Get()->RegisterSearchProvider( |
| new athena::UrlSearchProvider(context)); |
| athena::VirtualKeyboardManager::Create(context); |
| |
| CreateTestPages(context); |
| } |
| |
| virtual void Shutdown() OVERRIDE { athena::ShutdownAthena(); } |
| |
| virtual apps::ShellDesktopController* CreateDesktopController() OVERRIDE { |
| // TODO(mukai): create Athena's own ShellDesktopController subclass so that |
| // it can initialize its own window manager logic. |
| apps::ShellDesktopController* desktop = new apps::ShellDesktopController(); |
| desktop->SetAppWindowController(new athena::AthenaAppWindowController()); |
| return desktop; |
| } |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(AthenaBrowserMainDelegate); |
| }; |
| |
| class AthenaRendererMainDelegate : public apps::ShellRendererMainDelegate { |
| public: |
| AthenaRendererMainDelegate() {} |
| virtual ~AthenaRendererMainDelegate() {} |
| |
| private: |
| // apps::ShellRendererMainDelegate: |
| virtual void OnThreadStarted(content::RenderThread* thread) OVERRIDE {} |
| |
| virtual void OnViewCreated(content::RenderView* render_view) OVERRIDE { |
| athena::VirtualKeyboardBindings::Create(render_view); |
| } |
| |
| DISALLOW_COPY_AND_ASSIGN(AthenaRendererMainDelegate); |
| }; |
| |
| class AthenaMainDelegate : public apps::ShellMainDelegate { |
| public: |
| AthenaMainDelegate() {} |
| virtual ~AthenaMainDelegate() {} |
| |
| private: |
| // apps::ShellMainDelegate: |
| virtual apps::ShellBrowserMainDelegate* CreateShellBrowserMainDelegate() |
| OVERRIDE { |
| return new AthenaBrowserMainDelegate(); |
| } |
| |
| virtual scoped_ptr<apps::ShellRendererMainDelegate> |
| CreateShellRendererMainDelegate() OVERRIDE { |
| return scoped_ptr<apps::ShellRendererMainDelegate>( |
| new AthenaRendererMainDelegate()); |
| } |
| |
| DISALLOW_COPY_AND_ASSIGN(AthenaMainDelegate); |
| }; |
| |
| int main(int argc, const char** argv) { |
| AthenaMainDelegate delegate; |
| content::ContentMainParams params(&delegate); |
| |
| params.argc = argc; |
| params.argv = argv; |
| |
| return content::ContentMain(params); |
| } |