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

Unified Diff: chrome/browser/extensions/api/streams_private/streams_private_api.cc

Issue 797183005: Add a mimeHandler extension API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@streams-lifetime
Patch Set: Created 5 years, 11 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/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() {

Powered by Google App Engine
This is Rietveld 408576698