diff options
author | tony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-24 01:26:40 +0000 |
---|---|---|
committer | tony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-24 01:26:40 +0000 |
commit | 3573b43d8178c8c9b4c4efc937e3ca3342bdae11 (patch) | |
tree | 7c7305894803d864aa33d4a13dd3289cc360aaf5 /chrome/browser/extensions/extension_protocols.cc | |
parent | 270d97d0e083743053613360b6342d6a9d199071 (diff) | |
download | chromium_src-3573b43d8178c8c9b4c4efc937e3ca3342bdae11.zip chromium_src-3573b43d8178c8c9b4c4efc937e3ca3342bdae11.tar.gz chromium_src-3573b43d8178c8c9b4c4efc937e3ca3342bdae11.tar.bz2 |
Move the bookmark manager into resources.pak.
This allows for the bookmark manager to work after upgrading
in the background on Linux.
BUG=42770
TEST=Bookmark manager still works
Review URL: http://codereview.chromium.org/2814009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50683 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_protocols.cc')
-rw-r--r-- | chrome/browser/extensions/extension_protocols.cc | 71 |
1 files changed, 70 insertions, 1 deletions
diff --git a/chrome/browser/extensions/extension_protocols.cc b/chrome/browser/extensions/extension_protocols.cc index 02964fa..2a740f1 100644 --- a/chrome/browser/extensions/extension_protocols.cc +++ b/chrome/browser/extensions/extension_protocols.cc @@ -4,18 +4,67 @@ #include "chrome/browser/extensions/extension_protocols.h" +#include <algorithm> + +#include "app/resource_bundle.h" +#include "base/file_path.h" +#include "base/logging.h" +#include "base/message_loop.h" +#include "base/path_service.h" #include "base/string_util.h" #include "chrome/browser/net/chrome_url_request_context.h" #include "chrome/browser/renderer_host/resource_dispatcher_host.h" #include "chrome/browser/renderer_host/resource_dispatcher_host_request_info.h" +#include "chrome/common/chrome_paths.h" #include "chrome/common/extensions/extension.h" #include "chrome/common/extensions/extension_file_util.h" #include "chrome/common/extensions/extension_resource.h" #include "chrome/common/url_constants.h" #include "googleurl/src/url_util.h" +#include "grit/bookmark_manager_resources_map.h" +#include "net/base/mime_util.h" #include "net/base/net_errors.h" -#include "net/url_request/url_request_file_job.h" #include "net/url_request/url_request_error_job.h" +#include "net/url_request/url_request_file_job.h" +#include "net/url_request/url_request_simple_job.h" + +namespace { + +class URLRequestResourceBundleJob : public URLRequestSimpleJob { + public: + explicit URLRequestResourceBundleJob(URLRequest* request, + const FilePath& filename, int resource_id) + : URLRequestSimpleJob(request), + filename_(filename), + resource_id_(resource_id) { } + + // URLRequestSimpleJob method. + virtual bool GetData(std::string* mime_type, + std::string* charset, + std::string* data) const { + const ResourceBundle& rb = ResourceBundle::GetSharedInstance(); + *data = rb.GetRawDataResource(resource_id_).as_string(); + bool result = net::GetMimeTypeFromFile(filename_, mime_type); + if (StartsWithASCII(*mime_type, "text/", false)) { + // All of our HTML files should be UTF-8 and for other resource types + // (like images), charset doesn't matter. + DCHECK(IsStringUTF8(*data)); + *charset = "utf-8"; + } + return result; + } + + private: + virtual ~URLRequestResourceBundleJob() { } + + // We need the filename of the resource to determine the mime type. + FilePath filename_; + + // The resource bundle id to load. + int resource_id_; +}; + +} // namespace // Factory registered with URLRequest to create URLRequestJobs for extension:// // URLs. @@ -41,6 +90,26 @@ static URLRequestJob* CreateExtensionURLRequestJob(URLRequest* request, return NULL; } + FilePath resources_path; + if (PathService::Get(chrome::FILE_RESOURCES_PACK, &resources_path) && + directory_path.DirName() == resources_path.RemoveExtension()) { + FilePath relative_path = directory_path.BaseName().Append( + extension_file_util::ExtensionURLToRelativeFilePath(request->url())); + + // TODO(tc): Make a map of FilePath -> resource ids so we don't have to + // covert to FilePaths all the time. This will be more useful as we add + // more resources. + for (size_t i = 0; i < kBookmarkManagerResourcesSize; ++i) { + FilePath bm_resource_path = + FilePath().AppendASCII(kBookmarkManagerResources[i].name); + if (relative_path == bm_resource_path) { + return new URLRequestResourceBundleJob(request, relative_path, + kBookmarkManagerResources[i].value); + } + } + } + // TODO(tc): Move all of these files into resources.pak so we don't break + // when updating on Linux. ExtensionResource resource(directory_path, extension_file_util::ExtensionURLToRelativeFilePath(request->url())); |