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

Unified Diff: content/renderer/pepper/resource_converter.cc

Issue 730603002: PPAPI: Refactor renderer side of browser host creation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge Created 6 years, 1 month 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
« no previous file with comments | « content/renderer/pepper/resource_converter.h ('k') | content/renderer/pepper/url_response_info_util.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/pepper/resource_converter.cc
diff --git a/content/renderer/pepper/resource_converter.cc b/content/renderer/pepper/resource_converter.cc
index 2af3bba3e7799d5864281bc05397c88e052477e3..f4d639f1e68c316aa7e775a947b386303a5a2f8f 100644
--- a/content/renderer/pepper/resource_converter.cc
+++ b/content/renderer/pepper/resource_converter.cc
@@ -5,6 +5,7 @@
#include "content/renderer/pepper/resource_converter.h"
#include "base/bind.h"
+#include "base/callback.h"
#include "base/message_loop/message_loop.h"
#include "content/public/renderer/renderer_ppapi_host.h"
#include "content/renderer/pepper/pepper_file_system_host.h"
@@ -29,17 +30,6 @@ using ppapi::ResourceVar;
namespace content {
namespace {
-void FlushComplete(
- const base::Callback<void(bool)>& callback,
- const std::vector<scoped_refptr<content::HostResourceVar> >& browser_vars,
- const std::vector<int>& pending_host_ids) {
- CHECK(browser_vars.size() == pending_host_ids.size());
- for (size_t i = 0; i < browser_vars.size(); ++i) {
- browser_vars[i]->set_pending_browser_host_id(pending_host_ids[i]);
- }
- callback.Run(true);
-}
-
// Converts a blink::WebFileSystem::Type to a PP_FileSystemType.
PP_FileSystemType WebFileSystemTypeToPPAPI(blink::WebFileSystem::Type type) {
switch (type) {
@@ -198,7 +188,8 @@ bool DOMMediaStreamTrackToResource(
ResourceConverter::~ResourceConverter() {}
ResourceConverterImpl::ResourceConverterImpl(PP_Instance instance)
- : instance_(instance) {}
+ : instance_(instance), weak_ptr_factory_(this) {
+}
ResourceConverterImpl::~ResourceConverterImpl() {
// Verify Flush() was called.
@@ -276,12 +267,17 @@ bool ResourceConverterImpl::NeedsFlush() {
}
void ResourceConverterImpl::Flush(const base::Callback<void(bool)>& callback) {
- RendererPpapiHost::GetForPPInstance(instance_)->CreateBrowserResourceHosts(
- instance_,
- browser_host_create_messages_,
- base::Bind(&FlushComplete, callback, browser_vars_));
+ pending_conversions_.push(PendingConversion());
+ pending_conversions_.back().callback = callback;
+ pending_conversions_.back().browser_vars.swap(browser_vars_);
+ pending_conversions_.back().sequence_number =
+ RendererPpapiHost::GetForPPInstance(instance_)
+ ->CreateBrowserResourceHosts(
+ instance_, browser_host_create_messages_,
+ base::Bind(&ResourceConverterImpl::FlushComplete,
+ weak_ptr_factory_.GetWeakPtr()));
+
browser_host_create_messages_.clear();
- browser_vars_.clear();
}
bool ResourceConverterImpl::ToV8Value(const PP_Var& var,
@@ -332,6 +328,11 @@ bool ResourceConverterImpl::ToV8Value(const PP_Var& var,
}
}
+ResourceConverterImpl::PendingConversion::PendingConversion() {
+}
+ResourceConverterImpl::PendingConversion::~PendingConversion() {
+}
+
scoped_refptr<HostResourceVar> ResourceConverterImpl::CreateResourceVar(
int pending_renderer_id,
const IPC::Message& create_message) {
@@ -350,4 +351,24 @@ ResourceConverterImpl::CreateResourceVarWithBrowserHost(
return result;
}
+void ResourceConverterImpl::FlushComplete(
+ const ppapi::proxy::CompletedBrowserResourceHosts& hosts) {
+ if (pending_conversions_.empty() ||
+ hosts.sequence_number != pending_conversions_.front().sequence_number) {
+ NOTREACHED();
+ return;
+ }
+ const PendingConversion& conversion = pending_conversions_.front();
+ if (conversion.browser_vars.size() != hosts.host_ids.size()) {
+ NOTREACHED();
+ pending_conversions_.pop();
+ return;
+ }
+ for (size_t i = 0; i < conversion.browser_vars.size(); ++i) {
+ conversion.browser_vars[i]->set_pending_browser_host_id(hosts.host_ids[i]);
+ }
+ conversion.callback.Run(true);
+ pending_conversions_.pop();
+}
+
} // namespace content
« no previous file with comments | « content/renderer/pepper/resource_converter.h ('k') | content/renderer/pepper/url_response_info_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698