| 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;
|
|
|
|
|