Remove web test code from ShellContentBrowserClient

There is a web test override class already, named
WebTestContentBrowserClient. Any test-only code should live in that
class.

[email protected]

Bug: 866140
Change-Id: Ib14d8cd15a577fe5244eb83b3a9dabfb8ef1f139
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2119376
Auto-Submit: danakj <[email protected]>
Commit-Queue: Avi Drissman <[email protected]>
Reviewed-by: Avi Drissman <[email protected]>
Cr-Commit-Position: refs/heads/master@{#753636}
diff --git a/content/shell/browser/shell_content_browser_client.cc b/content/shell/browser/shell_content_browser_client.cc
index d4235d0e..fe62004 100644
--- a/content/shell/browser/shell_content_browser_client.cc
+++ b/content/shell/browser/shell_content_browser_client.cc
@@ -29,11 +29,9 @@
 #include "content/public/browser/storage_partition.h"
 #include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
-#include "content/public/common/service_names.mojom.h"
 #include "content/public/common/url_constants.h"
 #include "content/public/common/user_agent.h"
 #include "content/public/common/web_preferences.h"
-#include "content/public/test/test_service.h"
 #include "content/shell/browser/shell.h"
 #include "content/shell/browser/shell_browser_context.h"
 #include "content/shell/browser/shell_browser_main_parts.h"
@@ -41,18 +39,11 @@
 #include "content/shell/browser/shell_quota_permission_context.h"
 #include "content/shell/browser/shell_web_contents_view_delegate_creator.h"
 #include "content/shell/common/shell_switches.h"
-#include "content/shell/common/web_test/fake_bluetooth_chooser.mojom.h"
-#include "content/shell/common/web_test/web_test_bluetooth_fake_adapter_setter.mojom.h"
-#include "content/shell/common/web_test/web_test_switches.h"
-#include "content/test/data/mojo_web_test_helper_test.mojom.h"
-#include "device/bluetooth/public/mojom/test/fake_bluetooth.mojom.h"
 #include "media/mojo/buildflags.h"
 #include "media/mojo/mojom/media_service.mojom.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "net/ssl/client_cert_identity.h"
 #include "services/network/public/mojom/network_service.mojom.h"
-#include "services/service_manager/public/cpp/manifest.h"
-#include "services/service_manager/public/cpp/manifest_builder.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/user_agent/user_agent_metadata.h"
 #include "ui/base/ui_base_features.h"
@@ -107,20 +98,6 @@
 }
 #endif
 
-const service_manager::Manifest& GetContentBrowserOverlayManifest() {
-  static base::NoDestructor<service_manager::Manifest> manifest{
-      service_manager::ManifestBuilder()
-          .ExposeCapability(
-              "renderer",
-              service_manager::Manifest::InterfaceList<
-                  mojom::MojoWebTestHelper, mojom::FakeBluetoothChooser,
-                  mojom::FakeBluetoothChooserFactory,
-                  mojom::WebTestBluetoothFakeAdapterSetter,
-                  bluetooth::mojom::FakeBluetooth>())
-          .Build()};
-  return *manifest;
-}
-
 }  // namespace
 
 std::string GetShellUserAgent() {
@@ -200,14 +177,6 @@
   return false;
 }
 
-base::Optional<service_manager::Manifest>
-ShellContentBrowserClient::GetServiceManifestOverlay(base::StringPiece name) {
-  if (name == content::mojom::kBrowserServiceName)
-    return GetContentBrowserOverlayManifest();
-
-  return base::nullopt;
-}
-
 void ShellContentBrowserClient::AppendExtraCommandLineSwitches(
     base::CommandLine* command_line,
     int child_process_id) {
@@ -419,27 +388,9 @@
     BrowserContext* context,
     bool in_memory,
     const base::FilePath& relative_partition_path) {
-  mojo::Remote<network::mojom::NetworkContext> network_context;
   network::mojom::NetworkContextParamsPtr context_params =
-      network::mojom::NetworkContextParams::New();
-  UpdateCorsExemptHeader(context_params.get());
-  context_params->user_agent = GetUserAgent();
-  context_params->accept_language = GetAcceptLangs(context);
-
-#if BUILDFLAG(ENABLE_REPORTING)
-  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kRunWebTests)) {
-    // Configure the Reporting service in a manner expected by certain Web
-    // Platform Tests (network-error-logging and reporting-api).
-    //
-    //   (1) Always send reports (irrespective of BACKGROUND_SYNC permission)
-    //   (2) Lower the timeout for sending reports.
-    context_params->reporting_delivery_interval =
-        kReportingDeliveryIntervalTimeForWebTests;
-    context_params->skip_reporting_send_permission_check = true;
-  }
-#endif
-
+      CreateNetworkContextParams(context);
+  mojo::Remote<network::mojom::NetworkContext> network_context;
   GetNetworkService()->CreateNetworkContext(
       network_context.BindNewPipeAndPassReceiver(), std::move(context_params));
   return network_context;
@@ -459,4 +410,14 @@
   return shell_browser_main_parts_->off_the_record_browser_context();
 }
 
+network::mojom::NetworkContextParamsPtr
+ShellContentBrowserClient::CreateNetworkContextParams(BrowserContext* context) {
+  network::mojom::NetworkContextParamsPtr context_params =
+      network::mojom::NetworkContextParams::New();
+  UpdateCorsExemptHeader(context_params.get());
+  context_params->user_agent = GetUserAgent();
+  context_params->accept_language = GetAcceptLangs(context);
+  return context_params;
+}
+
 }  // namespace content
diff --git a/content/shell/browser/shell_content_browser_client.h b/content/shell/browser/shell_content_browser_client.h
index 9acb46b..04f77b29 100644
--- a/content/shell/browser/shell_content_browser_client.h
+++ b/content/shell/browser/shell_content_browser_client.h
@@ -39,8 +39,6 @@
   bool IsHandledURL(const GURL& url) override;
   bool ShouldTerminateOnServiceQuit(
       const service_manager::Identity& id) override;
-  base::Optional<service_manager::Manifest> GetServiceManifestOverlay(
-      base::StringPiece name) override;
   void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
                                       int child_process_id) override;
   std::string GetAcceptLangs(BrowserContext* context) override;
@@ -135,10 +133,16 @@
   }
 
  protected:
+  // Call this if CreateBrowserMainParts() is overridden in a subclass.
   void set_browser_main_parts(ShellBrowserMainParts* parts) {
     shell_browser_main_parts_ = parts;
   }
 
+  // Used by CreateNetworkContext(), and can be overridden to change the
+  // parameters used there.
+  virtual network::mojom::NetworkContextParamsPtr CreateNetworkContextParams(
+      BrowserContext* context);
+
  private:
   base::OnceClosure select_client_certificate_callback_;
   base::OnceCallback<bool(const service_manager::Identity&)>
diff --git a/content/shell/browser/web_test/web_test_content_browser_client.cc b/content/shell/browser/web_test/web_test_content_browser_client.cc
index 21d8a74..fdf5409 100644
--- a/content/shell/browser/web_test/web_test_content_browser_client.cc
+++ b/content/shell/browser/web_test/web_test_content_browser_client.cc
@@ -25,6 +25,7 @@
 #include "content/public/browser/site_isolation_policy.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/common/content_switches.h"
+#include "content/public/common/service_names.mojom.h"
 #include "content/shell/browser/shell_browser_context.h"
 #include "content/shell/browser/web_test/blink_test_controller.h"
 #include "content/shell/browser/web_test/fake_bluetooth_chooser.h"
@@ -39,14 +40,20 @@
 #include "content/shell/browser/web_test/web_test_tts_controller_delegate.h"
 #include "content/shell/browser/web_test/web_test_tts_platform.h"
 #include "content/shell/common/blink_test.mojom.h"
+#include "content/shell/common/web_test/web_test_bluetooth_fake_adapter_setter.mojom.h"
 #include "content/shell/common/web_test/web_test_switches.h"
 #include "content/shell/renderer/web_test/blink_test_helpers.h"
+#include "content/test/data/mojo_web_test_helper_test.mojom.h"
 #include "content/test/mock_clipboard_host.h"
 #include "content/test/mock_platform_notification_service.h"
+#include "device/bluetooth/public/mojom/test/fake_bluetooth.mojom.h"
 #include "device/bluetooth/test/fake_bluetooth.h"
 #include "gpu/config/gpu_switches.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "services/network/public/mojom/network_service.mojom.h"
 #include "services/service_manager/public/cpp/binder_map.h"
+#include "services/service_manager/public/cpp/manifest.h"
+#include "services/service_manager/public/cpp/manifest_builder.h"
 #include "storage/browser/quota/quota_settings.h"
 #include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h"
 #include "url/origin.h"
@@ -62,15 +69,31 @@
   MojoWebTestHelper::Create(std::move(receiver));
 }
 
-class TestOverlayWindow : public OverlayWindow {
- public:
-  TestOverlayWindow() = default;
-  ~TestOverlayWindow() override {}
+const service_manager::Manifest& GetWebTestContentBrowserOverlayManifest() {
+  static base::NoDestructor<service_manager::Manifest> manifest{
+      service_manager::ManifestBuilder()
+          .ExposeCapability(
+              "renderer",
+              service_manager::Manifest::InterfaceList<
+                  mojom::MojoWebTestHelper, mojom::FakeBluetoothChooser,
+                  mojom::FakeBluetoothChooserFactory,
+                  mojom::WebTestBluetoothFakeAdapterSetter,
+                  bluetooth::mojom::FakeBluetooth>())
+          .Build()};
+  return *manifest;
+}
 
-  static std::unique_ptr<OverlayWindow> Create(
-      PictureInPictureWindowController* controller) {
-    return std::unique_ptr<OverlayWindow>(new TestOverlayWindow());
-  }
+// An OverlayWindow that returns the last given video natural size as the
+// window's bounds.
+class BoundsMatchVideoSizeOverlayWindow : public OverlayWindow {
+ public:
+  BoundsMatchVideoSizeOverlayWindow() = default;
+  ~BoundsMatchVideoSizeOverlayWindow() override = default;
+
+  BoundsMatchVideoSizeOverlayWindow(const BoundsMatchVideoSizeOverlayWindow&) =
+      delete;
+  BoundsMatchVideoSizeOverlayWindow& operator=(
+      const BoundsMatchVideoSizeOverlayWindow&) = delete;
 
   bool IsActive() override { return false; }
   void Close() override {}
@@ -92,8 +115,6 @@
 
  private:
   gfx::Size size_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestOverlayWindow);
 };
 
 }  // namespace
@@ -193,6 +214,14 @@
       partition->GetNetworkContext()));
 }
 
+base::Optional<service_manager::Manifest>
+WebTestContentBrowserClient::GetServiceManifestOverlay(base::StringPiece name) {
+  if (name == content::mojom::kBrowserServiceName)
+    return GetWebTestContentBrowserOverlayManifest();
+
+  return base::nullopt;
+}
+
 void WebTestContentBrowserClient::BindClientHintsControllerDelegate(
     mojo::PendingReceiver<client_hints::mojom::ClientHints> receiver) {
   ClientHintsControllerDelegate* delegate =
@@ -255,7 +284,7 @@
 std::unique_ptr<OverlayWindow>
 WebTestContentBrowserClient::CreateWindowForPictureInPicture(
     PictureInPictureWindowController* controller) {
-  return TestOverlayWindow::Create(controller);
+  return std::make_unique<BoundsMatchVideoSizeOverlayWindow>();
 }
 
 std::vector<url::Origin>
@@ -397,7 +426,26 @@
   return nullptr;
 }
 
-// private
+network::mojom::NetworkContextParamsPtr
+WebTestContentBrowserClient::CreateNetworkContextParams(
+    BrowserContext* context) {
+  network::mojom::NetworkContextParamsPtr context_params =
+      ShellContentBrowserClient::CreateNetworkContextParams(context);
+
+#if BUILDFLAG(ENABLE_REPORTING)
+  // Configure the Reporting service in a manner expected by certain Web
+  // Platform Tests (network-error-logging and reporting-api).
+  //
+  //   (1) Always send reports (irrespective of BACKGROUND_SYNC permission)
+  //   (2) Lower the timeout for sending reports.
+  context_params->reporting_delivery_interval =
+      kReportingDeliveryIntervalTimeForWebTests;
+  context_params->skip_reporting_send_permission_check = true;
+#endif
+
+  return context_params;
+}
+
 void WebTestContentBrowserClient::CreateFakeBluetoothChooserFactory(
     mojo::PendingReceiver<mojom::FakeBluetoothChooserFactory> receiver) {
   DCHECK(!fake_bluetooth_chooser_factory_);
diff --git a/content/shell/browser/web_test/web_test_content_browser_client.h b/content/shell/browser/web_test/web_test_content_browser_client.h
index 1f2c92d..4b3d15b3 100644
--- a/content/shell/browser/web_test/web_test_content_browser_client.h
+++ b/content/shell/browser/web_test/web_test_content_browser_client.h
@@ -64,6 +64,8 @@
       service_manager::BinderRegistry* registry,
       blink::AssociatedInterfaceRegistry* associated_registry,
       RenderProcessHost* render_process_host) override;
+  base::Optional<service_manager::Manifest> GetServiceManifestOverlay(
+      base::StringPiece name) override;
   void OverrideWebkitPrefs(RenderViewHost* render_view_host,
                            WebPreferences* prefs) override;
   void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
@@ -110,6 +112,10 @@
       LoginAuthRequiredCallback auth_required_callback) override;
 
  private:
+  // ShellContentBrowserClient overrides.
+  network::mojom::NetworkContextParamsPtr CreateNetworkContextParams(
+      BrowserContext* context) override;
+
   // Creates and stores a FakeBluetoothChooserFactory instance.
   void CreateFakeBluetoothChooserFactory(
       mojo::PendingReceiver<mojom::FakeBluetoothChooserFactory> receiver);