viewer_unittest.cc 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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 "components/dom_distiller/core/viewer.h"
  5. #include <memory>
  6. #include "components/dom_distiller/core/distilled_page_prefs.h"
  7. #include "components/dom_distiller/core/distiller_ui_handle.h"
  8. #include "components/dom_distiller/core/dom_distiller_service.h"
  9. #include "components/dom_distiller/core/task_tracker.h"
  10. #include "components/dom_distiller/core/url_constants.h"
  11. #include "components/dom_distiller/core/url_utils.h"
  12. #include "net/base/url_util.h"
  13. #include "testing/gmock/include/gmock/gmock.h"
  14. #include "testing/gtest/include/gtest/gtest.h"
  15. #include "url/url_util.h"
  16. namespace dom_distiller {
  17. namespace {
  18. const GURL GetDistillerViewUrlFromUrl(const std::string& url) {
  19. return url_utils::GetDistillerViewUrlFromUrl(kDomDistillerScheme, GURL(url),
  20. "Title");
  21. }
  22. const GURL GetDistillerViewUrlFromEntryId(const std::string& id) {
  23. return url_utils::GetDistillerViewUrlFromEntryId(kDomDistillerScheme, id);
  24. }
  25. } // namespace
  26. class FakeViewRequestDelegate : public ViewRequestDelegate {
  27. public:
  28. ~FakeViewRequestDelegate() override = default;
  29. MOCK_METHOD1(OnArticleReady, void(const DistilledArticleProto* proto));
  30. MOCK_METHOD1(OnArticleUpdated,
  31. void(ArticleDistillationUpdate article_update));
  32. };
  33. class TestDomDistillerService : public DomDistillerServiceInterface {
  34. public:
  35. TestDomDistillerService() = default;
  36. ~TestDomDistillerService() override = default;
  37. MOCK_METHOD0(ViewUrlImpl, ViewerHandle*());
  38. std::unique_ptr<ViewerHandle> ViewUrl(
  39. ViewRequestDelegate*,
  40. std::unique_ptr<DistillerPage> distiller_page,
  41. const GURL&) override {
  42. return std::unique_ptr<ViewerHandle>(ViewUrlImpl());
  43. }
  44. std::unique_ptr<DistillerPage> CreateDefaultDistillerPage(
  45. const gfx::Size& render_view_size) override {
  46. return nullptr;
  47. }
  48. std::unique_ptr<DistillerPage> CreateDefaultDistillerPageWithHandle(
  49. std::unique_ptr<SourcePageHandle> handle) override {
  50. return nullptr;
  51. }
  52. DistilledPagePrefs* GetDistilledPagePrefs() override;
  53. DistillerUIHandle* GetDistillerUIHandle() override;
  54. };
  55. class DomDistillerViewerTest : public testing::Test {
  56. public:
  57. void SetUp() override {
  58. service_ = std::make_unique<TestDomDistillerService>();
  59. }
  60. protected:
  61. std::unique_ptr<ViewerHandle> CreateViewRequest(
  62. const GURL& url,
  63. ViewRequestDelegate* view_request_delegate) {
  64. return viewer::CreateViewRequest(service_.get(), url, view_request_delegate,
  65. gfx::Size());
  66. }
  67. std::unique_ptr<TestDomDistillerService> service_;
  68. };
  69. TEST_F(DomDistillerViewerTest, TestCreatingViewUrlRequest) {
  70. std::unique_ptr<FakeViewRequestDelegate> view_request_delegate(
  71. new FakeViewRequestDelegate());
  72. ViewerHandle* viewer_handle(new ViewerHandle(ViewerHandle::CancelCallback()));
  73. EXPECT_CALL(*service_, ViewUrlImpl())
  74. .WillOnce(testing::Return(viewer_handle));
  75. CreateViewRequest(GetDistillerViewUrlFromUrl("http://www.example.com/"),
  76. view_request_delegate.get());
  77. }
  78. TEST_F(DomDistillerViewerTest, TestCreatingInvalidViewRequest) {
  79. std::unique_ptr<FakeViewRequestDelegate> view_request_delegate(
  80. new FakeViewRequestDelegate());
  81. EXPECT_CALL(*service_, ViewUrlImpl()).Times(0);
  82. // Specify none of the required query parameters.
  83. CreateViewRequest(GURL(std::string(kDomDistillerScheme) + "://host?foo=bar"),
  84. view_request_delegate.get());
  85. // Specify both of the required query parameters.
  86. CreateViewRequest(net::AppendOrReplaceQueryParameter(
  87. GetDistillerViewUrlFromUrl("http://www.example.com/"),
  88. kEntryIdKey, "abc-def"),
  89. view_request_delegate.get());
  90. // Specify an internal Chrome page.
  91. CreateViewRequest(GetDistillerViewUrlFromUrl("chrome://settings/"),
  92. view_request_delegate.get());
  93. // Specify a recursive URL.
  94. CreateViewRequest(GetDistillerViewUrlFromUrl(
  95. GetDistillerViewUrlFromEntryId("abc-def").spec()),
  96. view_request_delegate.get());
  97. // Specify a non-distilled URL.
  98. CreateViewRequest(GURL("https://example.com"), view_request_delegate.get());
  99. // Specify an empty URL.
  100. CreateViewRequest(GURL(), view_request_delegate.get());
  101. }
  102. DistilledPagePrefs* TestDomDistillerService::GetDistilledPagePrefs() {
  103. return nullptr;
  104. }
  105. DistillerUIHandle* TestDomDistillerService::GetDistillerUIHandle() {
  106. return nullptr;
  107. }
  108. TEST_F(DomDistillerViewerTest, TestGetDistilledPageThemeJsOutput) {
  109. std::string kDarkJs = "useTheme('dark');";
  110. std::string kSepiaJs = "useTheme('sepia');";
  111. std::string kLightJs = "useTheme('light');";
  112. EXPECT_EQ(
  113. kDarkJs.compare(viewer::GetDistilledPageThemeJs(mojom::Theme::kDark)), 0);
  114. EXPECT_EQ(
  115. kLightJs.compare(viewer::GetDistilledPageThemeJs(mojom::Theme::kLight)),
  116. 0);
  117. EXPECT_EQ(
  118. kSepiaJs.compare(viewer::GetDistilledPageThemeJs(mojom::Theme::kSepia)),
  119. 0);
  120. }
  121. TEST_F(DomDistillerViewerTest, TestGetDistilledPageFontFamilyJsOutput) {
  122. std::string kSerifJsFontFamily = "useFontFamily('serif');";
  123. std::string kMonospaceJsFontFamily = "useFontFamily('monospace');";
  124. std::string kSansSerifJsFontFamily = "useFontFamily('sans-serif');";
  125. EXPECT_EQ(kSerifJsFontFamily.compare(viewer::GetDistilledPageFontFamilyJs(
  126. mojom::FontFamily::kSerif)),
  127. 0);
  128. EXPECT_EQ(kMonospaceJsFontFamily.compare(viewer::GetDistilledPageFontFamilyJs(
  129. mojom::FontFamily::kMonospace)),
  130. 0);
  131. EXPECT_EQ(kSansSerifJsFontFamily.compare(viewer::GetDistilledPageFontFamilyJs(
  132. mojom::FontFamily::kSansSerif)),
  133. 0);
  134. }
  135. TEST_F(DomDistillerViewerTest, TestGetDistilledPageFontScalingJsOutput) {
  136. std::string kJsFontScaling = "useFontScaling(5);";
  137. EXPECT_EQ(kJsFontScaling.compare(viewer::GetDistilledPageFontScalingJs(5)),
  138. 0);
  139. }
  140. } // namespace dom_distiller