1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ui/keyboard/keyboard.h"
6
7#include "base/files/file_path.h"
8#include "base/memory/singleton.h"
9#include "base/path_service.h"
10#include "content/public/browser/browser_context.h"
11#include "content/public/browser/web_ui_controller_factory.h"
12#include "ui/base/resource/resource_bundle.h"
13#include "ui/keyboard/keyboard_constants.h"
14#include "ui/keyboard/keyboard_ui_controller.h"
15#include "url/gurl.h"
16
17namespace {
18
19using content::BrowserContext;
20using content::WebUI;
21using content::WebUIController;
22
23class KeyboardWebUIControllerFactory : public content::WebUIControllerFactory {
24 public:
25  // |WebUIControllerFactory| implementation:
26  virtual content::WebUI::TypeID GetWebUIType(
27      content::BrowserContext* browser_context,
28      const GURL& url) const OVERRIDE {
29    if (url == GURL(keyboard::kKeyboardWebUIURL))
30      return const_cast<KeyboardWebUIControllerFactory*>(this);
31
32    return WebUI::kNoWebUI;
33  }
34  virtual bool UseWebUIForURL(content::BrowserContext* browser_context,
35                              const GURL& url) const OVERRIDE {
36    return GetWebUIType(browser_context, url) != WebUI::kNoWebUI;
37  }
38  virtual bool UseWebUIBindingsForURL(content::BrowserContext* browser_context,
39                                      const GURL& url) const OVERRIDE {
40    return UseWebUIForURL(browser_context, url);
41  }
42  virtual content::WebUIController* CreateWebUIControllerForURL(
43      content::WebUI* web_ui,
44      const GURL& url) const OVERRIDE {
45    if (url == GURL(keyboard::kKeyboardWebUIURL))
46      return new keyboard::KeyboardUIController(web_ui);
47    return NULL;
48  }
49
50  static KeyboardWebUIControllerFactory* GetInstance() {
51    return Singleton<KeyboardWebUIControllerFactory>::get();
52  }
53
54 protected:
55  KeyboardWebUIControllerFactory() {}
56  virtual ~KeyboardWebUIControllerFactory() {}
57
58 private:
59  friend struct DefaultSingletonTraits<KeyboardWebUIControllerFactory>;
60
61  DISALLOW_COPY_AND_ASSIGN(KeyboardWebUIControllerFactory);
62};
63
64}  // namespace
65
66namespace keyboard {
67
68void InitializeKeyboard() {
69  static bool initialized = false;
70  if (initialized)
71    return;
72  initialized = true;
73
74  base::FilePath pak_dir;
75  PathService::Get(base::DIR_MODULE, &pak_dir);
76  base::FilePath pak_file = pak_dir.Append(
77      FILE_PATH_LITERAL("keyboard_resources.pak"));
78  ui::ResourceBundle::GetSharedInstance().AddDataPackFromPath(
79      pak_file, ui::SCALE_FACTOR_100P);
80
81  content::WebUIControllerFactory::RegisterFactory(
82      KeyboardWebUIControllerFactory::GetInstance());
83}
84
85}  // namespace keyboard
86