1// Copyright (c) 2011 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_PRINTING_CLOUD_PRINT_CLOUD_PRINT_SETUP_HANDLER_H_
6#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_SETUP_HANDLER_H_
7#pragma once
8
9#include "base/memory/weak_ptr.h"
10#include "chrome/browser/printing/cloud_print/cloud_print_setup_flow.h"
11
12// Cloud Print setup handler.
13// Provides a weak pointer adapter so that callers of
14// CloudPrintSetupFlow::OpenDialog can still be notified when the dialog
15// completes, but don't have to stick around until the end. Lifetime should be
16// shorter than that of it's owner.
17class CloudPrintSetupHandler
18    : public CloudPrintSetupFlow::Delegate,
19      public base::SupportsWeakPtr<CloudPrintSetupHandler> {
20 public:
21  class Delegate {
22   public:
23    virtual ~Delegate() {}
24    // Called when the setup dialog is closed.
25    virtual void OnCloudPrintSetupClosed() = 0;
26  };
27
28  explicit CloudPrintSetupHandler(Delegate* handler);
29  virtual ~CloudPrintSetupHandler();
30
31  // CloudPrintSetupFlow::Delegate implementation.
32  virtual void OnDialogClosed();
33
34 private:
35  Delegate* handler_;
36
37  DISALLOW_COPY_AND_ASSIGN(CloudPrintSetupHandler);
38};
39
40// Workaround for MSVC 2005 not handling inheritance from nested classes well.
41typedef CloudPrintSetupHandler::Delegate CloudPrintSetupHandlerDelegate;
42
43#endif  // CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_SETUP_HANDLER_H_
44