diff options
-rw-r--r-- | app/resource_bundle.cc | 28 | ||||
-rw-r--r-- | app/resource_bundle.h | 5 | ||||
-rw-r--r-- | base/data_pack.cc | 4 | ||||
-rw-r--r-- | base/data_pack.h | 4 | ||||
-rw-r--r-- | chrome/browser/dom_ui/net_internals_ui.cc | 78 | ||||
-rw-r--r-- | chrome/chrome.gyp | 2 | ||||
-rwxr-xr-x | chrome/chrome_browser.gypi | 37 | ||||
-rw-r--r-- | chrome/chrome_dll.gypi | 7 | ||||
-rw-r--r-- | chrome/common/chrome_paths.cc | 15 | ||||
-rw-r--r-- | chrome/common/chrome_paths.h | 1 |
10 files changed, 89 insertions, 92 deletions
diff --git a/app/resource_bundle.cc b/app/resource_bundle.cc index dcf7fa8..d61e83d 100644 --- a/app/resource_bundle.cc +++ b/app/resource_bundle.cc @@ -105,7 +105,17 @@ SkBitmap* ResourceBundle::LoadBitmap(DataHandle data_handle, int resource_id) { RefCountedStaticMemory* ResourceBundle::LoadDataResourceBytes( int resource_id) const { - return LoadResourceBytes(resources_data_, resource_id); + RefCountedStaticMemory* bytes = + LoadResourceBytes(resources_data_, resource_id); + + // Check all our additional data packs for the resources if it wasn't loaded + // from our main source. + for (std::vector<LoadedDataPack*>::const_iterator it = data_packs_.begin(); + !bytes && it != data_packs_.end(); ++it) { + bytes = (*it)->GetStaticMemory(resource_id); + } + + return bytes; } SkBitmap* ResourceBundle::GetBitmapNamed(int resource_id) { @@ -198,11 +208,8 @@ const gfx::Font& ResourceBundle::GetFont(FontStyle style) { // LoadedDataPack implementation ResourceBundle::LoadedDataPack::LoadedDataPack(const FilePath& path) : path_(path) { - // On unicies, we preload data packs so background updates don't cause us to - // load the wrong data. -#if defined(OS_POSIX) && !defined(OS_MACOSX) + // Always preload the data packs so we can maintain constness. Load(); -#endif } void ResourceBundle::LoadedDataPack::Load() { @@ -212,9 +219,12 @@ void ResourceBundle::LoadedDataPack::Load() { CHECK(success) << "Failed to load " << path_.value(); } -bool ResourceBundle::LoadedDataPack::GetStringPiece(int resource_id, - base::StringPiece* data) { - if (!data_pack_.get()) - Load(); +bool ResourceBundle::LoadedDataPack::GetStringPiece( + int resource_id, base::StringPiece* data) const { return data_pack_->GetStringPiece(static_cast<uint32>(resource_id), data); } + +RefCountedStaticMemory* ResourceBundle::LoadedDataPack::GetStaticMemory( + int resource_id) const { + return data_pack_->GetStaticMemory(resource_id); +} diff --git a/app/resource_bundle.h b/app/resource_bundle.h index 3a3e617..1d328a3 100644 --- a/app/resource_bundle.h +++ b/app/resource_bundle.h @@ -159,8 +159,9 @@ class ResourceBundle { // Helper class for managing data packs. class LoadedDataPack { public: - LoadedDataPack(const FilePath& path); - bool GetStringPiece(int resource_id, base::StringPiece* data); + explicit LoadedDataPack(const FilePath& path); + bool GetStringPiece(int resource_id, base::StringPiece* data) const; + RefCountedStaticMemory* GetStaticMemory(int resource_id) const; private: void Load(); diff --git a/base/data_pack.cc b/base/data_pack.cc index 4e5a569..06f2308 100644 --- a/base/data_pack.cc +++ b/base/data_pack.cc @@ -96,7 +96,7 @@ bool DataPack::Load(const FilePath& path) { return true; } -bool DataPack::GetStringPiece(uint32 resource_id, StringPiece* data) { +bool DataPack::GetStringPiece(uint32 resource_id, StringPiece* data) const { // It won't be hard to make this endian-agnostic, but it's not worth // bothering to do right now. #if defined(__BYTE_ORDER) @@ -119,7 +119,7 @@ bool DataPack::GetStringPiece(uint32 resource_id, StringPiece* data) { return true; } -RefCountedStaticMemory* DataPack::GetStaticMemory(uint32 resource_id) { +RefCountedStaticMemory* DataPack::GetStaticMemory(uint32 resource_id) const { base::StringPiece piece; if (!GetStringPiece(resource_id, &piece)) return NULL; diff --git a/base/data_pack.h b/base/data_pack.h index 8938491..f3f8481 100644 --- a/base/data_pack.h +++ b/base/data_pack.h @@ -35,12 +35,12 @@ class DataPack { // Get resource by id |resource_id|, filling in |data|. // The data is owned by the DataPack object and should not be modified. // Returns false if the resource id isn't found. - bool GetStringPiece(uint32 resource_id, StringPiece* data); + bool GetStringPiece(uint32 resource_id, StringPiece* data) const; // Like GetStringPiece(), but returns a reference to memory. This interface // is used for image data, while the StringPiece interface is usually used // for localization strings. - RefCountedStaticMemory* GetStaticMemory(uint32 resource_id); + RefCountedStaticMemory* GetStaticMemory(uint32 resource_id) const; // Writes a pack file containing |resources| to |path|. static bool WritePack(const FilePath& path, diff --git a/chrome/browser/dom_ui/net_internals_ui.cc b/chrome/browser/dom_ui/net_internals_ui.cc index 553d197..96ee59e 100644 --- a/chrome/browser/dom_ui/net_internals_ui.cc +++ b/chrome/browser/dom_ui/net_internals_ui.cc @@ -36,6 +36,8 @@ #include "chrome/common/net/url_request_context_getter.h" #include "chrome/common/url_constants.h" #include "grit/generated_resources.h" +#include "grit/net_internals_resources.h" +#include "grit/net_internals_resources_map.h" #include "net/base/escape.h" #include "net/base/host_resolver_impl.h" #include "net/base/net_errors.h" @@ -316,51 +318,57 @@ NetInternalsHTMLSource::NetInternalsHTMLSource() void NetInternalsHTMLSource::StartDataRequest(const std::string& path, bool is_off_the_record, int request_id) { - // The provided |path| identifies a file in resources/net_internals/. - std::string data_string; - FilePath file_path; - PathService::Get(chrome::DIR_NET_INTERNALS, &file_path); - std::string filename; - // The provided "path" may contain a fragment, or query section. We only // care about the path itself, and will disregard anything else. - filename = GURL(std::string("chrome://net/") + path).path().substr(1); - + std::string filename = + GURL(std::string("chrome://net/") + path).path().substr(1); if (filename.empty()) filename = "index.html"; - file_path = file_path.AppendASCII(filename); - - if (!file_util::ReadFileToString(file_path, &data_string)) { - LOG(WARNING) << "Could not read resource: " << file_path.value(); - data_string = StringPrintf("<p style='color:red'>Failed to read file " - "RESOURCES/net_internals/%s</p>", - EscapeForHTML(filename).c_str()); - - // During the transition from old implementation to new implementation, - // users may be entering the URLs for the old frontend. - data_string.append( - "<p>Note that the URL scheme for net-internals has changed because of " - "its new implementation (bug 37421):</p>" - "<ul>" - "<li>chrome://net-internals/proxyservice.* → " - "<a href='chrome://net-internals#proxy'>chrome://net-internals#proxy" - "</a></li>" - "<li>chrome://net-internals/hostresolver.* → <a href='chrome://net" - "-internals#dns'>chrome://net-internals#dns</a></li>" - "<li>chrome://net-internals/urlrequest.* → <a href='chrome://net-" - "internals#requests'>chrome://net-internals#requests</a></li>" - "<li>chrome://net-internals/ (overview for copy-pasting) → <a href" - "='chrome://net-internals#data'>chrome://net-internals#data</a></li>" - "<li>chrome://net-internals/view-cache/* → <a href=" - "'chrome://view-http-cache'>chrome://view-http-cache</a></li>" - "</ul>"); + // The name of the files in the grd list are prefixed with the following + // directory: + std::string key("net_internals/"); + key += filename; + + const ResourceBundle& rb = ResourceBundle::GetSharedInstance(); + for (size_t i = 0; i < kNetInternalsResourcesSize; ++i) { + if (kNetInternalsResources[i].name == key) { + scoped_refptr<RefCountedStaticMemory> bytes( + rb.LoadDataResourceBytes(kNetInternalsResources[i].value)); + if (bytes && bytes->front()) { + SendResponse(request_id, bytes); + return; + } + } } + LOG(WARNING) << "Could not read resource: " << path; + std::string data_string = "<p style='color:red'>Failed to read resource"; + data_string.append(EscapeForHTML(filename)); + data_string.append("</p>"); + + // During the transition from old implementation to new implementation, + // users may be entering the URLs for the old frontend. + data_string.append( + "<p>Note that the URL scheme for net-internals has changed because of " + "its new implementation (bug 37421):</p>" + "<ul>" + "<li>chrome://net-internals/proxyservice.* → " + "<a href='chrome://net-internals#proxy'>chrome://net-internals#proxy" + "</a></li>" + "<li>chrome://net-internals/hostresolver.* → <a href='chrome://net" + "-internals#dns'>chrome://net-internals#dns</a></li>" + "<li>chrome://net-internals/urlrequest.* → <a href='chrome://net-" + "internals#requests'>chrome://net-internals#requests</a></li>" + "<li>chrome://net-internals/ (overview for copy-pasting) → <a href" + "='chrome://net-internals#data'>chrome://net-internals#data</a></li>" + "<li>chrome://net-internals/view-cache/* → <a href=" + "'chrome://view-http-cache'>chrome://view-http-cache</a></li>" + "</ul>"); + scoped_refptr<RefCountedBytes> bytes(new RefCountedBytes); bytes->data.resize(data_string.size()); std::copy(data_string.begin(), data_string.end(), bytes->data.begin()); - SendResponse(request_id, bytes); } diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp index 671e9cf..354dc10 100644 --- a/chrome/chrome.gyp +++ b/chrome/chrome.gyp @@ -448,6 +448,8 @@ 'outputs': [ '<(grit_out_dir)/grit/<(RULE_INPUT_ROOT).h', '<(grit_out_dir)/<(RULE_INPUT_ROOT).pak', + '<(grit_out_dir)/grit/<(RULE_INPUT_ROOT)_map.cc', + '<(grit_out_dir)/grit/<(RULE_INPUT_ROOT)_map.h', # TODO(bradnelson): move to something like this instead #'<!@(<(grit_info_cmd) --outputs \'<(grit_out_dir)\' <(chrome_resources_grds))', # This currently cannot work because gyp only evaluates the diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 37f8ea4..ab72412 100755 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -17,7 +17,6 @@ 'chrome_version_info', 'component_extensions', 'domui_shared_resources', - 'net_internals_resources', 'platform_locale_settings', 'profile_import', 'browser/sync/protocol/sync_proto.gyp:sync_proto_cpp', @@ -2686,8 +2685,9 @@ 'browser/zygote_host_linux.cc', 'browser/zygote_main_linux.cc', - # This file is generated by GRIT. + # These files are generated by GRIT. '<(grit_out_dir)/grit/theme_resources_map.cc', + '<(grit_out_dir)/grit/net_internals_resources_map.cc', ], 'conditions': [ ['javascript_engine=="v8"', { @@ -3555,39 +3555,6 @@ ], }, { - 'target_name': 'net_internals_resources', - 'type': 'none', - # TODO(eroman): Once the msvs port supports it, change this to recursively - # copy the entire directory instead of listing the files. - # http://code.google.com/p/gyp/issues/detail?id=143. - 'copies': [ - { - 'destination': '<(PRODUCT_DIR)/resources/net_internals', - 'files': [ - 'browser/resources/net_internals/dataview.js', - 'browser/resources/net_internals/detailsview.js', - 'browser/resources/net_internals/dnsview.js', - 'browser/resources/net_internals/httpcacheview.js', - 'browser/resources/net_internals/index.html', - 'browser/resources/net_internals/loggrouper.js', - 'browser/resources/net_internals/logviewpainter.js', - 'browser/resources/net_internals/main.css', - 'browser/resources/net_internals/main.js', - 'browser/resources/net_internals/proxyview.js', - 'browser/resources/net_internals/requestsview.js', - 'browser/resources/net_internals/resizableverticalsplitview.js', - 'browser/resources/net_internals/sourceentry.js', - 'browser/resources/net_internals/tabswitcherview.js', - 'browser/resources/net_internals/testview.js', - 'browser/resources/net_internals/timelineviewpainter.js', - 'browser/resources/net_internals/topmidbottomview.js', - 'browser/resources/net_internals/util.js', - 'browser/resources/net_internals/view.js', - ] - }, - ] - }, - { # Protobuf compiler / generate rule for feedback 'target_name': 'userfeedback_proto', 'type': 'none', diff --git a/chrome/chrome_dll.gypi b/chrome/chrome_dll.gypi index 71863b1e..eced91f 100644 --- a/chrome/chrome_dll.gypi +++ b/chrome/chrome_dll.gypi @@ -445,7 +445,6 @@ '<(PRODUCT_DIR)/resources/gmail_app/', '<(PRODUCT_DIR)/resources/calendar_app/', '<(PRODUCT_DIR)/resources/docs_app/', - '<(PRODUCT_DIR)/resources/net_internals/' ], 'conditions': [ ['mac_breakpad==1', { @@ -482,6 +481,12 @@ }], ], }, + { + 'destination': '<(PRODUCT_DIR)', + 'files': [ + '<(INTERMEDIATE_DIR)/repack/resources.pak' + ], + }, ], 'conditions': [ ['mac_breakpad==1', { diff --git a/chrome/common/chrome_paths.cc b/chrome/common/chrome_paths.cc index 9dca7e0..738ee3a 100644 --- a/chrome/common/chrome_paths.cc +++ b/chrome/common/chrome_paths.cc @@ -168,11 +168,6 @@ bool PathProvider(int key, FilePath* result) { return false; cur = cur.Append(FILE_PATH_LITERAL("inspector")); break; - case chrome::DIR_NET_INTERNALS: - if (!PathService::Get(chrome::DIR_RESOURCES, &cur)) - return false; - cur = cur.Append(FILE_PATH_LITERAL("net_internals")); - break; case chrome::DIR_APP_DICTIONARIES: #if defined(OS_LINUX) || defined(OS_MACOSX) // We can't write into the EXE dir on Linux, so keep dictionaries @@ -250,6 +245,16 @@ bool PathProvider(int key, FilePath* result) { #endif break; case chrome::FILE_RESOURCES_PACK: +#if defined(OS_MACOSX) + if (mac_util::AmIBundled()) { + cur = mac_util::MainAppBundlePath(); + cur = cur.Append(FILE_PATH_LITERAL("Resources")) + .Append(FILE_PATH_LITERAL("resources.pak")); + break; + } + // If we're not bundled on mac, resources.pak should be next to the + // binary (e.g., for unit tests). +#endif if (!PathService::Get(base::DIR_EXE, &cur)) return false; cur = cur.Append(FILE_PATH_LITERAL("resources.pak")); diff --git a/chrome/common/chrome_paths.h b/chrome/common/chrome_paths.h index 69239ad..258123d 100644 --- a/chrome/common/chrome_paths.h +++ b/chrome/common/chrome_paths.h @@ -26,7 +26,6 @@ enum { // by DOMUI and component extensions. DIR_BOOKMARK_MANAGER, // Directory containing the bookmark manager. DIR_INSPECTOR, // Directory where web inspector is located. - DIR_NET_INTERNALS, // Directory where net internals is located. DIR_APP_DICTIONARIES, // Directory where the global dictionaries are. DIR_USER_DOCUMENTS, // Directory for a user's "My Documents". DIR_DEFAULT_DOWNLOADS_SAFE, // Directory for a user's |