Commit 498f93b1 authored by rdevlin.cronin's avatar rdevlin.cronin Committed by Commit Bot

[Extensions][Task Scheduler] Migrate ExecuteCodeFunction

Migrate ExecuteCodeFunction away from BrowserThread::PostTask to post a
task to the FILE thread and instead use base::PostTask with MayBlock
traits. Also avoid a double post and instead just use PostTask*AndReply.

BUG=689520

Review-Url: https://codereview.chromium.org/2978843002
Cr-Commit-Position: refs/heads/master@{#486611}
parent 4796382a
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
#include "extensions/browser/api/execute_code_function.h" #include "extensions/browser/api/execute_code_function.h"
#include "base/task_scheduler/post_task.h"
#include "base/threading/thread_restrictions.h"
#include "extensions/browser/component_extension_resource_manager.h" #include "extensions/browser/component_extension_resource_manager.h"
#include "extensions/browser/extension_api_frame_id_map.h" #include "extensions/browser/extension_api_frame_id_map.h"
#include "extensions/browser/extensions_browser_client.h" #include "extensions/browser/extensions_browser_client.h"
...@@ -42,14 +44,17 @@ ExecuteCodeFunction::ExecuteCodeFunction() { ...@@ -42,14 +44,17 @@ ExecuteCodeFunction::ExecuteCodeFunction() {
ExecuteCodeFunction::~ExecuteCodeFunction() { ExecuteCodeFunction::~ExecuteCodeFunction() {
} }
void ExecuteCodeFunction::GetFileURLAndMaybeLocalizeOnFileThread( void ExecuteCodeFunction::GetFileURLAndMaybeLocalizeInBackground(
const std::string& extension_id, const std::string& extension_id,
const base::FilePath& extension_path, const base::FilePath& extension_path,
const std::string& extension_default_locale, const std::string& extension_default_locale,
bool might_require_localization, bool might_require_localization,
std::string* data) { std::string* data) {
DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); base::ThreadRestrictions::AssertIOAllowed();
// TODO(devlin): FilePathToFileURL() doesn't need to be done on a blocking
// task runner, so we could do that on the UI thread and then avoid the hop
// if we don't need localization.
file_url_ = net::FilePathToFileURL(resource_.GetFilePath()); file_url_ = net::FilePathToFileURL(resource_.GetFilePath());
if (!might_require_localization) if (!might_require_localization)
...@@ -69,23 +74,19 @@ void ExecuteCodeFunction::GetFileURLAndMaybeLocalizeOnFileThread( ...@@ -69,23 +74,19 @@ void ExecuteCodeFunction::GetFileURLAndMaybeLocalizeOnFileThread(
data, &error); data, &error);
} }
void ExecuteCodeFunction::GetFileURLAndLocalizeComponentResourceOnFileThread( std::unique_ptr<std::string>
ExecuteCodeFunction::GetFileURLAndLocalizeComponentResourceInBackground(
std::unique_ptr<std::string> data, std::unique_ptr<std::string> data,
const std::string& extension_id, const std::string& extension_id,
const base::FilePath& extension_path, const base::FilePath& extension_path,
const std::string& extension_default_locale, const std::string& extension_default_locale,
bool might_require_localization) { bool might_require_localization) {
DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); base::ThreadRestrictions::AssertIOAllowed();
GetFileURLAndMaybeLocalizeOnFileThread( GetFileURLAndMaybeLocalizeInBackground(
extension_id, extension_path, extension_default_locale, extension_id, extension_path, extension_default_locale,
might_require_localization, data.get()); might_require_localization, data.get());
bool success = true; return data;
content::BrowserThread::PostTask(
content::BrowserThread::UI, FROM_HERE,
base::Bind(&ExecuteCodeFunction::DidLoadAndLocalizeFile, this,
resource_.relative_path().AsUTF8Unsafe(), success,
base::Passed(std::move(data))));
} }
void ExecuteCodeFunction::DidLoadAndLocalizeFile( void ExecuteCodeFunction::DidLoadAndLocalizeFile(
...@@ -223,16 +224,21 @@ bool ExecuteCodeFunction::LoadFile(const std::string& file) { ...@@ -223,16 +224,21 @@ bool ExecuteCodeFunction::LoadFile(const std::string& file) {
ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id); ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id);
std::unique_ptr<std::string> data( std::unique_ptr<std::string> data(
new std::string(resource.data(), resource.size())); new std::string(resource.data(), resource.size()));
content::BrowserThread::PostTask(
content::BrowserThread::FILE, FROM_HERE, base::PostTaskWithTraitsAndReplyWithResult(
base::Bind(&ExecuteCodeFunction:: FROM_HERE,
GetFileURLAndLocalizeComponentResourceOnFileThread, {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
this, base::Passed(std::move(data)), extension_id, base::BindOnce(&ExecuteCodeFunction::
extension_path, extension_default_locale, GetFileURLAndLocalizeComponentResourceInBackground,
might_require_localization)); this, base::Passed(std::move(data)), extension_id,
extension_path, extension_default_locale,
might_require_localization),
base::BindOnce(&ExecuteCodeFunction::DidLoadAndLocalizeFile, this,
resource_.relative_path().AsUTF8Unsafe(),
true /* We assume this call always succeeds */));
} else { } else {
FileReader::OptionalFileThreadTaskCallback get_file_and_l10n_callback = FileReader::OptionalFileThreadTaskCallback get_file_and_l10n_callback =
base::Bind(&ExecuteCodeFunction::GetFileURLAndMaybeLocalizeOnFileThread, base::Bind(&ExecuteCodeFunction::GetFileURLAndMaybeLocalizeInBackground,
this, extension_id, extension_path, extension_default_locale, this, extension_id, extension_path, extension_default_locale,
might_require_localization); might_require_localization);
......
...@@ -84,7 +84,7 @@ class ExecuteCodeFunction : public AsyncExtensionFunction { ...@@ -84,7 +84,7 @@ class ExecuteCodeFunction : public AsyncExtensionFunction {
// localizes |data|. // localizes |data|.
// Localization depends on whether |might_require_localization| was specified. // Localization depends on whether |might_require_localization| was specified.
// Only CSS file content needs to be localized. // Only CSS file content needs to be localized.
void GetFileURLAndMaybeLocalizeOnFileThread( void GetFileURLAndMaybeLocalizeInBackground(
const std::string& extension_id, const std::string& extension_id,
const base::FilePath& extension_path, const base::FilePath& extension_path,
const std::string& extension_default_locale, const std::string& extension_default_locale,
...@@ -93,9 +93,10 @@ class ExecuteCodeFunction : public AsyncExtensionFunction { ...@@ -93,9 +93,10 @@ class ExecuteCodeFunction : public AsyncExtensionFunction {
// Retrieves the file url for the given |extension_path| and optionally // Retrieves the file url for the given |extension_path| and optionally
// localizes |data|. // localizes |data|.
// Similar to GetFileURLAndMaybeLocalizeOnFileThread, but only applies to // Similar to GetFileURLAndMaybeLocalizeInBackground, but only applies
// component extension resource. // to component extension resource.
void GetFileURLAndLocalizeComponentResourceOnFileThread( std::unique_ptr<std::string>
GetFileURLAndLocalizeComponentResourceInBackground(
std::unique_ptr<std::string> data, std::unique_ptr<std::string> data,
const std::string& extension_id, const std::string& extension_id,
const base::FilePath& extension_path, const base::FilePath& extension_path,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment