1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CLOUD_PRINT_GCP20_PROTOTYPE_CLOUD_PRINT_REQUEST_H_
6 #define CLOUD_PRINT_GCP20_PROTOTYPE_CLOUD_PRINT_REQUEST_H_
10 #include "base/basictypes.h"
11 #include "base/callback.h"
12 #include "base/memory/weak_ptr.h"
13 #include "net/url_request/url_fetcher.h"
14 #include "net/url_request/url_fetcher_delegate.h"
16 // Request to CloudPrint with timeout control.
17 // Delegate should delete this object once it is deleting.
18 class CloudPrintRequest : public net::URLFetcherDelegate,
19 public base::SupportsWeakPtr<CloudPrintRequest> {
24 virtual ~Delegate() {}
26 // Invoked when |fetcher_| finished fetching successfully.
27 // Use for erasing instance of CloudPrintRequest class.
28 virtual void OnFetchComplete(const std::string& response) = 0;
30 // Invoked when |fetcher_| finished fetching successfully.
31 // Use for erasing instance of CloudPrintRequest class.
32 virtual void OnFetchError(const std::string& server_api,
34 int server_http_code) = 0;
36 // Invoked when timeout is reached.
37 // Use for erasing instance of CloudPrintRequest class.
38 virtual void OnFetchTimeoutReached() = 0;
41 virtual ~CloudPrintRequest();
43 // Creates GET request.
44 static scoped_ptr<CloudPrintRequest> CreateGet(const GURL& url,
47 // Creates POST request.
48 static scoped_ptr<CloudPrintRequest> CreatePost(const GURL& url,
49 const std::string& content,
50 const std::string& mimetype,
53 // Starts request. Once fetch was completed, parser will be called.
54 void Run(const std::string& access_token,
55 scoped_refptr<net::URLRequestContextGetter> context_getter);
57 // Add header to request.
58 void AddHeader(const std::string& header);
61 CloudPrintRequest(const GURL& url,
62 net::URLFetcher::RequestType method,
65 // net::URLFetcherDelegate methods:
66 virtual void OnURLFetchComplete(const net::URLFetcher* source) override;
68 // Method for handling timeout.
69 void OnRequestTimeout();
71 scoped_ptr<net::URLFetcher> fetcher_;
75 DISALLOW_COPY_AND_ASSIGN(CloudPrintRequest);
78 #endif // CLOUD_PRINT_GCP20_PROTOTYPE_CLOUD_PRINT_REQUEST_H_