Chromium Code Reviews| Index: chrome/browser/profiles/profile_impl.cc |
| =================================================================== |
| --- chrome/browser/profiles/profile_impl.cc (revision 71744) |
| +++ chrome/browser/profiles/profile_impl.cc (working copy) |
| @@ -13,6 +13,7 @@ |
| #include "base/path_service.h" |
| #include "base/scoped_ptr.h" |
| #include "base/string_number_conversions.h" |
| +#include "base/string_piece.h" |
| #include "base/string_util.h" |
| #include "chrome/browser/about_flags.h" |
| #include "chrome/browser/appcache/chrome_appcache_service.h" |
| @@ -30,6 +31,7 @@ |
| #include "chrome/browser/dom_ui/ntp_resource_cache.h" |
| #include "chrome/browser/download/download_manager.h" |
| #include "chrome/browser/extensions/default_apps.h" |
| +#include "chrome/browser/extensions/extension_accessibility_api.h" |
| #include "chrome/browser/extensions/extension_devtools_manager.h" |
| #include "chrome/browser/extensions/extension_error_reporter.h" |
| #include "chrome/browser/extensions/extension_info_map.h" |
| @@ -91,6 +93,7 @@ |
| #include "chrome/common/pref_names.h" |
| #include "chrome/common/render_messages.h" |
| #include "grit/browser_resources.h" |
| +#include "grit/component_extension_resources_map.h" |
| #include "grit/locale_settings.h" |
| #include "net/base/transport_security_state.h" |
| #include "webkit/database/database_tracker.h" |
| @@ -382,6 +385,15 @@ |
| component_extensions.push_back( |
| std::make_pair("bookmark_manager", IDR_BOOKMARKS_MANIFEST)); |
| +#if defined(OS_CHROMEOS) |
| + // Register access extensions only if accessibility is enabled. |
| + if (ExtensionAccessibilityEventRouter::GetInstance()-> |
| + IsAccessibilityEnabled()) { |
| + component_extensions.push_back( |
| + std::make_pair("access_chromevox", IDR_CHROMEVOX_MANIFEST)); |
| + } |
| +#endif |
| + |
| #if defined(TOUCH_UI) |
| component_extensions.push_back( |
| std::make_pair("keyboard", IDR_KEYBOARD_MANIFEST)); |
| @@ -400,6 +412,15 @@ |
| NOTREACHED(); |
| } |
| +#if defined(OS_CHROMEOS) |
| + if (StartsWithASCII(iter->first, "access_", true)) { |
| + path = GetPath().AppendASCII( |
| + ExtensionService::kAccessibilityInstallDirectoryName); |
| + path = path.AppendASCII(iter->first); |
| + ExtractAccessibilityExtensionResources(iter->first, path.DirName()); |
|
asargent_no_longer_on_chrome
2011/01/19 19:14:15
Doesn't this mean you'll be doing this unpacking e
|
| + } |
| +#endif |
| + |
| std::string manifest = |
| ResourceBundle::GetSharedInstance().GetRawDataResource( |
| iter->second).as_string(); |
| @@ -408,6 +429,29 @@ |
| } |
| } |
| +void ProfileImpl::ExtractAccessibilityExtensionResources( |
| + const std::string dir_name, const FilePath root_path) { |
| + for (size_t i = 0; i < kComponentExtensionResourcesSize; ++i) { |
| + if (StartsWithASCII(kComponentExtensionResources[i].name, dir_name, true)) { |
| + FilePath file_path = root_path.AppendASCII( |
| + kComponentExtensionResources[i].name); |
| +#if defined(OS_WIN) |
| + file_path = file_path.NormalizeWindowsPathSeparators(); |
| +#endif |
| + if (!file_util::PathExists(file_path.DirName())) { |
| + file_util::CreateDirectory(file_path.DirName()); |
| + } |
| + base::StringPiece content = |
| + ResourceBundle::GetSharedInstance().GetRawDataResource( |
| + kComponentExtensionResources[i].value); |
| + if (file_util::WriteFile(file_path, content.data(), content.length()) == |
| + -1) { |
| + LOG(ERROR) << "ERROR unpacking access extension resource."; |
| + } |
| + } |
| + } |
| +} |
| + |
| void ProfileImpl::InstallDefaultApps() { |
| ExtensionService* extension_service = GetExtensionService(); |
| DefaultApps* default_apps = extension_service->default_apps(); |