| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CLOUD_PRINT_GCP20_PROTOTYPE_CLOUD_PRINT_REQUEST_H_ |
| #define CLOUD_PRINT_GCP20_PROTOTYPE_CLOUD_PRINT_REQUEST_H_ |
| |
| #include <string> |
| |
| #include "base/basictypes.h" |
| #include "base/callback.h" |
| #include "base/memory/weak_ptr.h" |
| #include "net/url_request/url_fetcher.h" |
| #include "net/url_request/url_fetcher_delegate.h" |
| |
| // Request to CloudPrint with timeout control. |
| // Delegate should delete this object once it is deleting. |
| class CloudPrintRequest : public net::URLFetcherDelegate, |
| public base::SupportsWeakPtr<CloudPrintRequest> { |
| public: |
| class Delegate { |
| public: |
| Delegate() {} |
| virtual ~Delegate() {} |
| |
| // Invoked when |fetcher_| finished fetching successfully. |
| // Use for erasing instance of CloudPrintRequest class. |
| virtual void OnFetchComplete(const std::string& response) = 0; |
| |
| // Invoked when |fetcher_| finished fetching successfully. |
| // Use for erasing instance of CloudPrintRequest class. |
| virtual void OnFetchError(const std::string& server_api, |
| int server_code, |
| int server_http_code) = 0; |
| |
| // Invoked when timeout is reached. |
| // Use for erasing instance of CloudPrintRequest class. |
| virtual void OnFetchTimeoutReached() = 0; |
| }; |
| |
| ~CloudPrintRequest() override; |
| |
| // Creates GET request. |
| static scoped_ptr<CloudPrintRequest> CreateGet(const GURL& url, |
| Delegate* delegate); |
| |
| // Creates POST request. |
| static scoped_ptr<CloudPrintRequest> CreatePost(const GURL& url, |
| const std::string& content, |
| const std::string& mimetype, |
| Delegate* delegate); |
| |
| // Starts request. Once fetch was completed, parser will be called. |
| void Run(const std::string& access_token, |
| scoped_refptr<net::URLRequestContextGetter> context_getter); |
| |
| // Add header to request. |
| void AddHeader(const std::string& header); |
| |
| private: |
| CloudPrintRequest(const GURL& url, |
| net::URLFetcher::RequestType method, |
| Delegate* delegate); |
| |
| // net::URLFetcherDelegate methods: |
| void OnURLFetchComplete(const net::URLFetcher* source) override; |
| |
| // Method for handling timeout. |
| void OnRequestTimeout(); |
| |
| scoped_ptr<net::URLFetcher> fetcher_; |
| |
| Delegate* delegate_; |
| |
| DISALLOW_COPY_AND_ASSIGN(CloudPrintRequest); |
| }; |
| |
| #endif // CLOUD_PRINT_GCP20_PROTOTYPE_CLOUD_PRINT_REQUEST_H_ |
| |