// Copyright 2016 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.

#include "chrome/browser/ui/extensions/extension_message_bubble_bridge.h"

#include "base/bind.h"
#include "base/command_line.h"
#include "base/logging.h"
#include "base/path_service.h"
#include "base/values.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_service_test_with_install.h"
#include "chrome/browser/extensions/extension_web_ui_override_registrar.h"
#include "chrome/browser/extensions/ntp_overridden_bubble_delegate.h"
#include "chrome/browser/extensions/suspicious_extension_bubble_delegate.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/toolbar/test_toolbar_actions_bar_bubble_delegate.h"
#include "chrome/browser/ui/toolbar/toolbar_actions_bar_bubble_delegate.h"
#include "chrome/browser/ui/toolbar/toolbar_actions_model.h"
#include "chrome/browser/ui/toolbar/toolbar_actions_model_factory.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/grit/generated_resources.h"
#include "chrome/test/base/test_browser_window.h"
#include "chrome/test/base/testing_profile.h"
#include "components/crx_file/id_util.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/strings/grit/components_strings.h"
#include "components/vector_icons/vector_icons.h"
#include "content/public/browser/browser_context.h"
#include "extensions/browser/disable_reason.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/common/extension_builder.h"
#include "extensions/common/manifest.h"
#include "extensions/common/value_builder.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/l10n/l10n_util.h"

namespace {

std::unique_ptr<KeyedService> BuildOverrideRegistrar(
    content::BrowserContext* context) {
  return std::make_unique<extensions::ExtensionWebUIOverrideRegistrar>(context);
}

std::unique_ptr<KeyedService> BuildToolbarModel(
    content::BrowserContext* context) {
  return std::make_unique<ToolbarActionsModel>(
      Profile::FromBrowserContext(context),
      extensions::ExtensionPrefs::Get(context));
}

}  // namespace

class ExtensionMessageBubbleBridgeUnitTest
    : public extensions::ExtensionServiceTestWithInstall {
 public:
  ExtensionMessageBubbleBridgeUnitTest() {}
  ~ExtensionMessageBubbleBridgeUnitTest() override {}
  Browser* browser() { return browser_.get(); }

 private:
  void SetUp() override {
    ExtensionServiceTestWithInstall::SetUp();
    InitializeEmptyExtensionService();

    browser_window_.reset(new TestBrowserWindow());
    Browser::CreateParams params(profile(), true);
    params.type = Browser::TYPE_TABBED;
    params.window = browser_window_.get();
    browser_.reset(new Browser(params));

    extensions::ExtensionWebUIOverrideRegistrar::GetFactoryInstance()
        ->SetTestingFactory(browser()->profile(),
                            base::BindRepeating(&BuildOverrideRegistrar));
    extensions::ExtensionWebUIOverrideRegistrar::GetFactoryInstance()->Get(
        browser()->profile());
    ToolbarActionsModelFactory::GetInstance()->SetTestingFactory(
        browser()->profile(), base::BindRepeating(&BuildToolbarModel));
  }

  void TearDown() override {
    browser_.reset();
    browser_window_.reset();
    ExtensionServiceTestWithInstall::TearDown();
  }

  std::unique_ptr<TestBrowserWindow> browser_window_;
  std::unique_ptr<Browser> browser_;

  DISALLOW_COPY_AND_ASSIGN(ExtensionMessageBubbleBridgeUnitTest);
};

TEST_F(ExtensionMessageBubbleBridgeUnitTest,
       TestGetExtraViewInfoMethodWithNormalSettingsOverrideExtension) {
  base::FilePath path(data_dir().AppendASCII("api_test/override/newtab/"));
  EXPECT_NE(nullptr, PackAndInstallCRX(path, INSTALL_NEW));

  std::unique_ptr<extensions::ExtensionMessageBubbleController>
      ntp_bubble_controller(new extensions::ExtensionMessageBubbleController(
          new extensions::NtpOverriddenBubbleDelegate(browser()->profile()),
          browser()));

  ASSERT_EQ(1U, ntp_bubble_controller->GetExtensionList().size());

  std::unique_ptr<ToolbarActionsBarBubbleDelegate> bridge(
      new ExtensionMessageBubbleBridge(std::move(ntp_bubble_controller)));

  std::unique_ptr<ToolbarActionsBarBubbleDelegate::ExtraViewInfo>
      extra_view_info = bridge->GetExtraViewInfo();

  EXPECT_FALSE(extra_view_info->resource);
  EXPECT_EQ(l10n_util::GetStringUTF16(IDS_LEARN_MORE), extra_view_info->text);
  EXPECT_TRUE(extra_view_info->is_learn_more);

  EXPECT_EQ(
      l10n_util::GetStringUTF16(IDS_EXTENSION_CONTROLLED_RESTORE_SETTINGS),
      bridge->GetActionButtonText());
}

TEST_F(ExtensionMessageBubbleBridgeUnitTest,
       TestGetExtraViewInfoMethodWithPolicyInstalledSettingsOverrideExtension) {
  base::FilePath path(data_dir().AppendASCII("api_test/override/newtab/"));
  EXPECT_NE(nullptr,
            PackAndInstallCRX(path, extensions::Manifest::EXTERNAL_POLICY,
                              INSTALL_NEW));

  std::unique_ptr<extensions::ExtensionMessageBubbleController>
      ntp_bubble_controller(new extensions::ExtensionMessageBubbleController(
          new extensions::NtpOverriddenBubbleDelegate(browser()->profile()),
          browser()));

  ASSERT_EQ(1U, ntp_bubble_controller->GetExtensionList().size());

  std::unique_ptr<ToolbarActionsBarBubbleDelegate> bridge(
      new ExtensionMessageBubbleBridge(std::move(ntp_bubble_controller)));

  std::unique_ptr<ToolbarActionsBarBubbleDelegate::ExtraViewInfo>
      extra_view_info = bridge->GetExtraViewInfo();

  extra_view_info = bridge->GetExtraViewInfo();

  EXPECT_EQ(&vector_icons::kBusinessIcon, extra_view_info->resource);
  EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSIONS_INSTALLED_BY_ADMIN),
            extra_view_info->text);
  EXPECT_FALSE(extra_view_info->is_learn_more);

  EXPECT_EQ(base::string16(), bridge->GetActionButtonText());
}

// Tests the ExtensionMessageBubbleBridge in conjunction with the
// SuspiciousExtensionBubbleDelegate.
TEST_F(ExtensionMessageBubbleBridgeUnitTest, SuspiciousExtensionBubble) {
  // Load up a simple extension.
  extensions::DictionaryBuilder manifest;
  manifest.Set("name", "foo")
          .Set("description", "some extension")
          .Set("version", "0.1")
          .Set("manifest_version", 2);
  scoped_refptr<const extensions::Extension> extension =
      extensions::ExtensionBuilder().SetID(crx_file::id_util::GenerateId("foo"))
                                    .SetManifest(manifest.Build())
                                    .Build();
  ASSERT_TRUE(extension);
  service()->AddExtension(extension.get());
  const std::string id = extension->id();
  ASSERT_TRUE(registry()->enabled_extensions().GetByID(id));

  // Disable the extension for being from outside the webstore.
  service()->DisableExtension(extension->id(),
                              extensions::disable_reason::DISABLE_NOT_VERIFIED);
  EXPECT_TRUE(registry()->disabled_extensions().GetByID(id));

  // Create a new message bubble; it should want to display for the disabled
  // extension. (Note: The bubble logic itself is tested more thoroughly in
  // extension_message_bubble_controller_unittest.cc.)
  auto suspicious_bubble_controller =
      std::make_unique<extensions::ExtensionMessageBubbleController>(
          new extensions::SuspiciousExtensionBubbleDelegate(profile()),
          browser());
  EXPECT_TRUE(suspicious_bubble_controller->ShouldShow());
  ASSERT_EQ(1u, suspicious_bubble_controller->GetExtensionIdList().size());
  EXPECT_EQ(id, suspicious_bubble_controller->GetExtensionIdList()[0]);

  // Create a new bridge and poke at a few of the methods to verify they are
  // correct and that nothing crashes.
  std::unique_ptr<ToolbarActionsBarBubbleDelegate> bridge =
      std::make_unique<ExtensionMessageBubbleBridge>(
          std::move(suspicious_bubble_controller));
  EXPECT_TRUE(bridge->ShouldShow());
  EXPECT_FALSE(bridge->ShouldCloseOnDeactivate());

  std::unique_ptr<ToolbarActionsBarBubbleDelegate::ExtraViewInfo>
      extra_view_info = bridge->GetExtraViewInfo();

  ASSERT_TRUE(extra_view_info);
  EXPECT_FALSE(extra_view_info->text.empty());
  EXPECT_TRUE(extra_view_info->is_learn_more);
  EXPECT_FALSE(extra_view_info->resource);
}
