diff --git a/chrome/browser/webshare/chromeos/sharesheet_client.cc b/chrome/browser/webshare/chromeos/sharesheet_client.cc
index ae646b9a61a43..dc41bc483368b 100644
--- a/chrome/browser/webshare/chromeos/sharesheet_client.cc
+++ b/chrome/browser/webshare/chromeos/sharesheet_client.cc
@@ -91,12 +91,6 @@ void SharesheetClient::Share(
     return;
   }
 
-  if (files.empty()) {
-    // TODO(crbug.com/1127670): Support title/text/url sharing without files.
-    std::move(callback).Run(blink::mojom::ShareError::CANCELED);
-    return;
-  }
-
   Profile* const profile =
       Profile::FromBrowserContext(web_contents()->GetBrowserContext());
   DCHECK(profile);
@@ -117,6 +111,16 @@ void SharesheetClient::Share(
   current_share_->title = title;
   current_share_->callback = std::move(callback);
 
+  if (current_share_->files.empty()) {
+    GetSharesheetCallback().Run(
+        web_contents(), current_share_->file_paths,
+        current_share_->content_types, current_share_->text,
+        current_share_->title,
+        base::BindOnce(&SharesheetClient::OnShowSharesheet,
+                       weak_ptr_factory_.GetWeakPtr()));
+    return;
+  }
+
   current_share_->prepare_directory_task =
       std::make_unique<PrepareDirectoryTask>(
           current_share_->directory, kMaxSharedFileBytes,
@@ -167,9 +171,8 @@ void SharesheetClient::OnStoreFiles(blink::mojom::ShareError error) {
   }
 
   GetSharesheetCallback().Run(
-      web_contents(), std::move(current_share_->file_paths),
-      std::move(current_share_->content_types), current_share_->text,
-      current_share_->title,
+      web_contents(), current_share_->file_paths, current_share_->content_types,
+      current_share_->text, current_share_->title,
       base::BindOnce(&SharesheetClient::OnShowSharesheet,
                      weak_ptr_factory_.GetWeakPtr()));
 }
diff --git a/chrome/browser/webshare/chromeos/sharesheet_client_browsertest.cc b/chrome/browser/webshare/chromeos/sharesheet_client_browsertest.cc
index 2a073637df432..a566235e624df 100644
--- a/chrome/browser/webshare/chromeos/sharesheet_client_browsertest.cc
+++ b/chrome/browser/webshare/chromeos/sharesheet_client_browsertest.cc
@@ -59,12 +59,14 @@ class SharesheetClientBrowserTest : public InProcessBrowserTest {
     return embedded_test_server()->GetURL("/webshare/index.html");
   }
 
-  void ConfirmShareText(const std::string& script,
-                        const char* expected_text,
-                        const char* expected_title) {
+  void ConfirmShareText(
+      const std::string& script,
+      const char* expected_text,
+      const char* expected_title,
+      const std::vector<std::string>& expected_content_types) {
     SharesheetClient::SetSharesheetCallbackForTesting(
         base::BindLambdaForTesting(
-            [&expected_text, &expected_title](
+            [&expected_text, &expected_title, &expected_content_types](
                 content::WebContents* in_contents,
                 const std::vector<base::FilePath>& file_paths,
                 const std::vector<std::string>& content_types,
@@ -72,14 +74,15 @@ class SharesheetClientBrowserTest : public InProcessBrowserTest {
                 SharesheetClient::CloseCallback close_callback) {
               EXPECT_EQ(text, expected_text);
               EXPECT_EQ(title, expected_title);
+              EXPECT_EQ(file_paths.size(), content_types.size());
+              EXPECT_EQ(content_types, expected_content_types);
               std::move(close_callback)
-                  .Run(sharesheet::SharesheetResult::kCancel);
+                  .Run(sharesheet::SharesheetResult::kSuccess);
             }));
 
     content::WebContents* const contents =
         browser()->tab_strip_model()->GetActiveWebContents();
-    EXPECT_EQ("share failed: AbortError: Share canceled",
-              content::EvalJs(contents, script));
+    EXPECT_EQ("share succeeded", content::EvalJs(contents, script));
   }
 
  private:
@@ -179,24 +182,45 @@ IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, CancelledShare) {
             content::EvalJs(contents, script));
 }
 
+IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, Text) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  ui_test_utils::NavigateToURL(browser(), GetAppUrl());
+  ConfirmShareText("share_title()",
+                   /*expected_text=*/"",
+                   /*expected_title=*/"Subject", /*expected_content_types=*/{});
+  ConfirmShareText("share_title_url()",
+                   /*expected_text=*/"https://example.com/",
+                   /*expected_title=*/"Subject", /*expected_content_types=*/{});
+  ConfirmShareText("share_text()",
+                   /*expected_text=*/"Message",
+                   /*expected_title=*/"", /*expected_content_types=*/{});
+  ConfirmShareText("share_text_url()",
+                   /*expected_text=*/"Message https://example.com/",
+                   /*expected_title=*/"", /*expected_content_types=*/{});
+  ConfirmShareText("share_url()",
+                   /*expected_text=*/"https://example.com/",
+                   /*expected_title=*/"", /*expected_content_types=*/{});
+}
+
 IN_PROC_BROWSER_TEST_F(SharesheetClientBrowserTest, TextWithFile) {
   ASSERT_TRUE(embedded_test_server()->Start());
   ui_test_utils::NavigateToURL(browser(), GetAppUrl());
+  const std::vector<std::string> expected_content_types{"image/webp"};
   ConfirmShareText("share_file_title()",
                    /*expected_text=*/"",
-                   /*expected_title=*/"Subject");
+                   /*expected_title=*/"Subject", expected_content_types);
   ConfirmShareText("share_file_title_url()",
                    /*expected_text=*/"https://example.com/",
-                   /*expected_title=*/"Subject");
+                   /*expected_title=*/"Subject", expected_content_types);
   ConfirmShareText("share_file_text()",
                    /*expected_text=*/"Message",
-                   /*expected_title=*/"");
+                   /*expected_title=*/"", expected_content_types);
   ConfirmShareText("share_file_text_url()",
                    /*expected_text=*/"Message https://example.com/",
-                   /*expected_title=*/"");
+                   /*expected_title=*/"", expected_content_types);
   ConfirmShareText("share_file_url()",
                    /*expected_text=*/"https://example.com/",
-                   /*expected_title=*/"");
+                   /*expected_title=*/"", expected_content_types);
 }
 
 }  // namespace webshare
diff --git a/chrome/browser/webshare/share_service_browsertest.cc b/chrome/browser/webshare/share_service_browsertest.cc
index 5d41efa6be36f..0aeffc4bb2f93 100644
--- a/chrome/browser/webshare/share_service_browsertest.cc
+++ b/chrome/browser/webshare/share_service_browsertest.cc
@@ -13,6 +13,10 @@
 #include "content/public/test/browser_test_utils.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/sharesheet/sharesheet_types.h"
+#include "chrome/browser/webshare/chromeos/sharesheet_client.h"
+#endif
 #if defined(OS_WIN)
 #include "chrome/browser/webshare/win/scoped_share_operation_fake_components.h"
 #endif
@@ -23,13 +27,28 @@ class ShareServiceBrowserTest : public InProcessBrowserTest {
     feature_list_.InitAndEnableFeature(features::kWebShare);
   }
 
-#if defined(OS_WIN)
   void SetUpOnMainThread() override {
     InProcessBrowserTest::SetUpOnMainThread();
+#if defined(OS_CHROMEOS)
+    webshare::SharesheetClient::SetSharesheetCallbackForTesting(
+        base::BindRepeating(&ShareServiceBrowserTest::AcceptShareRequest));
+#endif
+#if defined(OS_WIN)
     if (!IsSupportedEnvironment())
       return;
 
     ASSERT_NO_FATAL_FAILURE(scoped_fake_components_.SetUp());
+#endif
+  }
+
+#if defined(OS_CHROMEOS)
+  static void AcceptShareRequest(content::WebContents* web_contents,
+                                 const std::vector<base::FilePath>& file_paths,
+                                 const std::vector<std::string>& content_types,
+                                 const std::string& text,
+                                 const std::string& title,
+                                 sharesheet::CloseCallback close_callback) {
+    std::move(close_callback).Run(sharesheet::SharesheetResult::kSuccess);
   }
 #endif
 
@@ -63,10 +82,5 @@ IN_PROC_BROWSER_TEST_F(ShareServiceBrowserTest, Text) {
   const std::string script = "share_text('hello')";
   const content::EvalJsResult result = content::EvalJs(contents, script);
 
-#if defined(OS_CHROMEOS)
-  // ChromeOS currently only supports file sharing.
-  EXPECT_EQ("share failed: AbortError: Share canceled", result);
-#else
   EXPECT_EQ("share succeeded", result);
-#endif
 }
diff --git a/chrome/test/data/webshare/index.html b/chrome/test/data/webshare/index.html
index 33d82da9a0ba5..5be015a244d3b 100644
--- a/chrome/test/data/webshare/index.html
+++ b/chrome/test/data/webshare/index.html
@@ -41,6 +41,53 @@
       }
     }
 
+    async function share_title() {
+      try {
+        await navigator.share({title: "Subject"});
+        return 'share succeeded';
+      } catch(error) {
+        return ('share failed: ' + error);
+      }
+    }
+
+    async function share_title_url() {
+      try {
+        await navigator.share({title: "Subject",
+                               url: "https://example.com/"});
+        return 'share succeeded';
+      } catch(error) {
+        return ('share failed: ' + error);
+      }
+    }
+
+    async function share_text() {
+      try {
+        await navigator.share({text: "Message"});
+        return 'share succeeded';
+      } catch(error) {
+        return ('share failed: ' + error);
+      }
+    }
+
+    async function share_text_url() {
+      try {
+        await navigator.share({text: "Message",
+                               url: "https://example.com/"});
+        return 'share succeeded';
+      } catch(error) {
+        return ('share failed: ' + error);
+      }
+    }
+
+    async function share_url() {
+      try {
+        await navigator.share({url: "https://example.com/"});
+        return 'share succeeded';
+      } catch(error) {
+        return ('share failed: ' + error);
+      }
+    }
+
     async function share_file_title() {
       try {
         const single_file = create_file('sample.webp', 'image/webp', 12);