// Copyright (c) 2012 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 WEBKIT_TOOLS_TEST_SHELL_TEST_SHELL_WEBMIMEREGISTRY_IMPL_H_
#define WEBKIT_TOOLS_TEST_SHELL_TEST_SHELL_WEBMIMEREGISTRY_IMPL_H_

#include <string>
#include <vector>

#include "base/compiler_specific.h"
#include "base/hash_tables.h"
#include "webkit/glue/simple_webmimeregistry_impl.h"

class TestShellWebMimeRegistryImpl
    : public webkit_glue::SimpleWebMimeRegistryImpl {
 public:
  TestShellWebMimeRegistryImpl();
  virtual ~TestShellWebMimeRegistryImpl();

  // Override to force that we only support types and codecs that are supported
  // by all variations of Chromium.
  //
  // Media layout tests use canPlayType() to determine the test input files.
  // Different flavours of Chromium support different codecs, which has an
  // impact on how canPlayType() behaves.  Since Chromium's baselines and
  // expectations are generated against the common set of types, we need to
  // prevent canPlayType() from indicating it supports other types when running
  // layout tests.
  virtual WebKit::WebMimeRegistry::SupportsType supportsMediaMIMEType(
      const WebKit::WebString&,
      const WebKit::WebString&) OVERRIDE;

 private:
  bool IsBlacklistedMediaMimeType(const std::string& mime_type);
  bool HasBlacklistedMediaCodecs(const std::vector<std::string>& codecs);

  std::vector<std::string> blacklisted_media_types_;
  std::vector<std::string> blacklisted_media_codecs_;

  DISALLOW_COPY_AND_ASSIGN(TestShellWebMimeRegistryImpl);
};

#endif  // WEBKIT_TOOLS_TEST_SHELL_TEST_SHELL_WEBMIMEREGISTRY_IMPL_H_
