// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SANDBOX_SRC_HANDLE_CLOSER_AGENT_H_
#define SANDBOX_SRC_HANDLE_CLOSER_AGENT_H_

#include "base/basictypes.h"
#include "base/strings/string16.h"
#include "base/win/scoped_handle.h"
#include "sandbox/win/src/handle_closer.h"
#include "sandbox/win/src/sandbox_types.h"
#include "sandbox/win/src/target_services.h"


namespace sandbox {

// Target process code to close the handle list copied over from the broker.
class HandleCloserAgent {
 public:
  HandleCloserAgent();
  ~HandleCloserAgent();

  // Reads the serialized list from the broker and creates the lookup map.
  // Updates is_csrss_connected based on type of handles closed.
  void InitializeHandlesToClose(bool* is_csrss_connected);

  // Closes any handles matching those in the lookup map.
  bool CloseHandles();

  // True if we have handles waiting to be closed.
  static bool NeedsHandlesClosed();

 private:
  // Attempt to stuff a closed handle with a dummy Event.
  bool AttemptToStuffHandleSlot(HANDLE closed_handle,
                                const base::string16& type);

  HandleMap handles_to_close_;
  base::win::ScopedHandle dummy_handle_;

  DISALLOW_COPY_AND_ASSIGN(HandleCloserAgent);
};

}  // namespace sandbox

#endif  // SANDBOX_SRC_HANDLE_CLOSER_AGENT_H_
