• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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