mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	Fix decoding of resources (fixes issue #2966)
Use LoadDataResourceString instead of GetDataResource. It will perform decoding if necessary.
This commit is contained in:
		| @@ -32,9 +32,9 @@ const char kPdfResourceIdentifier[] = "chromium-pdf"; | |||||||
| const char kPdfPluginName[] = "Chrome PDF Viewer"; | const char kPdfPluginName[] = "Chrome PDF Viewer"; | ||||||
|  |  | ||||||
| std::string GetManifest() { | std::string GetManifest() { | ||||||
|   std::string manifest_contents = ui::ResourceBundle::GetSharedInstance() |   std::string manifest_contents = | ||||||
|                                       .GetRawDataResource(IDR_PDF_MANIFEST) |       ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( | ||||||
|                                       .as_string(); |           IDR_PDF_MANIFEST); | ||||||
|   DCHECK(manifest_contents.find(kNameTag) != std::string::npos); |   DCHECK(manifest_contents.find(kNameTag) != std::string::npos); | ||||||
|   base::ReplaceFirstSubstringAfterOffset(&manifest_contents, 0, kNameTag, |   base::ReplaceFirstSubstringAfterOffset(&manifest_contents, 0, kNameTag, | ||||||
|                                          kPdfPluginName); |                                          kPdfPluginName); | ||||||
|   | |||||||
| @@ -44,6 +44,7 @@ | |||||||
| #include "content/public/common/url_utils.h" | #include "content/public/common/url_utils.h" | ||||||
| #include "content/public/common/user_agent.h" | #include "content/public/common/user_agent.h" | ||||||
| #include "ipc/ipc_channel.h" | #include "ipc/ipc_channel.h" | ||||||
|  | #include "ui/base/resource/resource_bundle.h" | ||||||
| #include "v8/include/v8.h" | #include "v8/include/v8.h" | ||||||
|  |  | ||||||
| using extensions::api::cef::kSupportedAPIs; | using extensions::api::cef::kSupportedAPIs; | ||||||
| @@ -342,17 +343,17 @@ bool OnExtensionsSupportUI(std::string* mime_type, std::string* output) { | |||||||
| } | } | ||||||
|  |  | ||||||
| bool OnLicenseUI(std::string* mime_type, std::string* output) { | bool OnLicenseUI(std::string* mime_type, std::string* output) { | ||||||
|   base::StringPiece piece = |   std::string piece = | ||||||
|       CefAppManager::Get()->GetContentClient()->GetDataResource( |       ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( | ||||||
|           IDR_CEF_LICENSE_TXT, ui::SCALE_FACTOR_NONE); |           IDR_CEF_LICENSE_TXT); | ||||||
|   if (piece.empty()) { |   if (piece.empty()) { | ||||||
|     NOTREACHED() << "Failed to load license txt resource."; |     NOTREACHED() << "Failed to load license txt resource."; | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   *mime_type = "text/html"; |   *mime_type = "text/html"; | ||||||
|   *output = "<html><head><title>License</title></head><body><pre>" + |   *output = "<html><head><title>License</title></head><body><pre>" + piece + | ||||||
|             piece.as_string() + "</pre></body></html>"; |             "</pre></body></html>"; | ||||||
|  |  | ||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
| @@ -360,10 +361,10 @@ bool OnLicenseUI(std::string* mime_type, std::string* output) { | |||||||
| bool OnVersionUI(Profile* profile, | bool OnVersionUI(Profile* profile, | ||||||
|                  std::string* mime_type, |                  std::string* mime_type, | ||||||
|                  std::string* output) { |                  std::string* output) { | ||||||
|   base::StringPiece piece = |   std::string tmpl = | ||||||
|       CefAppManager::Get()->GetContentClient()->GetDataResource( |       ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( | ||||||
|           IDR_CEF_VERSION_HTML, ui::SCALE_FACTOR_NONE); |           IDR_CEF_VERSION_HTML); | ||||||
|   if (piece.empty()) { |   if (tmpl.empty()) { | ||||||
|     NOTREACHED() << "Failed to load version html resource."; |     NOTREACHED() << "Failed to load version html resource."; | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
| @@ -386,7 +387,6 @@ bool OnVersionUI(Profile* profile, | |||||||
|   parser.Add("MODULEPATH", GetModulePath()); |   parser.Add("MODULEPATH", GetModulePath()); | ||||||
|   parser.Add("CACHEPATH", CefString(profile->GetPath().value())); |   parser.Add("CACHEPATH", CefString(profile->GetPath().value())); | ||||||
|  |  | ||||||
|   std::string tmpl = piece.as_string(); |  | ||||||
|   parser.Parse(&tmpl); |   parser.Parse(&tmpl); | ||||||
|  |  | ||||||
|   *mime_type = "text/html"; |   *mime_type = "text/html"; | ||||||
|   | |||||||
| @@ -158,14 +158,15 @@ class InternalHandlerFactory : public CefSchemeHandlerFactory { | |||||||
|         action.mime_type = GetMimeType(url.path()); |         action.mime_type = GetMimeType(url.path()); | ||||||
|  |  | ||||||
|       if (!action.bytes && action.resource_id >= 0) { |       if (!action.bytes && action.resource_id >= 0) { | ||||||
|         action.bytes = |         std::string str = | ||||||
|             CefAppManager::Get()->GetContentClient()->GetDataResourceBytes( |             ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( | ||||||
|                 action.resource_id); |                 action.resource_id); | ||||||
|         if (!action.bytes) { |         if (str.empty()) { | ||||||
|           NOTREACHED() << "Failed to load internal resource for id: " |           NOTREACHED() << "Failed to load internal resource for id: " | ||||||
|                        << action.resource_id << " URL: " << url.spec().c_str(); |                        << action.resource_id << " URL: " << url.spec().c_str(); | ||||||
|           return nullptr; |           return nullptr; | ||||||
|         } |         } | ||||||
|  |         action.bytes = base::RefCountedString::TakeString(&str); | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       if (action.bytes) { |       if (action.bytes) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user