Index: content/child/appcache/web_application_cache_host_impl.cc |
diff --git a/content/child/appcache/web_application_cache_host_impl.cc b/content/child/appcache/web_application_cache_host_impl.cc |
index 7d5f47b92fca08af60bbb154b968ccd4e6bd9261..fb996eeb30909affce65502b21fe7cf63719353f 100644 |
--- a/content/child/appcache/web_application_cache_host_impl.cc |
+++ b/content/child/appcache/web_application_cache_host_impl.cc |
@@ -8,12 +8,14 @@ |
#include "base/id_map.h" |
#include "base/strings/string_util.h" |
#include "base/strings/stringprintf.h" |
+#include "third_party/WebKit/public/platform/WebString.h" |
#include "third_party/WebKit/public/platform/WebURL.h" |
#include "third_party/WebKit/public/platform/WebURLRequest.h" |
#include "third_party/WebKit/public/platform/WebURLResponse.h" |
using blink::WebApplicationCacheHost; |
using blink::WebApplicationCacheHostClient; |
+using blink::WebString; |
using blink::WebURLRequest; |
using blink::WebURL; |
using blink::WebURLResponse; |
@@ -133,16 +135,26 @@ void WebApplicationCacheHostImpl::OnProgressEventRaised( |
} |
void WebApplicationCacheHostImpl::OnErrorEventRaised( |
- const std::string& message) { |
+ const appcache::ErrorDetails& details) { |
// Emit logging output prior to calling out to script as we can get |
// deleted within the script event handler. |
const char* kFormatString = "Application Cache Error event: %s"; |
- std::string full_message = base::StringPrintf(kFormatString, |
- message.c_str()); |
+ std::string full_message = |
+ base::StringPrintf(kFormatString, details.message.c_str()); |
OnLogMessage(appcache::LOG_ERROR, full_message); |
status_ = cache_info_.is_complete ? appcache::IDLE : appcache::UNCACHED; |
- client_->notifyEventListener(static_cast<EventID>(appcache::ERROR_EVENT)); |
+ if (details.is_cross_origin) { |
+ // Don't leak detailed information to script for cross-origin resources. |
+ DCHECK_EQ(appcache::RESOURCE_ERROR, details.reason); |
+ client_->notifyErrorEventListener( |
+ static_cast<ErrorReason>(details.reason), details.url, 0, WebString()); |
+ } else { |
+ client_->notifyErrorEventListener(static_cast<ErrorReason>(details.reason), |
+ details.url, |
+ details.status, |
+ WebString::fromUTF8(details.message)); |
+ } |
} |
void WebApplicationCacheHostImpl::willStartMainResourceRequest( |