[Copy To Clipboard] Add Copy To Clipboard Stub + sharesheet cleanup

- Adds skeleton code for copy to clipboard.
- Moves share_action code into a share_action folder.
- Renames sharesheet_action_cache to share_action_cache.
- Renames sharesheet_service_delegate to sharesheet_service_delegator

Bug:1244143

Change-Id: Ice83865981066e2073189d33c5ec1579e0feb9c2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3220883
Auto-Submit: Melissa Zhang <[email protected]>
Reviewed-by: Josh Nohle <[email protected]>
Reviewed-by: Tim Sergeant <[email protected]>
Commit-Queue: Melissa Zhang <[email protected]>
Cr-Commit-Position: refs/heads/main@{#931765}
diff --git a/chrome/browser/sharesheet/sharesheet_service_delegator.h b/chrome/browser/sharesheet/sharesheet_service_delegator.h
new file mode 100644
index 0000000..8ee8f063
--- /dev/null
+++ b/chrome/browser/sharesheet/sharesheet_service_delegator.h
@@ -0,0 +1,106 @@
+// Copyright 2020 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 CHROME_BROWSER_SHARESHEET_SHARESHEET_SERVICE_DELEGATOR_H_
+#define CHROME_BROWSER_SHARESHEET_SHARESHEET_SERVICE_DELEGATOR_H_
+
+#include <memory>
+#include <string>
+
+#include "base/callback.h"
+#include "build/chromeos_buildflags.h"
+#include "chrome/browser/sharesheet/sharesheet_types.h"
+#include "chrome/browser/sharesheet/sharesheet_ui_delegate.h"
+#include "components/services/app_service/public/mojom/types.mojom.h"
+#include "ui/base/accelerators/accelerator.h"
+#include "ui/gfx/native_widget_types.h"
+
+class Profile;
+
+namespace gfx {
+struct VectorIcon;
+}  // namespace gfx
+
+namespace ui {
+class Accelerator;
+}  // namespace ui
+
+namespace views {
+class View;
+}  // namespace views
+
+namespace sharesheet {
+
+class SharesheetService;
+
+// The SharesheetServiceDelegator is the interface through which the business
+// logic in SharesheetService communicates with the UI.
+class SharesheetServiceDelegator {
+ public:
+  SharesheetServiceDelegator(gfx::NativeWindow native_window,
+                             SharesheetService* sharesheet_service);
+  ~SharesheetServiceDelegator();
+  SharesheetServiceDelegator(const SharesheetServiceDelegator&) = delete;
+  SharesheetServiceDelegator& operator=(const SharesheetServiceDelegator&) =
+      delete;
+
+  gfx::NativeWindow GetNativeWindow();
+  SharesheetController* GetSharesheetController();
+
+  // TODO(crbug.com/1233830) : Remove after business logic is moved
+  // out of SharesheetHeaderView.
+  Profile* GetProfile();
+
+  SharesheetUiDelegate* GetUiDelegateForTesting();
+
+  // ==========================================================================
+  // ======================== SHARESHEET SERVICE TO UI ========================
+  // ==========================================================================
+
+  // The following are called by the ShareService to communicate with the UI.
+  void ShowBubble(std::vector<TargetInfo> targets,
+                  apps::mojom::IntentPtr intent,
+                  DeliveredCallback delivered_callback,
+                  CloseCallback close_callback);
+
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  // Skips the generic Sharesheet bubble and directly displays the
+  // NearbyShare bubble dialog.
+  void ShowNearbyShareBubbleForArc(apps::mojom::IntentPtr intent,
+                                   DeliveredCallback delivered_callback,
+                                   CloseCallback close_callback);
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
+  // Invoked immediately after an action has launched in the event that UI
+  // changes need to occur at this point.
+  void OnActionLaunched();
+
+  void CloseBubble(SharesheetResult result);
+
+  // ==========================================================================
+  // ======================== UI TO SHARESHEET SERVICE ========================
+  // ==========================================================================
+  // The following are called by the UI to communicate with the ShareService.
+  void OnBubbleClosed(const std::u16string& active_action);
+  void OnTargetSelected(const std::u16string& target_name,
+                        const TargetType type,
+                        apps::mojom::IntentPtr intent,
+                        views::View* share_action_view);
+  bool OnAcceleratorPressed(const ui::Accelerator& accelerator,
+                            const std::u16string& active_action);
+  const gfx::VectorIcon* GetVectorIcon(const std::u16string& display_name);
+
+ private:
+  // Only used for ID purposes. NativeWindow will always outlive the
+  // SharesheetServiceDelegator.
+  gfx::NativeWindow native_window_;
+
+  SharesheetService* sharesheet_service_;
+
+  std::unique_ptr<SharesheetUiDelegate> sharesheet_controller_;
+};
+
+}  // namespace sharesheet
+
+#endif  // CHROME_BROWSER_SHARESHEET_SHARESHEET_SERVICE_DELEGATOR_H_