1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Simple implementation of about: protocol handler that treats everything as
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// about:blank.  No other about: features should be available to web content,
7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// so they're not implemented here.
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/url_request/url_request_about_job.h"
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/compiler_specific.h"
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/message_loop.h"
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsennamespace net {
1521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenURLRequestAboutJob::URLRequestAboutJob(URLRequest* request)
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    : URLRequestJob(request),
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {
1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottURLRequestJob* URLRequestAboutJob::Factory(URLRequest* request,
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                           const std::string& scheme) {
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return new URLRequestAboutJob(request);
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid URLRequestAboutJob::Start() {
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Start reading asynchronously so that all error reporting and data
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // callbacks happen as they would for network requests.
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  MessageLoop::current()->PostTask(
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      FROM_HERE,
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      method_factory_.NewRunnableMethod(&URLRequestAboutJob::StartAsync));
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool URLRequestAboutJob::GetMimeType(std::string* mime_type) const {
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  *mime_type = "text/html";
37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return true;
38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
403345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLRequestAboutJob::~URLRequestAboutJob() {
413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid URLRequestAboutJob::StartAsync() {
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  NotifyHeadersComplete();
45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}  // namespace net
48