Home | History | Annotate | Download | only in local_discovery
      1 // Copyright 2014 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.
      4 
      5 #ifndef CHROME_BROWSER_LOCAL_DISCOVERY_GCD_API_FLOW_H_
      6 #define CHROME_BROWSER_LOCAL_DISCOVERY_GCD_API_FLOW_H_
      7 
      8 #include <string>
      9 
     10 #include "google_apis/gaia/oauth2_token_service.h"
     11 #include "net/url_request/url_fetcher.h"
     12 #include "net/url_request/url_request_context_getter.h"
     13 
     14 namespace local_discovery {
     15 
     16 // API flow for communicating with cloud print and cloud devices.
     17 class GCDApiFlow {
     18  public:
     19   // TODO(noamsml): Better error model for this class.
     20   enum Status {
     21     SUCCESS,
     22     ERROR_TOKEN,
     23     ERROR_NETWORK,
     24     ERROR_HTTP_CODE,
     25     ERROR_FROM_SERVER,
     26     ERROR_MALFORMED_RESPONSE
     27   };
     28 
     29   // Provides GCDApiFlowImpl with parameters required to make request.
     30   // Parses results of requests.
     31   class Request {
     32    public:
     33     Request();
     34     virtual ~Request();
     35 
     36     virtual void OnGCDAPIFlowError(Status status) = 0;
     37 
     38     virtual void OnGCDAPIFlowComplete(const base::DictionaryValue& value) = 0;
     39 
     40     virtual GURL GetURL() = 0;
     41 
     42     virtual std::string GetOAuthScope() = 0;
     43 
     44     virtual net::URLFetcher::RequestType GetRequestType();
     45 
     46     virtual std::vector<std::string> GetExtraRequestHeaders() = 0;
     47 
     48     // If there is no data, set upload_type and upload_data to ""
     49     virtual void GetUploadData(std::string* upload_type,
     50                                std::string* upload_data);
     51 
     52    private:
     53     DISALLOW_COPY_AND_ASSIGN(Request);
     54   };
     55 
     56   GCDApiFlow();
     57   virtual ~GCDApiFlow();
     58 
     59   static scoped_ptr<GCDApiFlow> Create(
     60       net::URLRequestContextGetter* request_context,
     61       OAuth2TokenService* token_service,
     62       const std::string& account_id);
     63 
     64   virtual void Start(scoped_ptr<Request> request) = 0;
     65 
     66  private:
     67   DISALLOW_COPY_AND_ASSIGN(GCDApiFlow);
     68 };
     69 
     70 class GCDApiFlowRequest : public GCDApiFlow::Request {
     71  public:
     72   GCDApiFlowRequest();
     73   virtual ~GCDApiFlowRequest();
     74 
     75   // GCDApiFlowRequest implementation
     76   virtual std::string GetOAuthScope() OVERRIDE;
     77   virtual std::vector<std::string> GetExtraRequestHeaders() OVERRIDE;
     78 
     79  private:
     80   DISALLOW_COPY_AND_ASSIGN(GCDApiFlowRequest);
     81 };
     82 
     83 class CloudPrintApiFlowRequest : public GCDApiFlow::Request {
     84  public:
     85   CloudPrintApiFlowRequest();
     86   virtual ~CloudPrintApiFlowRequest();
     87 
     88   // GCDApiFlowRequest implementation
     89   virtual std::string GetOAuthScope() OVERRIDE;
     90   virtual std::vector<std::string> GetExtraRequestHeaders() OVERRIDE;
     91 
     92  private:
     93   DISALLOW_COPY_AND_ASSIGN(CloudPrintApiFlowRequest);
     94 };
     95 
     96 }  // namespace local_discovery
     97 
     98 #endif  // CHROME_BROWSER_LOCAL_DISCOVERY_GCD_API_FLOW_H_
     99