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