summaryrefslogtreecommitdiffstats
path: root/chrome/browser/automation
diff options
context:
space:
mode:
authortommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-07 02:35:04 +0000
committertommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-07 02:35:04 +0000
commitfc6fb7fbf9aca6b58f8c99a08a6c376b95bbc1a3 (patch)
treeca9186ed7ddbeb19604b495430d9c9814df57471 /chrome/browser/automation
parentcfc076ec466fc48e91c309448c4e5be3467b42c7 (diff)
downloadchromium_src-fc6fb7fbf9aca6b58f8c99a08a6c376b95bbc1a3.zip
chromium_src-fc6fb7fbf9aca6b58f8c99a08a6c376b95bbc1a3.tar.gz
chromium_src-fc6fb7fbf9aca6b58f8c99a08a6c376b95bbc1a3.tar.bz2
Basic wiring to enable downloads for CF's host browser network stack. A notable change here is that url automation job id's no longer exist and instead a request id is used. There's a 1 to 1 relation between a job and a request so this is more convenient.
Review URL: http://codereview.chromium.org/355036 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@31363 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/automation')
-rw-r--r--chrome/browser/automation/automation_resource_message_filter.cc5
-rw-r--r--chrome/browser/automation/automation_resource_message_filter.h7
-rw-r--r--chrome/browser/automation/url_request_automation_job.cc36
-rw-r--r--chrome/browser/automation/url_request_automation_job.h6
4 files changed, 22 insertions, 32 deletions
diff --git a/chrome/browser/automation/automation_resource_message_filter.cc b/chrome/browser/automation/automation_resource_message_filter.cc
index 953061e..e0512ca 100644
--- a/chrome/browser/automation/automation_resource_message_filter.cc
+++ b/chrome/browser/automation/automation_resource_message_filter.cc
@@ -20,7 +20,6 @@
AutomationResourceMessageFilter::RenderViewMap
AutomationResourceMessageFilter::filtered_render_views_;
-int AutomationResourceMessageFilter::unique_request_id_ = 1;
AutomationResourceMessageFilter::AutomationResourceMessageFilter()
: channel_(NULL) {
@@ -64,8 +63,8 @@ void AutomationResourceMessageFilter::OnChannelClosing() {
// Called on the IPC thread:
bool AutomationResourceMessageFilter::OnMessageReceived(
const IPC::Message& message) {
- int request_id = URLRequestAutomationJob::MayFilterMessage(message);
- if (request_id) {
+ int request_id;
+ if (URLRequestAutomationJob::MayFilterMessage(message, &request_id)) {
RequestMap::iterator it = request_map_.find(request_id);
if (it != request_map_.end()) {
URLRequestAutomationJob* job = it->second;
diff --git a/chrome/browser/automation/automation_resource_message_filter.h b/chrome/browser/automation/automation_resource_message_filter.h
index beb5fa8..ceb6115 100644
--- a/chrome/browser/automation/automation_resource_message_filter.h
+++ b/chrome/browser/automation/automation_resource_message_filter.h
@@ -39,10 +39,6 @@ class AutomationResourceMessageFilter
AutomationResourceMessageFilter();
virtual ~AutomationResourceMessageFilter();
- int NewRequestId() {
- return base::subtle::Barrier_AtomicIncrement(&unique_request_id_, 1);
- }
-
// IPC::ChannelProxy::MessageFilter methods:
virtual void OnFilterAdded(IPC::Channel* channel);
virtual void OnChannelConnected(int32 peer_pid);
@@ -98,9 +94,6 @@ class AutomationResourceMessageFilter
// owned by this class.
IPC::Channel* channel_;
- // A unique request id per process.
- static int unique_request_id_;
-
// Map of outstanding requests.
RequestMap request_map_;
diff --git a/chrome/browser/automation/url_request_automation_job.cc b/chrome/browser/automation/url_request_automation_job.cc
index 715e292..ead7aab 100644
--- a/chrome/browser/automation/url_request_automation_job.cc
+++ b/chrome/browser/automation/url_request_automation_job.cc
@@ -49,17 +49,16 @@ URLRequest::ProtocolFactory* URLRequestAutomationJob::old_http_factory_
URLRequest::ProtocolFactory* URLRequestAutomationJob::old_https_factory_
= NULL;
-URLRequestAutomationJob::URLRequestAutomationJob(
- URLRequest* request, int tab, AutomationResourceMessageFilter* filter)
- : URLRequestJob(request), id_(0), tab_(tab), message_filter_(filter),
- pending_buf_size_(0), redirect_status_(0) {
+URLRequestAutomationJob::URLRequestAutomationJob(URLRequest* request, int tab,
+ int request_id, AutomationResourceMessageFilter* filter)
+ : URLRequestJob(request),
+ id_(request_id),
+ tab_(tab),
+ message_filter_(filter),
+ pending_buf_size_(0),
+ redirect_status_(0) {
DLOG(INFO) << "URLRequestAutomationJob create. Count: " << ++instance_count_;
- if (message_filter_) {
- id_ = message_filter_->NewRequestId();
- DCHECK(id_);
- } else {
- NOTREACHED();
- }
+ DCHECK_NE(id_, -1);
}
URLRequestAutomationJob::~URLRequestAutomationJob() {
@@ -97,7 +96,7 @@ URLRequestJob* URLRequestAutomationJob::Factory(URLRequest* request,
if (AutomationResourceMessageFilter::LookupRegisteredRenderView(
request_info->child_id(), request_info->route_id(), &details)) {
URLRequestAutomationJob* job = new URLRequestAutomationJob(request,
- details.tab_handle, details.filter);
+ details.tab_handle, request_info->request_id(), details.filter);
return job;
}
}
@@ -202,23 +201,22 @@ bool URLRequestAutomationJob::IsRedirectResponse(
return false;
}
-int URLRequestAutomationJob::MayFilterMessage(const IPC::Message& message) {
+bool URLRequestAutomationJob::MayFilterMessage(const IPC::Message& message,
+ int* request_id) {
switch (message.type()) {
case AutomationMsg_RequestStarted::ID:
case AutomationMsg_RequestData::ID:
case AutomationMsg_RequestEnd::ID: {
void* iter = NULL;
int tab = 0;
- int id = 0;
- if (message.ReadInt(&iter, &tab) && message.ReadInt(&iter, &id)) {
- DCHECK(id);
- return id;
+ if (message.ReadInt(&iter, &tab) && message.ReadInt(&iter, request_id)) {
+ return true;
}
break;
}
}
- return 0;
+ return false;
}
void URLRequestAutomationJob::OnMessage(const IPC::Message& message) {
@@ -229,8 +227,8 @@ void URLRequestAutomationJob::OnMessage(const IPC::Message& message) {
IPC_END_MESSAGE_MAP()
}
-void URLRequestAutomationJob::OnRequestStarted(
- int tab, int id, const IPC::AutomationURLResponse& response) {
+void URLRequestAutomationJob::OnRequestStarted(int tab, int id,
+ const IPC::AutomationURLResponse& response) {
DLOG(INFO) << "URLRequestAutomationJob: " <<
request_->url().spec() << " - response started.";
set_expected_content_size(response.content_length);
diff --git a/chrome/browser/automation/url_request_automation_job.h b/chrome/browser/automation/url_request_automation_job.h
index d4ed0f0..0edd876 100644
--- a/chrome/browser/automation/url_request_automation_job.h
+++ b/chrome/browser/automation/url_request_automation_job.h
@@ -22,8 +22,8 @@ struct AutomationURLResponse;
// automation.
class URLRequestAutomationJob : public URLRequestJob {
public:
- URLRequestAutomationJob(
- URLRequest* request, int tab, AutomationResourceMessageFilter* filter);
+ URLRequestAutomationJob(URLRequest* request, int tab, int request_id,
+ AutomationResourceMessageFilter* filter);
// Register our factory for HTTP/HTTPs requests.
static bool EnsureProtocolFactoryRegistered();
@@ -40,7 +40,7 @@ class URLRequestAutomationJob : public URLRequestJob {
virtual bool IsRedirectResponse(GURL* location, int* http_status_code);
// Peek and process automation messages for URL requests.
- static int MayFilterMessage(const IPC::Message& message);
+ static bool MayFilterMessage(const IPC::Message& message, int* request_id);
void OnMessage(const IPC::Message& message);
int id() const {