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 1a1445aa22925b168ad253beb2b155b391d3f27b..0d9ead2f62552a51aa0f80244054b72a19b94416 100644 |
--- a/chrome/browser/extensions/api/streams_private/streams_private_api.cc |
+++ b/chrome/browser/extensions/api/streams_private/streams_private_api.cc |
@@ -88,6 +88,26 @@ void StreamsPrivateAPI::ExecuteMimeTypeHandler( |
streams_[extension_id][url] = make_linked_ptr(stream.release()); |
} |
+void StreamsPrivateAPI::AbortStream(const std::string& extension_id, |
+ const GURL& stream_url, |
+ const base::Closure& callback) { |
+ StreamMap::iterator extension_it = streams_.find(extension_id); |
+ if (extension_it == streams_.end()) { |
+ callback.Run(); |
+ return; |
+ } |
+ |
+ StreamMap::mapped_type* url_map = &extension_it->second; |
+ StreamMap::mapped_type::iterator url_it = url_map->find(stream_url); |
+ if (url_it == url_map->end()) { |
+ callback.Run(); |
+ return; |
+ } |
+ |
+ url_it->second->AddCloseListener(callback); |
+ url_map->erase(url_it); |
+} |
+ |
void StreamsPrivateAPI::OnExtensionUnloaded( |
content::BrowserContext* browser_context, |
const Extension* extension, |
@@ -95,6 +115,23 @@ void StreamsPrivateAPI::OnExtensionUnloaded( |
streams_.erase(extension->id()); |
} |
+StreamsPrivateAbortFunction::StreamsPrivateAbortFunction() { |
+} |
+ |
+ExtensionFunction::ResponseAction StreamsPrivateAbortFunction::Run() { |
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
+ EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &stream_url_)); |
+ StreamsPrivateAPI::Get(browser_context())->AbortStream( |
+ extension_id(), GURL(stream_url_), base::Bind( |
+ &StreamsPrivateAbortFunction::OnClose, this)); |
+ return RespondLater(); |
+} |
+ |
+void StreamsPrivateAbortFunction::OnClose() { |
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
+ Respond(NoArguments()); |
+} |
+ |
static base::LazyInstance<BrowserContextKeyedAPIFactory<StreamsPrivateAPI> > |
g_factory = LAZY_INSTANCE_INITIALIZER; |