12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CLOUD_PRINT_SERVICE_SETUP_LISTENER_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CLOUD_PRINT_SERVICE_SETUP_LISTENER_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector>
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ipc/ipc_listener.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Thread;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TimeDelta;
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WaitableEvent;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // base
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace IPC {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Channel;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // IPC
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Simple IPC listener to run on setup utility size wait message with data about
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// environment from service process.
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SetupListener : public IPC::Listener {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static const char kXpsAvailableJsonValueName[];
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kChromePathJsonValueName[];
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kPrintersJsonValueName[];
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kUserDataDirJsonValueName[];
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const char kUserNameJsonValueName[];
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static const wchar_t kSetupPipeName[];
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  explicit SetupListener(const base::string16& user);
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~SetupListener();
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnChannelError() OVERRIDE;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool WaitResponce(const base::TimeDelta& delta);
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const base::FilePath& chrome_path() const {
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return chrome_path_;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const base::FilePath& user_data_dir() const {
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return user_data_dir_;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const base::string16& user_name() const {
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return user_name_;
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::vector<std::string>& printers() const {
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return printers_;
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool is_xps_available() const {
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return is_xps_available_;
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void Disconnect();
68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void Connect(const base::string16& user);
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath chrome_path_;
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath user_data_dir_;
72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 user_name_;
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<std::string> printers_;
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool is_xps_available_;
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool succeded_;
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::WaitableEvent> done_event_;
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Thread> ipc_thread_;
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<IPC::Channel> channel_;
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CLOUD_PRINT_SERVICE_SETUP_LISTENER_H_
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
84