Index: chrome/browser/extensions/api/streams_private/streams_private_api.cc |
diff --git a/chrome/browser/extensions/api/streams_private/streams_private_api.cc b/chrome/browser/extensions/api/streams_private/streams_private_api.cc |
index 21853e77ea32fd025618928357b97f7e9b10da87..f505c1d9abb09cbe104442f911ab5c3ebf31be50 100644 |
--- a/chrome/browser/extensions/api/streams_private/streams_private_api.cc |
+++ b/chrome/browser/extensions/api/streams_private/streams_private_api.cc |
@@ -14,7 +14,6 @@ |
#include "extensions/browser/event_router.h" |
#include "extensions/browser/extension_function_registry.h" |
#include "extensions/browser/extension_registry.h" |
-#include "extensions/browser/guest_view/guest_view_manager.h" |
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_stream_manager.h" |
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h" |
#include "net/http/http_response_headers.h" |
@@ -42,21 +41,6 @@ void CreateResponseHeadersDictionary(const net::HttpResponseHeaders* headers, |
} |
} |
-// If |guest_web_contents| has a MimeHandlerViewGuest with view id of |view_id|, |
-// abort it. Returns true if the MimeHandlerViewGuest has a matching view id. |
-bool MaybeAbortStreamInGuest(const std::string& view_id, |
- content::WebContents* guest_web_contents) { |
- auto guest = MimeHandlerViewGuest::FromWebContents(guest_web_contents); |
- if (!guest) |
- return false; |
- if (guest->view_id() != view_id) |
- return false; |
- auto stream = guest->GetStream(); |
- if (stream) |
- stream->Abort(); |
- return true; |
-} |
- |
} // namespace |
namespace streams_private = api::streams_private; |
@@ -91,6 +75,22 @@ void StreamsPrivateAPI::ExecuteMimeTypeHandler( |
if (!extension) |
return; |
+ MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension); |
+ // If the mime handler uses MimeHandlerViewGuest, the MimeHandlerViewGuest |
+ // will take ownership of the stream. Otherwise, store the stream handle in |
+ // |streams_| and fire an event notifying the extension. |
+ if (!handler->handler_url().empty()) { |
+ GURL handler_url(Extension::GetBaseURLFromExtensionId(extension_id).spec() + |
+ handler->handler_url()); |
+ MimeHandlerStreamManager::Get(browser_context_) |
+ ->AddStream( |
+ view_id, |
+ make_scoped_ptr(new StreamContainer( |
+ stream.Pass(), ExtensionTabUtil::GetTabId(web_contents), |
+ expected_content_size, embedded, handler_url, extension_id)), |
+ render_process_id, render_frame_id); |
raymes
2015/01/12 05:26:04
Can we split this up into a few statements?? :)
Sam McNally
2015/01/12 07:13:35
Done.
|
+ return; |
+ } |
// Create the event's arguments value. |
streams_private::StreamInfo info; |
info.mime_type = stream->mime_type; |
@@ -117,54 +117,12 @@ void StreamsPrivateAPI::ExecuteMimeTypeHandler( |
EventRouter::Get(browser_context_) |
->DispatchEventToExtension(extension_id, event.Pass()); |
- MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension); |
- GURL url = stream->handle->GetURL(); |
- // If the mime handler uses MimeHandlerViewGuest, the MimeHandlerViewGuest |
- // will take ownership of the stream. Otherwise, store the stream handle in |
- // |streams_|. |
- if (handler->handler_url().empty()) { |
- streams_[extension_id][url] = make_linked_ptr(stream->handle.release()); |
raymes
2015/01/12 05:26:04
I think we might need this.
Sam McNally
2015/01/12 07:13:35
Done.
|
- return; |
- } |
- GURL handler_url(Extension::GetBaseURLFromExtensionId(extension_id).spec() + |
- handler->handler_url() + "?id=" + view_id); |
- MimeHandlerStreamManager::Get(browser_context_) |
- ->AddStream(view_id, make_scoped_ptr(new StreamContainer( |
- stream.Pass(), handler_url, extension_id)), |
- render_process_id, render_frame_id); |
- // If the mime handler uses MimeHandlerViewGuest, we need to be able to look |
- // up the MimeHandlerViewGuest instance that is handling the streamed |
- // resource in order to abort the stream. The embedding WebContents and the |
- // view id are necessary to perform that lookup. |
- mime_handler_streams_[extension_id][url] = |
- std::make_pair(web_contents, view_id); |
} |
void StreamsPrivateAPI::AbortStream(const std::string& extension_id, |
const GURL& stream_url, |
const base::Closure& callback) { |
- auto streams = mime_handler_streams_.find(extension_id); |
- if (streams != mime_handler_streams_.end()) { |
- auto stream_info = streams->second.find(stream_url); |
- if (stream_info != streams->second.end()) { |
- auto stream = MimeHandlerStreamManager::Get(browser_context_) |
- ->GetStream(stream_info->second.second); |
- // If the mime handler uses MimeHandlerViewGuest, the stream will either |
- // be owned by the particular MimeHandlerViewGuest if it has been created, |
- // or by the MimeHandleStreamManager, otherwise. |
- if (!stream) { |
- GuestViewManager::FromBrowserContext(browser_context_) |
- ->ForEachGuest(stream_info->second.first, |
- base::Bind(&MaybeAbortStreamInGuest, |
- stream_info->second.second)); |
- } |
- streams->second.erase(stream_info); |
- callback.Run(); |
- } |
- return; |
- } |
- |
StreamMap::iterator extension_it = streams_.find(extension_id); |
if (extension_it == streams_.end()) { |
callback.Run(); |
@@ -187,7 +145,6 @@ void StreamsPrivateAPI::OnExtensionUnloaded( |
const Extension* extension, |
UnloadedExtensionInfo::Reason reason) { |
streams_.erase(extension->id()); |
- mime_handler_streams_.erase(extension->id()); |
} |
StreamsPrivateAbortFunction::StreamsPrivateAbortFunction() { |