Commit 96865f0c authored by Darren Shen's avatar Darren Shen Committed by Commit Bot

Revert "[WebLayer] Allow associating embedder specific data with tabs"

This reverts commit 18029c02.

Reason for revert: Tests added in this CL seems to cause ASAN failures: https://ci.chromium.org/p/chromium/builders/ci/win-asan

Original change's description:
> [WebLayer] Allow associating embedder specific data with tabs
> 
> This adds a Tab.setData() and Tab.getData() API which allows setting
> arbitrary embedder specific data on a tab. This data will be
> saved/restored along with other browser data.
> 
> Bug: 1079313
> Change-Id: Iccc0f17e647c4252768e2b1e69e2c87d9f695de1
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2204540
> Reviewed-by: Scott Violet <sky@chromium.org>
> Commit-Queue: Clark DuVall <cduvall@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#770274}

TBR=sky@chromium.org,cduvall@chromium.org

Change-Id: Ief37a21c8e5140c585fa2ecba45db05cd256acdc
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 1079313
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2208773Reviewed-by: default avatarDarren Shen <shend@chromium.org>
Commit-Queue: Darren Shen <shend@chromium.org>
Cr-Commit-Position: refs/heads/master@{#770398}
parent 41e023a4
...@@ -68,7 +68,6 @@ static const SessionCommand::id_type kCommandSetTabGroupMetadata = 26; ...@@ -68,7 +68,6 @@ static const SessionCommand::id_type kCommandSetTabGroupMetadata = 26;
static const SessionCommand::id_type kCommandSetTabGroupMetadata2 = 27; static const SessionCommand::id_type kCommandSetTabGroupMetadata2 = 27;
static const SessionCommand::id_type kCommandSetTabGuid = 28; static const SessionCommand::id_type kCommandSetTabGuid = 28;
static const SessionCommand::id_type kCommandSetTabUserAgentOverride2 = 29; static const SessionCommand::id_type kCommandSetTabUserAgentOverride2 = 29;
static const SessionCommand::id_type kCommandSetTabData = 30;
namespace { namespace {
...@@ -808,31 +807,6 @@ bool CreateTabsAndWindows( ...@@ -808,31 +807,6 @@ bool CreateTabsAndWindows(
break; break;
} }
case kCommandSetTabData: {
std::unique_ptr<base::Pickle> pickle(command->PayloadAsPickle());
base::PickleIterator it(*pickle);
SessionID::id_type tab_id = -1;
int size = 0;
if (!it.ReadInt(&tab_id) || !it.ReadInt(&size)) {
DVLOG(1) << "Failed reading command " << command->id();
return true;
}
std::map<std::string, std::string> data;
for (int i = 0; i < size; i++) {
std::string key;
std::string value;
if (!it.ReadString(&key) || !it.ReadString(&value)) {
DVLOG(1) << "Failed reading command " << command->id();
return true;
}
data.insert({key, value});
}
GetTab(SessionID::FromSerializedValue(tab_id), tabs)->data =
std::move(data);
break;
}
default: default:
DVLOG(1) << "Failed reading an unknown command " << command->id(); DVLOG(1) << "Failed reading an unknown command " << command->id();
return true; return true;
...@@ -1048,19 +1022,6 @@ std::unique_ptr<SessionCommand> CreateSetTabGuidCommand( ...@@ -1048,19 +1022,6 @@ std::unique_ptr<SessionCommand> CreateSetTabGuidCommand(
return std::make_unique<SessionCommand>(kCommandSetTabGuid, pickle); return std::make_unique<SessionCommand>(kCommandSetTabGuid, pickle);
} }
std::unique_ptr<SessionCommand> CreateSetTabDataCommand(
const SessionID& tab_id,
const std::map<std::string, std::string>& data) {
base::Pickle pickle;
pickle.WriteInt(tab_id.id());
pickle.WriteInt(data.size());
for (const auto& kv : data) {
pickle.WriteString(kv.first);
pickle.WriteString(kv.second);
}
return std::make_unique<SessionCommand>(kCommandSetTabData, pickle);
}
bool ReplacePendingCommand(CommandStorageManager* command_storage_manager, bool ReplacePendingCommand(CommandStorageManager* command_storage_manager,
std::unique_ptr<SessionCommand>* command) { std::unique_ptr<SessionCommand>* command) {
// We optimize page navigations, which can happen quite frequently and // We optimize page navigations, which can happen quite frequently and
......
...@@ -93,10 +93,6 @@ SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateSetTabGuidCommand( ...@@ -93,10 +93,6 @@ SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateSetTabGuidCommand(
const SessionID& tab_id, const SessionID& tab_id,
const std::string& guid); const std::string& guid);
SESSIONS_EXPORT std::unique_ptr<SessionCommand> CreateSetTabDataCommand(
const SessionID& tab_id,
const std::map<std::string, std::string>& data);
// Searches for a pending command using |command_storage_manager| that can be // Searches for a pending command using |command_storage_manager| that can be
// replaced with |command|. If one is found, pending command is removed, the // replaced with |command|. If one is found, pending command is removed, the
// command is added to the pending commands (taken ownership) and true is // command is added to the pending commands (taken ownership) and true is
......
...@@ -101,9 +101,6 @@ struct SESSIONS_EXPORT SessionTab { ...@@ -101,9 +101,6 @@ struct SESSIONS_EXPORT SessionTab {
// guid associated with the tab, may be empty. // guid associated with the tab, may be empty.
std::string guid; std::string guid;
// Data associated with the tab by the embedder.
std::map<std::string, std::string> data;
private: private:
DISALLOW_COPY_AND_ASSIGN(SessionTab); DISALLOW_COPY_AND_ASSIGN(SessionTab);
}; };
......
...@@ -23,9 +23,6 @@ import org.chromium.weblayer.NavigationController; ...@@ -23,9 +23,6 @@ import org.chromium.weblayer.NavigationController;
import org.chromium.weblayer.Tab; import org.chromium.weblayer.Tab;
import org.chromium.weblayer.shell.InstrumentationActivity; import org.chromium.weblayer.shell.InstrumentationActivity;
import java.util.HashMap;
import java.util.Map;
/** /**
* Tests that fragment lifecycle works as expected. * Tests that fragment lifecycle works as expected.
*/ */
...@@ -182,44 +179,4 @@ public class BrowserFragmentLifecycleTest { ...@@ -182,44 +179,4 @@ public class BrowserFragmentLifecycleTest {
() -> { return restoredTab.getGuid(); }); () -> { return restoredTab.getGuid(); });
Assert.assertEquals(initialTabId, restoredTabId); Assert.assertEquals(initialTabId, restoredTabId);
} }
@Test
@SmallTest
@MinWebLayerVersion(85)
public void restoresTabData() throws Throwable {
Bundle extras = new Bundle();
extras.putString(InstrumentationActivity.EXTRA_PERSISTENCE_ID, "x");
Map<String, String> initialData = new HashMap<>();
initialData.put("foo", "bar");
restoresTabData(extras, initialData);
}
@Test
@SmallTest
@MinWebLayerVersion(85)
public void restoreTabDataAfterRecreate() throws Throwable {
Map<String, String> initialData = new HashMap<>();
initialData.put("foo", "bar");
restoresTabData(new Bundle(), initialData);
}
private void restoresTabData(Bundle extras, Map<String, String> initialData) {
String url = mActivityTestRule.getTestDataURL("simple_page.html");
mActivityTestRule.launchShellWithUrl(url, extras);
TestThreadUtils.runOnUiThreadBlocking(() -> {
Tab tab = mActivityTestRule.getActivity().getTab();
Assert.assertTrue(tab.getData().isEmpty());
tab.setData(initialData);
});
mActivityTestRule.recreateActivity();
Tab tab = getTab();
Assert.assertNotNull(tab);
waitForTabToFinishRestore(tab, url);
TestThreadUtils.runOnUiThreadBlocking(
() -> Assert.assertEquals(initialData, tab.getData()));
}
} }
...@@ -18,8 +18,6 @@ import org.chromium.content_public.browser.test.util.TestThreadUtils; ...@@ -18,8 +18,6 @@ import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.weblayer.Tab; import org.chromium.weblayer.Tab;
import org.chromium.weblayer.shell.InstrumentationActivity; import org.chromium.weblayer.shell.InstrumentationActivity;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
/** /**
...@@ -173,43 +171,4 @@ public class TabTest { ...@@ -173,43 +171,4 @@ public class TabTest {
}); });
callbackHelper.waitForFirst(); callbackHelper.waitForFirst();
} }
@Test
@SmallTest
@MinWebLayerVersion(85)
public void testSetData() {
String startupUrl = "about:blank";
mActivity = mActivityTestRule.launchShellWithUrl(startupUrl);
Map<String, String> data = new HashMap<>();
data.put("foo", "bar");
TestThreadUtils.runOnUiThreadBlocking(() -> {
Tab tab = mActivity.getTab();
tab.setData(data);
Assert.assertEquals(data.get("foo"), tab.getData().get("foo"));
tab.setData(new HashMap<>());
Assert.assertTrue(tab.getData().isEmpty());
});
}
@Test
@SmallTest
@MinWebLayerVersion(85)
public void testSetDataMaxSize() {
String startupUrl = "about:blank";
mActivity = mActivityTestRule.launchShellWithUrl(startupUrl);
Map<String, String> data = new HashMap<>();
data.put("big", new String(new char[10000]));
TestThreadUtils.runOnUiThreadBlocking(() -> {
try {
mActivity.getTab().setData(data);
} catch (IllegalArgumentException e) {
// Expected exception.
return;
}
Assert.fail("Expected IllegalArgumentException.");
});
}
} }
...@@ -158,7 +158,8 @@ ScopedJavaLocalRef<jbyteArray> BrowserImpl::GetBrowserPersisterCryptoKey( ...@@ -158,7 +158,8 @@ ScopedJavaLocalRef<jbyteArray> BrowserImpl::GetBrowserPersisterCryptoKey(
ScopedJavaLocalRef<jbyteArray> BrowserImpl::GetMinimalPersistenceState( ScopedJavaLocalRef<jbyteArray> BrowserImpl::GetMinimalPersistenceState(
JNIEnv* env) { JNIEnv* env) {
return base::android::ToJavaByteArray(env, GetMinimalPersistenceState()); auto state = GetMinimalPersistenceState();
return base::android::ToJavaByteArray(env, &(state.front()), state.size());
} }
void BrowserImpl::RestoreStateIfNecessary( void BrowserImpl::RestoreStateIfNecessary(
......
...@@ -534,27 +534,6 @@ public final class TabImpl extends ITab.Stub { ...@@ -534,27 +534,6 @@ public final class TabImpl extends ITab.Stub {
return TabImplJni.get().getGuid(mNativeTab); return TabImplJni.get().getGuid(mNativeTab);
} }
@Override
public boolean setData(Map data) {
String[] flattenedMap = new String[data.size() * 2];
int i = 0;
for (Map.Entry<String, String> entry : ((Map<String, String>) data).entrySet()) {
flattenedMap[i++] = entry.getKey();
flattenedMap[i++] = entry.getValue();
}
return TabImplJni.get().setData(mNativeTab, flattenedMap);
}
@Override
public Map getData() {
String[] data = TabImplJni.get().getData(mNativeTab);
Map<String, String> map = new HashMap<>();
for (int i = 0; i < data.length; i += 2) {
map.put(data[i], data[i + 1]);
}
return map;
}
@Override @Override
public void captureScreenShot(float scale, IObjectWrapper valueCallback) { public void captureScreenShot(float scale, IObjectWrapper valueCallback) {
StrictModeWorkaround.apply(); StrictModeWorkaround.apply();
...@@ -783,7 +762,5 @@ public final class TabImpl extends ITab.Stub { ...@@ -783,7 +762,5 @@ public final class TabImpl extends ITab.Stub {
String getGuid(long nativeTabImpl); String getGuid(long nativeTabImpl);
void captureScreenShot(long nativeTabImpl, float scale, void captureScreenShot(long nativeTabImpl, float scale,
ValueCallback<Pair<Bitmap, Integer>> valueCallback); ValueCallback<Pair<Bitmap, Integer>> valueCallback);
boolean setData(long nativeTabImpl, String[] data);
String[] getData(long nativeTabImpl);
} }
} }
...@@ -51,10 +51,4 @@ interface ITab { ...@@ -51,10 +51,4 @@ interface ITab {
// Added in 84 // Added in 84
void captureScreenShot(in float scale, in IObjectWrapper resultCallback) = 16; void captureScreenShot(in float scale, in IObjectWrapper resultCallback) = 16;
// Added in 85
boolean setData(in Map data) = 17;
// Added in 85
Map getData() = 18;
} }
...@@ -84,7 +84,6 @@ void ProcessRestoreCommands( ...@@ -84,7 +84,6 @@ void ProcessRestoreCommands(
DCHECK(entries.empty()); DCHECK(entries.empty());
TabImpl* tab = browser->CreateTabForSessionRestore(std::move(web_contents), TabImpl* tab = browser->CreateTabForSessionRestore(std::move(web_contents),
session_tab.guid); session_tab.guid);
tab->SetData(session_tab.data);
if (!had_tabs && i == (windows[0])->selected_tab_index) if (!had_tabs && i == (windows[0])->selected_tab_index)
browser->SetActiveTab(tab); browser->SetActiveTab(tab);
...@@ -143,8 +142,6 @@ BuildCommandsForTabConfiguration(const SessionID& browser_session_id, ...@@ -143,8 +142,6 @@ BuildCommandsForTabConfiguration(const SessionID& browser_session_id,
result.push_back(sessions::CreateSetTabGuidCommand(tab_id, tab->GetGuid())); result.push_back(sessions::CreateSetTabGuidCommand(tab_id, tab->GetGuid()));
result.push_back(sessions::CreateSetTabDataCommand(tab_id, tab->GetData()));
return result; return result;
} }
......
...@@ -105,9 +105,8 @@ void BrowserPersister::OnGeneratedNewCryptoKey( ...@@ -105,9 +105,8 @@ void BrowserPersister::OnGeneratedNewCryptoKey(
} }
void BrowserPersister::OnTabAdded(Tab* tab) { void BrowserPersister::OnTabAdded(Tab* tab) {
auto* tab_impl = static_cast<TabImpl*>(tab); content::WebContents* web_contents =
data_observer_.Add(tab_impl); static_cast<TabImpl*>(tab)->web_contents();
content::WebContents* web_contents = tab_impl->web_contents();
auto* tab_helper = sessions::SessionTabHelper::FromWebContents(web_contents); auto* tab_helper = sessions::SessionTabHelper::FromWebContents(web_contents);
DCHECK(tab_helper); DCHECK(tab_helper);
tab_helper->SetWindowID(browser_session_id_); tab_helper->SetWindowID(browser_session_id_);
...@@ -131,11 +130,10 @@ void BrowserPersister::OnTabAdded(Tab* tab) { ...@@ -131,11 +130,10 @@ void BrowserPersister::OnTabAdded(Tab* tab) {
} }
void BrowserPersister::OnTabRemoved(Tab* tab, bool active_tab_changed) { void BrowserPersister::OnTabRemoved(Tab* tab, bool active_tab_changed) {
auto* tab_impl = static_cast<TabImpl*>(tab);
data_observer_.Remove(tab_impl);
// Allow the associated sessionStorage to get deleted; it won't be needed // Allow the associated sessionStorage to get deleted; it won't be needed
// in the session restore. // in the session restore.
content::WebContents* web_contents = tab_impl->web_contents(); content::WebContents* web_contents =
static_cast<TabImpl*>(tab)->web_contents();
content::SessionStorageNamespace* session_storage_namespace = content::SessionStorageNamespace* session_storage_namespace =
web_contents->GetController().GetDefaultSessionStorageNamespace(); web_contents->GetController().GetDefaultSessionStorageNamespace();
session_storage_namespace->SetShouldPersist(false); session_storage_namespace->SetShouldPersist(false);
...@@ -163,16 +161,6 @@ void BrowserPersister::OnActiveTabChanged(Tab* tab) { ...@@ -163,16 +161,6 @@ void BrowserPersister::OnActiveTabChanged(Tab* tab) {
browser_session_id_, index)); browser_session_id_, index));
} }
void BrowserPersister::OnDataChanged(
TabImpl* tab,
const std::map<std::string, std::string>& data) {
if (rebuild_on_next_save_)
return;
ScheduleCommand(
sessions::CreateSetTabDataCommand(GetSessionIDForTab(tab), data));
}
void BrowserPersister::SetTabUserAgentOverride( void BrowserPersister::SetTabUserAgentOverride(
const SessionID& window_id, const SessionID& window_id,
const SessionID& tab_id, const SessionID& tab_id,
......
...@@ -14,12 +14,10 @@ ...@@ -14,12 +14,10 @@
#include <vector> #include <vector>
#include "base/macros.h" #include "base/macros.h"
#include "base/scoped_observer.h"
#include "base/task/cancelable_task_tracker.h" #include "base/task/cancelable_task_tracker.h"
#include "components/sessions/content/session_tab_helper_delegate.h" #include "components/sessions/content/session_tab_helper_delegate.h"
#include "components/sessions/core/command_storage_manager_delegate.h" #include "components/sessions/core/command_storage_manager_delegate.h"
#include "components/sessions/core/session_service_commands.h" #include "components/sessions/core/session_service_commands.h"
#include "weblayer/browser/tab_impl.h"
#include "weblayer/public/browser_observer.h" #include "weblayer/public/browser_observer.h"
class SessionID; class SessionID;
...@@ -31,6 +29,7 @@ class SessionCommand; ...@@ -31,6 +29,7 @@ class SessionCommand;
namespace weblayer { namespace weblayer {
class BrowserImpl; class BrowserImpl;
class TabImpl;
// BrowserPersister is responsible for maintaining the state of tabs in a // BrowserPersister is responsible for maintaining the state of tabs in a
// single Browser so that they can be restored at a later date. The state is // single Browser so that they can be restored at a later date. The state is
...@@ -41,8 +40,7 @@ class BrowserImpl; ...@@ -41,8 +40,7 @@ class BrowserImpl;
// current state. // current state.
class BrowserPersister : public sessions::CommandStorageManagerDelegate, class BrowserPersister : public sessions::CommandStorageManagerDelegate,
public sessions::SessionTabHelperDelegate, public sessions::SessionTabHelperDelegate,
public BrowserObserver, public BrowserObserver {
public TabImpl::DataObserver {
public: public:
BrowserPersister(const base::FilePath& path, BrowserPersister(const base::FilePath& path,
BrowserImpl* browser, BrowserImpl* browser,
...@@ -74,10 +72,6 @@ class BrowserPersister : public sessions::CommandStorageManagerDelegate, ...@@ -74,10 +72,6 @@ class BrowserPersister : public sessions::CommandStorageManagerDelegate,
void OnTabRemoved(Tab* tab, bool active_tab_changed) override; void OnTabRemoved(Tab* tab, bool active_tab_changed) override;
void OnActiveTabChanged(Tab* tab) override; void OnActiveTabChanged(Tab* tab) override;
// TabImpl::DataObserver:
void OnDataChanged(TabImpl* tab,
const std::map<std::string, std::string>& data) override;
// sessions::SessionTabHelperDelegate: // sessions::SessionTabHelperDelegate:
void SetTabUserAgentOverride(const SessionID& window_id, void SetTabUserAgentOverride(const SessionID& window_id,
const SessionID& tab_id, const SessionID& tab_id,
...@@ -133,12 +127,6 @@ class BrowserPersister : public sessions::CommandStorageManagerDelegate, ...@@ -133,12 +127,6 @@ class BrowserPersister : public sessions::CommandStorageManagerDelegate,
std::vector<uint8_t> crypto_key_; std::vector<uint8_t> crypto_key_;
ScopedObserver<TabImpl,
TabImpl::DataObserver,
&TabImpl::AddDataObserver,
&TabImpl::RemoveDataObserver>
data_observer_{this};
base::CancelableTaskTracker cancelable_task_tracker_; base::CancelableTaskTracker cancelable_task_tracker_;
}; };
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
#include "content/public/test/url_loader_interceptor.h" #include "content/public/test/url_loader_interceptor.h"
#include "net/base/filename_util.h" #include "net/base/filename_util.h"
#include "net/test/embedded_test_server/embedded_test_server.h" #include "net/test/embedded_test_server/embedded_test_server.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "weblayer/browser/browser_impl.h" #include "weblayer/browser/browser_impl.h"
#include "weblayer/browser/profile_impl.h" #include "weblayer/browser/profile_impl.h"
#include "weblayer/browser/tab_impl.h" #include "weblayer/browser/tab_impl.h"
...@@ -41,7 +40,6 @@ class BrowserPersisterTestHelper { ...@@ -41,7 +40,6 @@ class BrowserPersisterTestHelper {
}; };
namespace { namespace {
using testing::UnorderedElementsAre;
class OneShotNavigationObserver : public NavigationObserver { class OneShotNavigationObserver : public NavigationObserver {
public: public:
...@@ -232,63 +230,6 @@ IN_PROC_BROWSER_TEST_F(BrowserPersisterTest, RestoresGuid) { ...@@ -232,63 +230,6 @@ IN_PROC_BROWSER_TEST_F(BrowserPersisterTest, RestoresGuid) {
EXPECT_EQ(original_guid, browser->GetTabs()[0]->GetGuid()); EXPECT_EQ(original_guid, browser->GetTabs()[0]->GetGuid());
} }
IN_PROC_BROWSER_TEST_F(BrowserPersisterTest, RestoresData) {
ASSERT_TRUE(embedded_test_server()->Start());
std::unique_ptr<BrowserImpl> browser = CreateBrowser(GetProfile(), "x");
Tab* tab = browser->AddTab(Tab::Create(GetProfile()));
tab->SetData({{"abc", "efg"}});
const GURL url = embedded_test_server()->GetURL("/simple_page.html");
NavigateAndWaitForCompletion(url, tab);
ShutdownBrowserPersisterAndWait(browser.get());
tab = nullptr;
browser.reset();
browser = CreateBrowser(GetProfile(), "x");
// Should be no tabs while waiting for restore.
EXPECT_TRUE(browser->GetTabs().empty());
// Wait for the restore and navigation to complete.
BrowserNavigationObserverImpl::WaitForNewTabToCompleteNavigation(
browser.get(), url);
ASSERT_EQ(1u, browser->GetTabs().size());
EXPECT_EQ(browser->GetTabs()[0], browser->GetActiveTab());
EXPECT_THAT(browser->GetTabs()[0]->GetData(),
UnorderedElementsAre(std::make_pair("abc", "efg")));
}
IN_PROC_BROWSER_TEST_F(BrowserPersisterTest, RestoresMostRecentData) {
ASSERT_TRUE(embedded_test_server()->Start());
std::unique_ptr<BrowserImpl> browser = CreateBrowser(GetProfile(), "x");
Tab* tab = browser->AddTab(Tab::Create(GetProfile()));
tab->SetData({{"xxx", "xxx"}});
const GURL url = embedded_test_server()->GetURL("/simple_page.html");
NavigateAndWaitForCompletion(url, tab);
// Make sure the data has been saved, then set different data on the tab.
BrowserPersisterTestHelper::GetCommandStorageManager(
browser->browser_persister())
->Save();
tab->SetData({{"abc", "efg"}});
ShutdownBrowserPersisterAndWait(browser.get());
tab = nullptr;
browser.reset();
browser = CreateBrowser(GetProfile(), "x");
// Should be no tabs while waiting for restore.
EXPECT_TRUE(browser->GetTabs().empty());
// Wait for the restore and navigation to complete.
BrowserNavigationObserverImpl::WaitForNewTabToCompleteNavigation(
browser.get(), url);
ASSERT_EQ(1u, browser->GetTabs().size());
EXPECT_EQ(browser->GetTabs()[0], browser->GetActiveTab());
EXPECT_THAT(browser->GetTabs()[0]->GetData(),
UnorderedElementsAre(std::make_pair("abc", "efg")));
}
IN_PROC_BROWSER_TEST_F(BrowserPersisterTest, TwoTabs) { IN_PROC_BROWSER_TEST_F(BrowserPersisterTest, TwoTabs) {
ASSERT_TRUE(embedded_test_server()->Start()); ASSERT_TRUE(embedded_test_server()->Start());
......
...@@ -64,7 +64,6 @@ ...@@ -64,7 +64,6 @@
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
#include "base/android/callback_android.h" #include "base/android/callback_android.h"
#include "base/android/jni_array.h"
#include "base/android/jni_string.h" #include "base/android/jni_string.h"
#include "base/json/json_writer.h" #include "base/json/json_writer.h"
#include "base/trace_event/trace_event.h" #include "base/trace_event/trace_event.h"
...@@ -99,9 +98,6 @@ namespace weblayer { ...@@ -99,9 +98,6 @@ namespace weblayer {
namespace { namespace {
// Maximum size of data when calling SetData().
constexpr int kMaxDataSize = 4096;
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
bool g_system_autofill_disabled_for_testing = false; bool g_system_autofill_disabled_for_testing = false;
...@@ -333,14 +329,6 @@ TabImpl* TabImpl::FromWebContents(content::WebContents* web_contents) { ...@@ -333,14 +329,6 @@ TabImpl* TabImpl::FromWebContents(content::WebContents* web_contents) {
->controller; ->controller;
} }
void TabImpl::AddDataObserver(DataObserver* observer) {
data_observers_.AddObserver(observer);
}
void TabImpl::RemoveDataObserver(DataObserver* observer) {
data_observers_.RemoveObserver(observer);
}
void TabImpl::SetErrorPageDelegate(ErrorPageDelegate* delegate) { void TabImpl::SetErrorPageDelegate(ErrorPageDelegate* delegate) {
error_page_delegate_ = delegate; error_page_delegate_ = delegate;
} }
...@@ -399,14 +387,6 @@ const std::string& TabImpl::GetGuid() { ...@@ -399,14 +387,6 @@ const std::string& TabImpl::GetGuid() {
return guid_; return guid_;
} }
void TabImpl::SetData(const std::map<std::string, std::string>& data) {
DCHECK(SetDataInternal(data));
}
const std::map<std::string, std::string>& TabImpl::GetData() {
return data_;
}
void TabImpl::ExecuteScriptWithUserGestureForTests( void TabImpl::ExecuteScriptWithUserGestureForTests(
const base::string16& script) { const base::string16& script) {
web_contents_->GetMainFrame()->ExecuteJavaScriptWithUserGestureForTests( web_contents_->GetMainFrame()->ExecuteJavaScriptWithUserGestureForTests(
...@@ -616,27 +596,6 @@ void TabImpl::CaptureScreenShot( ...@@ -616,27 +596,6 @@ void TabImpl::CaptureScreenShot(
base::BindOnce(&OnScreenShotCaptured, base::BindOnce(&OnScreenShotCaptured,
ScopedJavaGlobalRef<jobject>(value_callback))); ScopedJavaGlobalRef<jobject>(value_callback)));
} }
jboolean TabImpl::SetData(
JNIEnv* env,
const base::android::JavaParamRef<jobjectArray>& data) {
std::vector<std::string> flattened_map;
base::android::AppendJavaStringArrayToStringVector(env, data, &flattened_map);
std::map<std::string, std::string> data_map;
for (size_t i = 0; i < flattened_map.size(); i += 2) {
data_map.insert({flattened_map[i], flattened_map[i + 1]});
}
return SetDataInternal(data_map);
}
base::android::ScopedJavaLocalRef<jobjectArray> TabImpl::GetData(JNIEnv* env) {
std::vector<std::string> flattened_map;
for (const auto& kv : data_) {
flattened_map.push_back(kv.first);
flattened_map.push_back(kv.second);
}
return base::android::ToJavaArrayOfStrings(env, flattened_map);
}
#endif // OS_ANDROID #endif // OS_ANDROID
content::WebContents* TabImpl::OpenURLFromTab( content::WebContents* TabImpl::OpenURLFromTab(
...@@ -1024,16 +983,4 @@ sessions::SessionTabHelperDelegate* TabImpl::GetSessionServiceTabHelperDelegate( ...@@ -1024,16 +983,4 @@ sessions::SessionTabHelperDelegate* TabImpl::GetSessionServiceTabHelperDelegate(
return browser_ ? browser_->browser_persister() : nullptr; return browser_ ? browser_->browser_persister() : nullptr;
} }
bool TabImpl::SetDataInternal(const std::map<std::string, std::string>& data) {
int total_size = 0;
for (const auto& kv : data)
total_size += kv.first.size() + kv.second.size();
if (total_size > kMaxDataSize)
return false;
data_ = data;
for (auto& observer : data_observers_)
observer.OnDataChanged(this, data_);
return true;
}
} // namespace weblayer } // namespace weblayer
...@@ -81,14 +81,6 @@ class TabImpl : public Tab, ...@@ -81,14 +81,6 @@ class TabImpl : public Tab,
kBitmapAllocationFailed, kBitmapAllocationFailed,
}; };
class DataObserver {
public:
// Called when SetData() is called on |tab|.
virtual void OnDataChanged(
TabImpl* tab,
const std::map<std::string, std::string>& data) = 0;
};
// TODO(sky): investigate a better way to not have so many ifdefs. // TODO(sky): investigate a better way to not have so many ifdefs.
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
TabImpl(ProfileImpl* profile, TabImpl(ProfileImpl* profile,
...@@ -162,17 +154,10 @@ class TabImpl : public Tab, ...@@ -162,17 +154,10 @@ class TabImpl : public Tab,
JNIEnv* env, JNIEnv* env,
jfloat scale, jfloat scale,
const base::android::JavaParamRef<jobject>& value_callback); const base::android::JavaParamRef<jobject>& value_callback);
jboolean SetData(JNIEnv* env,
const base::android::JavaParamRef<jobjectArray>& data);
base::android::ScopedJavaLocalRef<jobjectArray> GetData(JNIEnv* env);
#endif #endif
ErrorPageDelegate* error_page_delegate() { return error_page_delegate_; } ErrorPageDelegate* error_page_delegate() { return error_page_delegate_; }
void AddDataObserver(DataObserver* observer);
void RemoveDataObserver(DataObserver* observer);
// Tab: // Tab:
void SetErrorPageDelegate(ErrorPageDelegate* delegate) override; void SetErrorPageDelegate(ErrorPageDelegate* delegate) override;
void SetFullscreenDelegate(FullscreenDelegate* delegate) override; void SetFullscreenDelegate(FullscreenDelegate* delegate) override;
...@@ -184,8 +169,6 @@ class TabImpl : public Tab, ...@@ -184,8 +169,6 @@ class TabImpl : public Tab,
bool use_separate_isolate, bool use_separate_isolate,
JavaScriptResultCallback callback) override; JavaScriptResultCallback callback) override;
const std::string& GetGuid() override; const std::string& GetGuid() override;
void SetData(const std::map<std::string, std::string>& data) override;
const std::map<std::string, std::string>& GetData() override;
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
void AttachToView(views::WebView* web_view) override; void AttachToView(views::WebView* web_view) override;
#endif #endif
...@@ -308,8 +291,6 @@ class TabImpl : public Tab, ...@@ -308,8 +291,6 @@ class TabImpl : public Tab,
void UpdateBrowserVisibleSecurityStateIfNecessary(); void UpdateBrowserVisibleSecurityStateIfNecessary();
bool SetDataInternal(const std::map<std::string, std::string>& data);
BrowserImpl* browser_ = nullptr; BrowserImpl* browser_ = nullptr;
ErrorPageDelegate* error_page_delegate_ = nullptr; ErrorPageDelegate* error_page_delegate_ = nullptr;
FullscreenDelegate* fullscreen_delegate_ = nullptr; FullscreenDelegate* fullscreen_delegate_ = nullptr;
...@@ -340,9 +321,6 @@ class TabImpl : public Tab, ...@@ -340,9 +321,6 @@ class TabImpl : public Tab,
const std::string guid_; const std::string guid_;
std::map<std::string, std::string> data_;
base::ObserverList<DataObserver>::Unchecked data_observers_;
base::string16 title_; base::string16 title_;
base::WeakPtrFactory<TabImpl> weak_ptr_factory_{this}; base::WeakPtrFactory<TabImpl> weak_ptr_factory_{this};
......
...@@ -344,50 +344,6 @@ public class Tab { ...@@ -344,50 +344,6 @@ public class Tab {
} }
} }
/**
* Set arbitrary data on the tab. This will be saved and restored with the browser, so it is
* important to keep this data as small as possible.
*
* @param data The data to set, must be smaller than 4K when serialized. A snapshot of this data
* is taken, so any changes to the passed in object after this call will not be reflected.
*
* @throws IllegalArgumentException if the serialzed size of the data exceeds 4K.
*
* @since 85
*/
public void setData(@NonNull Map<String, String> data) {
ThreadCheck.ensureOnUiThread();
if (WebLayer.getSupportedMajorVersionInternal() < 85) {
throw new UnsupportedOperationException();
}
try {
if (!mImpl.setData(data)) {
throw new IllegalArgumentException("Data given to Tab.setData() was too large.");
}
} catch (RemoteException e) {
throw new APICallException(e);
}
}
/**
* Get arbitrary data set on the tab with setData().
*
* @return the data or an empty map if no data was set.
* @since 85
*/
@NonNull
public Map<String, String> getData() {
ThreadCheck.ensureOnUiThread();
if (WebLayer.getSupportedMajorVersionInternal() < 85) {
throw new UnsupportedOperationException();
}
try {
return (Map<String, String>) mImpl.getData();
} catch (RemoteException e) {
throw new APICallException(e);
}
}
private final class TabClientImpl extends ITabClient.Stub { private final class TabClientImpl extends ITabClient.Stub {
@Override @Override
public void visibleUriChanged(String uriString) { public void visibleUriChanged(String uriString) {
......
...@@ -75,12 +75,6 @@ class Tab { ...@@ -75,12 +75,6 @@ class Tab {
// Returns the tab's guid. // Returns the tab's guid.
virtual const std::string& GetGuid() = 0; virtual const std::string& GetGuid() = 0;
// Allows the embedder to get and set arbitrary data on the tab. This will be
// saved and restored with the browser, so it is important to keep this data
// as small as possible.
virtual void SetData(const std::map<std::string, std::string>& data) = 0;
virtual const std::map<std::string, std::string>& GetData() = 0;
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
// TODO: this isn't a stable API, so use it now for expediency in the C++ API, // TODO: this isn't a stable API, so use it now for expediency in the C++ API,
// but if we ever want to have backward or forward compatibility in C++ this // but if we ever want to have backward or forward compatibility in C++ this
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment