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(); |