// Copyright 2014 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 EXTENSIONS_BROWSER_API_API_RESOURCE_H_
#define EXTENSIONS_BROWSER_API_API_RESOURCE_H_

#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "content/public/browser/browser_thread.h"
#include "extensions/common/extension.h"

namespace extensions {

// An ApiResource represents something that an extension API manages, such as a
// socket or a serial-port connection. Typically, an ApiResourceManager will
// control the lifetime of all ApiResources of a specific derived type.
class ApiResource {
 public:
  virtual ~ApiResource();

  const std::string& owner_extension_id() const { return owner_extension_id_; }

  // If this method returns |true|, the resource remains open when the
  // owning extension is suspended due to inactivity.
  virtual bool IsPersistent() const;

  static const content::BrowserThread::ID kThreadId =
      content::BrowserThread::IO;

 protected:
  explicit ApiResource(const std::string& owner_extension_id);

 private:
  // The extension that owns this resource.
  const std::string owner_extension_id_;

  DISALLOW_COPY_AND_ASSIGN(ApiResource);
};

}  // namespace extensions

#endif  // EXTENSIONS_BROWSER_API_API_RESOURCE_H_
