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

Unified Diff: chrome/browser/nacl_host/nacl_file_host.cc

Issue 17001003: Replace early check for PNaCl with an on-demand check. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: observer instead of timeout Created 7 years, 6 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/nacl_host/nacl_file_host.cc
diff --git a/chrome/browser/nacl_host/nacl_file_host.cc b/chrome/browser/nacl_host/nacl_file_host.cc
index 67d1a3970cb08335fa3b3f473ce4914b17fefbf5..093f2737981bbf8186217667f1b4d9055abc01d9 100644
--- a/chrome/browser/nacl_host/nacl_file_host.cc
+++ b/chrome/browser/nacl_host/nacl_file_host.cc
@@ -11,6 +11,8 @@
#include "base/platform_file.h"
#include "base/strings/utf_string_conversions.h"
#include "base/threading/sequenced_worker_pool.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/component_updater/pnacl/pnacl_component_installer.h"
#include "chrome/browser/extensions/extension_info_map.h"
#include "chrome/browser/nacl_host/nacl_browser.h"
#include "chrome/browser/renderer_host/chrome_render_message_filter.h"
@@ -58,10 +60,64 @@ bool PnaclDoOpenFile(const base::FilePath& file_to_open,
void DoOpenPnaclFile(
scoped_refptr<ChromeRenderMessageFilter> chrome_render_message_filter,
const std::string& filename,
+ IPC::Message* reply_msg);
+
+void PnaclCheckDone(
+ scoped_refptr<ChromeRenderMessageFilter> chrome_render_message_filter,
+ const std::string& filename,
+ IPC::Message* reply_msg,
+ bool success) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ if (!success) {
+ NotifyRendererOfError(chrome_render_message_filter, reply_msg);
+ } else {
+ if (!BrowserThread::PostBlockingPoolTask(
+ FROM_HERE,
+ base::Bind(&DoOpenPnaclFile,
+ chrome_render_message_filter,
+ filename,
+ reply_msg))) {
+ NotifyRendererOfError(chrome_render_message_filter, reply_msg);
+ }
+ }
+}
+
+void TryInstallPnacl(
+ scoped_refptr<ChromeRenderMessageFilter> chrome_render_message_filter,
+ const std::string& filename,
+ IPC::Message* reply_msg) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ ComponentUpdateService* cus = g_browser_process->component_updater();
+ PnaclComponentInstaller* pci =
+ g_browser_process->pnacl_component_installer();
+ RequestFirstInstall(cus,
+ pci,
+ base::Bind(&PnaclCheckDone,
+ chrome_render_message_filter,
+ filename,
+ reply_msg));
+}
+
+void DoOpenPnaclFile(
+ scoped_refptr<ChromeRenderMessageFilter> chrome_render_message_filter,
+ const std::string& filename,
IPC::Message* reply_msg) {
DCHECK(BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
base::FilePath full_filepath;
+ // PNaCl must be installed.
+ base::FilePath pnacl_dir;
+ if (!PathService::Get(chrome::DIR_PNACL_COMPONENT, &pnacl_dir) ||
+ !file_util::PathExists(pnacl_dir)) {
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&TryInstallPnacl,
+ chrome_render_message_filter,
+ filename,
+ reply_msg));
+ return;
+ }
+
// Do some validation.
if (!nacl_file_host::PnaclCanOpenFile(filename, &full_filepath)) {
NotifyRendererOfError(chrome_render_message_filter.get(), reply_msg);

Powered by Google App Engine
This is Rietveld 408576698