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

Unified Diff: chromeos/printing/ppd_provider.cc

Issue 2939373003: Convert PpdCache and PpdProvider to TaskScheduler. (Closed)
Patch Set: find can skip dir creation Created 3 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
« no previous file with comments | « chromeos/printing/ppd_provider.h ('k') | chromeos/printing/ppd_provider_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos/printing/ppd_provider.cc
diff --git a/chromeos/printing/ppd_provider.cc b/chromeos/printing/ppd_provider.cc
index aa62d8b35c737ca08ee08911e5d6f78b4f9c4d6c..464453bb08f2b6f5fab16a99cea4c7fa984dc1f3 100644
--- a/chromeos/printing/ppd_provider.cc
+++ b/chromeos/printing/ppd_provider.cc
@@ -17,6 +17,7 @@
#include "base/files/file_util.h"
#include "base/json/json_parser.h"
#include "base/memory/ptr_util.h"
+#include "base/sequenced_task_runner.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/strings/string_tokenizer.h"
@@ -24,6 +25,7 @@
#include "base/strings/stringprintf.h"
#include "base/synchronization/lock.h"
#include "base/task_runner_util.h"
+#include "base/task_scheduler/post_task.h"
#include "base/threading/sequenced_task_runner_handle.h"
#include "base/threading/thread_restrictions.h"
#include "base/time/time.h"
@@ -156,6 +158,19 @@ std::string PpdReferenceToCacheKey(const Printer::PpdReference& reference) {
}
}
+// Handles the result after PPD storage.
+void OnPpdStored() {}
+
+// Fetch the file pointed at by |url| and store it in |file_contents|.
+// Returns true if the fetch was successful.
+bool FetchFile(const GURL& url, std::string* file_contents) {
+ CHECK(url.is_valid());
+ CHECK(url.SchemeIs("file"));
+ base::ThreadRestrictions::AssertIOAllowed();
+
+ return base::ReadFileToString(base::FilePath(url.path()), file_contents);
+}
+
struct ManufacturerMetadata {
// Key used to look up the printer list on the server. This is initially
// populated.
@@ -201,12 +216,13 @@ class PpdProviderImpl : public PpdProvider, public net::URLFetcherDelegate {
const std::string& browser_locale,
scoped_refptr<net::URLRequestContextGetter> url_context_getter,
scoped_refptr<PpdCache> ppd_cache,
- scoped_refptr<base::SequencedTaskRunner> disk_task_runner,
const PpdProvider::Options& options)
: browser_locale_(browser_locale),
url_context_getter_(url_context_getter),
ppd_cache_(ppd_cache),
- disk_task_runner_(disk_task_runner),
+ disk_task_runner_(base::CreateSequencedTaskRunnerWithTraits(
+ {base::TaskPriority::USER_VISIBLE, base::MayBlock(),
+ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})),
options_(options),
weak_factory_(this) {}
@@ -367,9 +383,6 @@ class PpdProviderImpl : public PpdProvider, public net::URLFetcherDelegate {
weak_factory_.GetWeakPtr(), reference, cb));
}
- // Our only sources of long running ops are cache fetches and network fetches.
- bool Idle() const override { return ppd_cache_->Idle() && !fetch_inflight_; }
-
// Common handler that gets called whenever a fetch completes. Note this
// is used both for |fetcher_| fetches (i.e. http[s]) and file-based fetches;
// |source| may be null in the latter case.
@@ -456,20 +469,22 @@ class PpdProviderImpl : public PpdProvider, public net::URLFetcherDelegate {
net::LOAD_DO_NOT_SEND_AUTH_DATA);
fetcher_->Start();
} else if (url.SchemeIs("file")) {
- disk_task_runner_->PostTaskAndReply(
- FROM_HERE, base::Bind(&PpdProviderImpl::FetchFile, this, url),
- base::Bind(&PpdProviderImpl::OnURLFetchComplete, this, nullptr));
+ auto file_contents = base::MakeUnique<std::string>();
+ std::string* content_ptr = file_contents.get();
+ base::PostTaskAndReplyWithResult(
+ disk_task_runner_.get(), FROM_HERE,
+ base::Bind(&FetchFile, url, content_ptr),
+ base::Bind(&PpdProviderImpl::OnFileFetchComplete, this,
+ base::Passed(&file_contents)));
}
}
- // Fetch the file pointed at by url and store it in |file_fetch_contents_|.
- // Use |file_fetch_success_| to indicate success or failure.
- void FetchFile(const GURL& url) {
- CHECK(url.is_valid());
- CHECK(url.SchemeIs("file"));
- base::ThreadRestrictions::AssertIOAllowed();
- file_fetch_success_ = base::ReadFileToString(base::FilePath(url.path()),
- &file_fetch_contents_);
+ // Handle the result of a file fetch.
+ void OnFileFetchComplete(std::unique_ptr<std::string> file_contents,
+ bool success) {
+ file_fetch_success_ = success;
+ file_fetch_contents_ = success ? *file_contents : "";
+ OnURLFetchComplete(nullptr);
}
void FinishPpdResolution(const ResolvePpdCallback& cb,
@@ -664,7 +679,7 @@ class PpdProviderImpl : public PpdProvider, public net::URLFetcherDelegate {
} else {
ppd_cache_->Store(
PpdReferenceToCacheKey(ppd_resolution_queue_.front().first), contents,
- base::Callback<void()>());
+ base::Bind(&OnPpdStored));
FinishPpdResolution(ppd_resolution_queue_.front().second,
PpdProvider::SUCCESS, contents);
}
@@ -1001,11 +1016,9 @@ scoped_refptr<PpdProvider> PpdProvider::Create(
const std::string& browser_locale,
scoped_refptr<net::URLRequestContextGetter> url_context_getter,
scoped_refptr<PpdCache> ppd_cache,
- scoped_refptr<base::SequencedTaskRunner> disk_task_runner,
const PpdProvider::Options& options) {
- return scoped_refptr<PpdProvider>(
- new PpdProviderImpl(browser_locale, url_context_getter, ppd_cache,
- disk_task_runner, options));
+ return scoped_refptr<PpdProvider>(new PpdProviderImpl(
+ browser_locale, url_context_getter, ppd_cache, options));
}
} // namespace printing
} // namespace chromeos
« no previous file with comments | « chromeos/printing/ppd_provider.h ('k') | chromeos/printing/ppd_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698