1// Copyright (c) 2012 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_SERVICE_CLOUD_PRINT_CLOUD_PRINT_WIPEOUT_H_
6#define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_WIPEOUT_H_
7
8#include <list>
9#include <string>
10
11#include "base/basictypes.h"
12#include "chrome/service/cloud_print/cloud_print_url_fetcher.h"
13#include "url/gurl.h"
14
15namespace cloud_print {
16
17// CloudPrintWipeout unregisters list of printers from the cloudprint service.
18class CloudPrintWipeout : public CloudPrintURLFetcherDelegate {
19 public:
20  class Client {
21   public:
22    virtual void OnUnregisterPrintersComplete() = 0;
23   protected:
24     virtual ~Client() {}
25  };
26
27  CloudPrintWipeout(Client* client, const GURL& cloud_print_server_url);
28  virtual ~CloudPrintWipeout();
29
30  void UnregisterPrinters(const std::string& auth_token,
31                          const std::list<std::string>& printer_ids);
32
33  // CloudPrintURLFetcher::Delegate implementation.
34  virtual CloudPrintURLFetcher::ResponseAction HandleJSONData(
35      const net::URLFetcher* source,
36      const GURL& url,
37      base::DictionaryValue* json_data,
38      bool succeeded) OVERRIDE;
39  virtual void OnRequestGiveUp() OVERRIDE;
40  virtual CloudPrintURLFetcher::ResponseAction OnRequestAuthError() OVERRIDE;
41  virtual std::string GetAuthHeader() OVERRIDE;
42
43 private:
44  void UnregisterNextPrinter();
45
46  // CloudPrintWipeout client.
47  Client* client_;
48  // Cloud Print server url.
49  GURL cloud_print_server_url_;
50  // The CloudPrintURLFetcher instance for the current request.
51  scoped_refptr<CloudPrintURLFetcher> request_;
52  // Auth token.
53  std::string auth_token_;
54  // List of printer to unregister
55  std::list<std::string> printer_ids_;
56
57  DISALLOW_COPY_AND_ASSIGN(CloudPrintWipeout);
58};
59
60}  // namespace cloud_print
61
62#endif  // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_WIPEOUT_H_
63
64