api_unittest.cc 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "extensions/browser/api_unittest.h"
  5. #include "base/values.h"
  6. #include "components/user_prefs/user_prefs.h"
  7. #include "content/public/browser/browser_context.h"
  8. #include "content/public/browser/browser_thread.h"
  9. #include "content/public/browser/content_browser_client.h"
  10. #include "content/public/browser/site_instance.h"
  11. #include "content/public/browser/web_contents.h"
  12. #include "content/public/common/content_client.h"
  13. #include "content/public/common/url_constants.h"
  14. #include "content/public/test/test_browser_context.h"
  15. #include "content/public/test/web_contents_tester.h"
  16. #include "extensions/browser/api_test_utils.h"
  17. #include "extensions/browser/extension_function.h"
  18. #include "extensions/browser/test_extensions_browser_client.h"
  19. #include "extensions/common/extension.h"
  20. #include "extensions/common/extension_builder.h"
  21. #include "extensions/common/manifest.h"
  22. #include "extensions/common/manifest_handlers/background_info.h"
  23. #include "extensions/common/value_builder.h"
  24. namespace utils = extensions::api_test_utils;
  25. namespace extensions {
  26. ApiUnitTest::ApiUnitTest() = default;
  27. ApiUnitTest::~ApiUnitTest() = default;
  28. void ApiUnitTest::SetUp() {
  29. ExtensionsTest::SetUp();
  30. user_prefs::UserPrefs::Set(browser_context(), &testing_pref_service_);
  31. extension_ = ExtensionBuilder("Test").Build();
  32. }
  33. void ApiUnitTest::TearDown() {
  34. extension_ = nullptr;
  35. contents_.reset();
  36. ExtensionsTest::TearDown();
  37. }
  38. void ApiUnitTest::CreateBackgroundPage() {
  39. if (!contents_) {
  40. GURL url = BackgroundInfo::GetBackgroundURL(extension());
  41. if (url.is_empty())
  42. url = GURL(url::kAboutBlankURL);
  43. contents_ = content::WebContents::Create(content::WebContents::CreateParams(
  44. browser_context(),
  45. content::SiteInstance::CreateForURL(browser_context(), url)));
  46. }
  47. }
  48. std::unique_ptr<base::Value> ApiUnitTest::RunFunctionAndReturnValue(
  49. ExtensionFunction* function,
  50. const std::string& args) {
  51. function->set_extension(extension());
  52. if (contents_)
  53. function->SetRenderFrameHost(contents_->GetPrimaryMainFrame());
  54. return std::unique_ptr<base::Value>(utils::RunFunctionAndReturnSingleResult(
  55. function, args, browser_context()));
  56. }
  57. std::unique_ptr<base::DictionaryValue>
  58. ApiUnitTest::RunFunctionAndReturnDictionary(ExtensionFunction* function,
  59. const std::string& args) {
  60. base::Value* value = RunFunctionAndReturnValue(function, args).release();
  61. base::DictionaryValue* dict = NULL;
  62. if (value && !value->GetAsDictionary(&dict))
  63. delete value;
  64. // We expect to either have successfully retrieved a dictionary from the
  65. // value, or the value to have been NULL.
  66. EXPECT_TRUE(dict || !value);
  67. return std::unique_ptr<base::DictionaryValue>(dict);
  68. }
  69. std::unique_ptr<base::Value> ApiUnitTest::RunFunctionAndReturnList(
  70. ExtensionFunction* function,
  71. const std::string& args) {
  72. base::Value* value = RunFunctionAndReturnValue(function, args).release();
  73. // We expect to either have successfully gotten a list value, or the value to
  74. // have been NULL.
  75. EXPECT_TRUE(!value || value->is_list());
  76. if (value && !value->is_list())
  77. delete value;
  78. return std::unique_ptr<base::Value>(value);
  79. }
  80. std::string ApiUnitTest::RunFunctionAndReturnError(ExtensionFunction* function,
  81. const std::string& args) {
  82. function->set_extension(extension());
  83. if (contents_)
  84. function->SetRenderFrameHost(contents_->GetPrimaryMainFrame());
  85. return utils::RunFunctionAndReturnError(function, args, browser_context());
  86. }
  87. void ApiUnitTest::RunFunction(ExtensionFunction* function,
  88. const std::string& args) {
  89. RunFunctionAndReturnValue(function, args);
  90. }
  91. } // namespace extensions