Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(787)

Unified Diff: ios/shared/chrome/browser/tabs/web_state_list_serialization_unittest.mm

Issue 2812623002: Revert of [ios] Move WebStateList to ios/chrome/browser/web_state_list. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/shared/chrome/browser/tabs/web_state_list_serialization_unittest.mm
diff --git a/ios/shared/chrome/browser/tabs/web_state_list_serialization_unittest.mm b/ios/shared/chrome/browser/tabs/web_state_list_serialization_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..1672b620962b2f99076b8a605be9af4690f86706
--- /dev/null
+++ b/ios/shared/chrome/browser/tabs/web_state_list_serialization_unittest.mm
@@ -0,0 +1,134 @@
+// Copyright 2017 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.
+
+#import "ios/shared/chrome/browser/tabs/web_state_list_serialization.h"
+
+#include <memory>
+
+#include "base/bind.h"
+#include "base/memory/ptr_util.h"
+#import "ios/shared/chrome/browser/tabs/fake_web_state_list_delegate.h"
+#import "ios/shared/chrome/browser/tabs/web_state_list.h"
+#import "ios/shared/chrome/browser/tabs/web_state_opener.h"
+#import "ios/web/public/crw_session_storage.h"
+#import "ios/web/public/serializable_user_data_manager.h"
+#import "ios/web/public/test/fakes/test_web_state.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/platform_test.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace {
+
+// Serializable sub-class of TestWebState.
+class SerializableTestWebState : public web::TestWebState {
+ public:
+ static std::unique_ptr<web::WebState> Create() {
+ return base::MakeUnique<SerializableTestWebState>();
+ }
+
+ static std::unique_ptr<web::WebState> CreateWithSessionStorage(
+ CRWSessionStorage* session_storage) {
+ std::unique_ptr<web::WebState> web_state = Create();
+ web::SerializableUserDataManager::FromWebState(web_state.get())
+ ->AddSerializableUserData(session_storage.userData);
+ return web_state;
+ }
+
+ private:
+ // web::TestWebState implementation.
+ CRWSessionStorage* BuildSessionStorage() override {
+ std::unique_ptr<web::SerializableUserData> serializable_user_data =
+ web::SerializableUserDataManager::FromWebState(this)
+ ->CreateSerializableUserData();
+
+ CRWSessionStorage* session_storage = [[CRWSessionStorage alloc] init];
+ [session_storage setSerializableUserData:std::move(serializable_user_data)];
+ return session_storage;
+ }
+};
+
+// Compares whether both WebStateList |original| and |restored| have the same
+// opener-opened relationship. The |restored| WebStateList may have additional
+// WebState, so only indices from |restored_index| to |count()| are compared.
+void ExpectRelationshipIdenticalFrom(int restored_index,
+ WebStateList* original,
+ WebStateList* restored) {
+ ASSERT_GE(restored_index, 0);
+ EXPECT_EQ(original->count(), restored->count() - restored_index);
+
+ for (int index = 0; index < original->count(); ++index) {
+ WebStateOpener original_opener = original->GetOpenerOfWebStateAt(index);
+ WebStateOpener restored_opener =
+ restored->GetOpenerOfWebStateAt(index + restored_index);
+
+ int restored_opener_index =
+ restored_opener.opener
+ ? restored->GetIndexOfWebState(restored_opener.opener) -
+ restored_index
+ : WebStateList::kInvalidIndex;
+
+ EXPECT_EQ(original->GetIndexOfWebState(original_opener.opener),
+ restored_opener_index);
+ EXPECT_EQ(original_opener.navigation_index,
+ restored_opener.navigation_index);
+ }
+}
+
+} // namespace
+
+class WebStateListSerializationTest : public PlatformTest {
+ public:
+ WebStateListSerializationTest() = default;
+
+ WebStateListDelegate* web_state_list_delegate() {
+ return &web_state_list_delegate_;
+ }
+
+ private:
+ FakeWebStateListDelegate web_state_list_delegate_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebStateListSerializationTest);
+};
+
+TEST_F(WebStateListSerializationTest, SerializationEmpty) {
+ WebStateList original_web_state_list(web_state_list_delegate());
+ NSArray<CRWSessionStorage*>* sessions =
+ SerializeWebStateList(&original_web_state_list);
+
+ EXPECT_EQ(0u, [sessions count]);
+}
+
+TEST_F(WebStateListSerializationTest, SerializationRoundTrip) {
+ WebStateList original_web_state_list(web_state_list_delegate());
+ original_web_state_list.InsertWebState(0, SerializableTestWebState::Create());
+ original_web_state_list.InsertWebState(1, SerializableTestWebState::Create());
+ original_web_state_list.InsertWebState(2, SerializableTestWebState::Create());
+ original_web_state_list.InsertWebState(3, SerializableTestWebState::Create());
+ original_web_state_list.SetOpenerOfWebStateAt(
+ 1, WebStateOpener(original_web_state_list.GetWebStateAt(0), 3));
+ original_web_state_list.SetOpenerOfWebStateAt(
+ 2, WebStateOpener(original_web_state_list.GetWebStateAt(0), 2));
+ original_web_state_list.SetOpenerOfWebStateAt(
+ 3, WebStateOpener(original_web_state_list.GetWebStateAt(1), 1));
+
+ NSArray<CRWSessionStorage*>* sessions =
+ SerializeWebStateList(&original_web_state_list);
+
+ EXPECT_EQ(4u, [sessions count]);
+
+ WebStateList restored_web_state_list(web_state_list_delegate());
+ restored_web_state_list.InsertWebState(0, SerializableTestWebState::Create());
+ ASSERT_EQ(1, restored_web_state_list.count());
+
+ DeserializeWebStateList(
+ &restored_web_state_list, sessions,
+ base::BindRepeating(&SerializableTestWebState::CreateWithSessionStorage));
+
+ EXPECT_EQ(5, restored_web_state_list.count());
+ ExpectRelationshipIdenticalFrom(1, &original_web_state_list,
+ &restored_web_state_list);
+}

Powered by Google App Engine
This is Rietveld 408576698