Fix decoding of resources (fixes issue #2966)
Use LoadDataResourceString instead of GetDataResource. It will perform decoding if necessary.
This commit is contained in:
parent
48fc0bd220
commit
88b88251e7
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue