#include "base/threading/thread_restrictions.h"
#include "base/values.h"
#include "chrome/browser/printing/print_job_worker.h"
-#include "chrome/browser/printing/printing_ui_web_contents_observer.h"
namespace printing {
-PrinterQuery::PrinterQuery()
- : io_message_loop_(base::MessageLoop::current()),
- worker_(new PrintJobWorker(this)),
+PrinterQuery::PrinterQuery(int render_process_id, int render_view_id)
+ : worker_(new PrintJobWorker(render_process_id, render_view_id, this)),
is_print_dialog_box_shown_(false),
cookie_(PrintSettings::NewCookie()),
last_status_(PrintingContext::FAILED) {
return worker_.release();
}
-base::MessageLoop* PrinterQuery::message_loop() {
- return io_message_loop_;
-}
-
const PrintSettings& PrinterQuery::settings() const {
return settings_;
}
void PrinterQuery::GetSettings(
GetSettingsAskParam ask_user_for_settings,
- scoped_ptr<PrintingUIWebContentsObserver> web_contents_observer,
int expected_page_count,
bool has_selection,
MarginType margin_type,
const base::Closure& callback) {
- DCHECK_EQ(io_message_loop_, base::MessageLoop::current());
+ DCHECK(RunsTasksOnCurrentThread());
DCHECK(!is_print_dialog_box_shown_);
StartWorker(callback);
// Real work is done in PrintJobWorker::GetSettings().
is_print_dialog_box_shown_ = ask_user_for_settings == ASK_USER;
- worker_->message_loop()->PostTask(
- FROM_HERE,
- base::Bind(&PrintJobWorker::GetSettings,
- base::Unretained(worker_.get()),
- is_print_dialog_box_shown_,
- base::Passed(&web_contents_observer),
- expected_page_count,
- has_selection,
- margin_type));
+ worker_->PostTask(FROM_HERE,
+ base::Bind(&PrintJobWorker::GetSettings,
+ base::Unretained(worker_.get()),
+ is_print_dialog_box_shown_,
+ expected_page_count,
+ has_selection,
+ margin_type));
}
-void PrinterQuery::SetSettings(const base::DictionaryValue& new_settings,
+void PrinterQuery::SetSettings(scoped_ptr<base::DictionaryValue> new_settings,
const base::Closure& callback) {
StartWorker(callback);
- worker_->message_loop()->PostTask(
- FROM_HERE,
- base::Bind(&PrintJobWorker::SetSettings,
- base::Unretained(worker_.get()),
- new_settings.DeepCopy()));
-}
-
-void PrinterQuery::SetWorkerDestination(
- PrintDestinationInterface* destination) {
- worker_->SetPrintDestination(destination);
+ worker_->PostTask(FROM_HERE,
+ base::Bind(&PrintJobWorker::SetSettings,
+ base::Unretained(worker_.get()),
+ base::Passed(&new_settings)));
}
void PrinterQuery::StartWorker(const base::Closure& callback) {
DCHECK(worker_.get());
// Lazily create the worker thread. There is one worker thread per print job.
- if (!worker_->message_loop())
+ if (!worker_->IsRunning())
worker_->Start();
callback_ = callback;