// 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 CONTENT_TEST_APPCACHE_TEST_HELPER_H_
#define CONTENT_TEST_APPCACHE_TEST_HELPER_H_

#include <set>

#include "base/macros.h"
#include "content/browser/appcache/appcache_storage.h"

namespace content {
class AppCacheServiceImpl;
}

namespace content {

// Helper class for inserting data into a ChromeAppCacheService and reading it
// back.
class AppCacheTestHelper : public AppCacheStorage::Delegate {
 public:
  AppCacheTestHelper();
  ~AppCacheTestHelper() override;
  void AddGroupAndCache(AppCacheServiceImpl* appcache_service,
                        const GURL& manifest_url);

  void GetOriginsWithCaches(AppCacheServiceImpl* appcache_service,
                            std::set<GURL>* origins);
 private:
  void OnGroupAndNewestCacheStored(AppCacheGroup* group,
                                   AppCache* newest_cache,
                                   bool success,
                                   bool would_exceed_quota) override;
  void OnGotAppCacheInfo(int rv);

  int group_id_;
  int appcache_id_;
  int response_id_;
  scoped_refptr<AppCacheInfoCollection> appcache_info_;
  std::set<GURL>* origins_;  // not owned

  DISALLOW_COPY_AND_ASSIGN(AppCacheTestHelper);
};

}  // namespace content

#endif  // CONTENT_TEST_APPCACHE_TEST_HELPER_H_
