Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(300)

Unified Diff: chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc

Issue 263513004: Forward MIME types to BrowserPlugin when a viewer is specified. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Code review fixes Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc
diff --git a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc
index 6d953ff0202277f9ef1bfaabf36b503f6f6136d0..0aadc238cb0ef7c25202dd6b67a8c4e0a54bad80 100644
--- a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc
+++ b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc
@@ -8,6 +8,7 @@
#include <vector>
#include "base/base64.h"
+#include "base/guid.h"
#include "base/logging.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.h"
@@ -156,25 +157,19 @@ void UpdatePrerenderNetworkBytesCallback(int render_process_id,
}
#if !defined(OS_ANDROID)
-// Goes through the extension's file browser handlers and checks if there is one
-// that can handle the |mime_type|.
-// |extension| must not be NULL.
-bool ExtensionCanHandleMimeType(const Extension* extension,
- const std::string& mime_type) {
- MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension);
- if (!handler)
- return false;
-
- return handler->CanHandleMIMEType(mime_type);
-}
-
void SendExecuteMimeTypeHandlerEvent(scoped_ptr<content::StreamHandle> stream,
int64 expected_content_size,
int render_process_id,
int render_view_id,
- const std::string& extension_id) {
+ const std::string& extension_id,
+ const std::string& view_id) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ content::RenderViewHost* render_view_host =
+ content::RenderViewHost::FromID(render_process_id, render_view_id);
+ if (!render_view_host)
+ return;
+
content::WebContents* web_contents =
tab_util::GetWebContentsByID(render_process_id, render_view_id);
if (!web_contents)
@@ -196,7 +191,8 @@ void SendExecuteMimeTypeHandlerEvent(scoped_ptr<content::StreamHandle> stream,
if (!streams_private)
return;
streams_private->ExecuteMimeTypeHandler(
- extension_id, web_contents, stream.Pass(), expected_content_size);
+ extension_id, web_contents, stream.Pass(), view_id,
+ expected_content_size);
}
void LaunchURL(const GURL& url, int render_process_id, int render_view_id,
@@ -553,7 +549,9 @@ bool ChromeResourceDispatcherHostDelegate::ShouldInterceptResourceAsStream(
const GURL& url,
const std::string& mime_type,
GURL* origin,
- std::string* target_id) {
+ std::string* target_id,
+ std::string* payload,
+ std::string* view_id) {
#if !defined(OS_ANDROID)
ProfileIOData* io_data =
ProfileIOData::FromResourceContext(resource_context);
@@ -575,9 +573,14 @@ bool ChromeResourceDispatcherHostDelegate::ShouldInterceptResourceAsStream(
continue;
}
- if (ExtensionCanHandleMimeType(extension, mime_type)) {
+ MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension);
+ if (handler && handler->CanHandleMIMEType(mime_type)) {
*origin = Extension::GetBaseURLFromExtensionId(extension_id);
*target_id = extension_id;
+ if (!handler->handler_url().empty()) {
+ *view_id = base::GenerateGUID();
+ *payload = origin->spec() + handler->handler_url() + "?id=" + *view_id;
+ }
return true;
}
}
@@ -590,6 +593,7 @@ void ChromeResourceDispatcherHostDelegate::OnStreamCreated(
int render_process_id,
int render_view_id,
const std::string& target_id,
+ const std::string& view_id,
scoped_ptr<content::StreamHandle> stream,
int64 expected_content_size) {
#if !defined(OS_ANDROID)
@@ -597,7 +601,7 @@ void ChromeResourceDispatcherHostDelegate::OnStreamCreated(
content::BrowserThread::UI, FROM_HERE,
base::Bind(&SendExecuteMimeTypeHandlerEvent, base::Passed(&stream),
expected_content_size, render_process_id, render_view_id,
- target_id));
+ target_id, view_id));
#endif
}

Powered by Google App Engine
This is Rietveld 408576698