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