11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/enhanced_bookmarks/enhanced_bookmark_model.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/base64.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/macros.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/message_loop/message_loop.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/run_loop.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/strings/string_util.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/strings/utf_string_conversions.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/bookmarks/browser/bookmark_model.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/bookmarks/browser/bookmark_node.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/bookmarks/test/test_bookmark_client.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/enhanced_bookmarks/enhanced_bookmark_model_observer.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/enhanced_bookmarks/proto/metadata.pb.h" 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest.h" 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "url/gurl.h" 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing enhanced_bookmarks::EnhancedBookmarkModel; 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst std::string BOOKMARK_URL("http://example.com/index.html"); 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass EnhancedBookmarkModelTest 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : public testing::Test, 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public enhanced_bookmarks::EnhancedBookmarkModelObserver { 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EnhancedBookmarkModelTest() 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : loaded_calls_(0), 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci shutting_down_calls_(0), 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci added_calls_(0), 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci removed_calls_(0), 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci all_user_nodes_removed_calls_(0), 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci remote_id_changed_calls_(0), 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_added_(NULL), 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_removed_(NULL), 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_remote_id_node_(NULL) {} 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~EnhancedBookmarkModelTest() {} 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetUp() OVERRIDE { 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci message_loop_.reset(new base::MessageLoop(base::MessageLoop::TYPE_DEFAULT)); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_client_.reset(new bookmarks::TestBookmarkClient()); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_.reset(bookmark_client_->CreateModel().release()); 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_.reset(new EnhancedBookmarkModel(bookmark_model_.get(), "v1.0")); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->AddObserver(this); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void TearDown() OVERRIDE { 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (model_) 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->Shutdown(); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_.reset(); 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_.reset(); 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_client_.reset(); 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci message_loop_.reset(); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* AddBookmark() { 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return AddBookmark("Some title", bookmark_model_->other_node()); 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* AddFolder() { 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return AddFolder("Some title", bookmark_model_->other_node()); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* AddBookmark(const std::string& name, 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* parent) { 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return model_->AddURL(parent, 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, // index. 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ASCIIToUTF16(name), 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL(BOOKMARK_URL), 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Time::Now()); 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* AddFolder(const std::string& name, 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* parent) { 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return model_->AddFolder(parent, 0, base::ASCIIToUTF16(name)); 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string GetVersion(const BookmarkNode* node) { 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return GetMetaInfoField(node, "stars.version"); 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string GetId(const BookmarkNode* node) { 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return GetMetaInfoField(node, "stars.id"); 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string GetOldId(const BookmarkNode* node) { 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return GetMetaInfoField(node, "stars.oldId"); 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string GetMetaInfoField(const BookmarkNode* node, 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& name) { 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string value; 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!node->GetMetaInfo(name, &value)) 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return std::string(); 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return value; 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<base::MessageLoop> message_loop_; 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<bookmarks::TestBookmarkClient> bookmark_client_; 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<BookmarkModel> bookmark_model_; 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<EnhancedBookmarkModel> model_; 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // EnhancedBookmarkModelObserver implementation: 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void EnhancedBookmarkModelLoaded() OVERRIDE { loaded_calls_++; } 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void EnhancedBookmarkModelShuttingDown() OVERRIDE { 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci shutting_down_calls_++; 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void EnhancedBookmarkAdded(const BookmarkNode* node) OVERRIDE { 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci added_calls_++; 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_added_ = node; 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void EnhancedBookmarkRemoved(const BookmarkNode* node) OVERRIDE { 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci removed_calls_++; 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_removed_ = node; 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void EnhancedBookmarkAllUserNodesRemoved() OVERRIDE { 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci all_user_nodes_removed_calls_++; 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void EnhancedBookmarkRemoteIdChanged( 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node, 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& old_remote_id, 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& remote_id) OVERRIDE { 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci remote_id_changed_calls_++; 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_remote_id_node_ = node; 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_old_remote_id_ = old_remote_id; 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_remote_id_ = remote_id; 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Observer call counters: 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int loaded_calls_; 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int shutting_down_calls_; 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int added_calls_; 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int removed_calls_; 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int all_user_nodes_removed_calls_; 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int remote_id_changed_calls_; 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Observer parameter cache: 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* last_added_; 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* last_removed_; 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* last_remote_id_node_; 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string last_old_remote_id_; 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string last_remote_id_; 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(EnhancedBookmarkModelTest); 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestEmptySnippet) { 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string snippet(model_->GetSnippet(node)); 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(snippet, ""); 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestSnippet) { 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Binary serialize the protobuf. 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci image::collections::PageData data; 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data.set_snippet("I'm happy!"); 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(data.IsInitialized()); 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string output; 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool result = data.SerializeToString(&output); 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // base64 encode the output. 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string encoded; 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Base64Encode(output, &encoded); 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node, "stars.pageData", encoded); 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string snippet(model_->GetSnippet(node)); 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(snippet, "I'm happy!"); 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestBadEncodingSnippet) { 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Binary serialize the protobuf. 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci image::collections::PageData data; 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data.set_snippet("You are happy!"); 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(data.IsInitialized()); 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string output; 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool result = data.SerializeToString(&output); 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // don't base 64 encode the output. 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node, "stars.pageData", output); 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string snippet(model_->GetSnippet(node)); 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(snippet, ""); 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestOriginalImage) { 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci image::collections::ImageData data; 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Intentionally make raw pointer. 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci image::collections::ImageData_ImageInfo* info = 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new image::collections::ImageData_ImageInfo; 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info->set_url("http://example.com/foobar"); 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info->set_width(15); 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info->set_height(55); 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // This method consumes the pointer. 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data.set_allocated_original_info(info); 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string output; 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool result = data.SerializePartialToString(&output); 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // base64 encode the output. 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string encoded; 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Base64Encode(output, &encoded); 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node, "stars.imageData", encoded); 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL url; 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int width; 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int height; 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result = model_->GetOriginalImage(node, &url, &width, &height); 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(url, GURL("http://example.com/foobar")); 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(width, 15); 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(height, 55); 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestThumbnailImage) { 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci image::collections::ImageData data; 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Intentionally make raw pointer. 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci image::collections::ImageData_ImageInfo* info = 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new image::collections::ImageData_ImageInfo; 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info->set_url("http://example.com/foobar"); 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info->set_width(15); 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info->set_height(55); 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // This method consumes the pointer. 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data.set_allocated_thumbnail_info(info); 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string output; 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool result = data.SerializePartialToString(&output); 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // base64 encode the output. 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string encoded; 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Base64Encode(output, &encoded); 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node, "stars.imageData", encoded); 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL url; 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int width; 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int height; 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result = model_->GetThumbnailImage(node, &url, &width, &height); 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(url, GURL("http://example.com/foobar")); 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(width, 15); 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(height, 55); 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestOriginalImageMissingDimensions) { 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci image::collections::ImageData data; 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Intentionally make raw pointer. 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci image::collections::ImageData_ImageInfo* info = 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new image::collections::ImageData_ImageInfo; 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info->set_url("http://example.com/foobar"); 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // This method consumes the pointer. 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data.set_allocated_original_info(info); 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string output; 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool result = data.SerializePartialToString(&output); 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // base64 encode the output. 2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string encoded; 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Base64Encode(output, &encoded); 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node, "stars.imageData", encoded); 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL url; 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int width; 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int height; 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result = model_->GetOriginalImage(node, &url, &width, &height); 2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_FALSE(result); 2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestOriginalImageBadUrl) { 2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci image::collections::ImageData data; 2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Intentionally make raw pointer. 2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci image::collections::ImageData_ImageInfo* info = 2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new image::collections::ImageData_ImageInfo; 2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info->set_url("asdf. 13r"); 2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info->set_width(15); 2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci info->set_height(55); 3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // This method consumes the pointer. 3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data.set_allocated_original_info(info); 3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string output; 3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool result = data.SerializePartialToString(&output); 3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // base64 encode the output. 3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string encoded; 3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Base64Encode(output, &encoded); 3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node, "stars.imageData", encoded); 3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL url; 3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int width; 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int height; 3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result = model_->GetOriginalImage(node, &url, &width, &height); 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_FALSE(result); 3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestEncodeDecode) { 3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 3211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool result = 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetOriginalImage(node, GURL("http://example.com/i.jpg"), 22, 33); 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL url; 3271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int width; 3281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int height; 3291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result = model_->GetOriginalImage(node, &url, &width, &height); 3301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 3311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(url, GURL("http://example.com/i.jpg")); 3321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(width, 22); 3331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(height, 33); 3341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v1.0", GetVersion(node)); 3351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestDoubleEncodeDecode) { 3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 3391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Encode some information. 3411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool result = 3421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetOriginalImage(node, GURL("http://example.com/i.jpg"), 22, 33); 3431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Encode some different information. 3451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result = 3461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetOriginalImage(node, GURL("http://example.com/i.jpg"), 33, 44); 3471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 3481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL url; 3501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int width; 3511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int height; 3521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result = model_->GetOriginalImage(node, &url, &width, &height); 3531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 3541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(url, GURL("http://example.com/i.jpg")); 3551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(width, 33); 3561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(height, 44); 3571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v1.0", GetVersion(node)); 3581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestRemoteId) { 3611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 3621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Verify that the remote id starts with the correct prefix. 3631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(StartsWithASCII(model_->GetRemoteId(node), "ebc_", true)); 3641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Getting the remote id for nodes that don't have them should return the 3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // empty string. 3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* existing_node = 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->AddURL(bookmark_model_->other_node(), 3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ASCIIToUTF16("Title"), 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL(GURL(BOOKMARK_URL))); 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(model_->GetRemoteId(existing_node).empty()); 3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Folder nodes should not have a remote id set on creation. 3751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* folder_node = AddFolder(); 3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(model_->GetRemoteId(folder_node).empty()); 3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestEmptyDescription) { 3801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 3811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string description(model_->GetDescription(node)); 3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(description, ""); 3841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestDescription) { 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string description("This is the most useful description of all."); 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set the description. 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetDescription(node, description); 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Check the description is the one that was set. 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(model_->GetDescription(node), description); 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v1.0", GetVersion(node)); 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// If there is no notes field, the description should fall back on the snippet. 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestDescriptionFallback) { 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Binary serialize the protobuf. 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci image::collections::PageData data; 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data.set_snippet("Joe Bar Team"); 4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(data.IsInitialized()); 4061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string output; 4071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool result = data.SerializeToString(&output); 4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(result); 4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // base64 encode the output. 4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string encoded; 4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Base64Encode(output, &encoded); 4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node, "stars.pageData", encoded); 4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The snippet is used as the description. 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string snippet(model_->GetSnippet(node)); 4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("Joe Bar Team", model_->GetDescription(node)); 4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set the description. 4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string description("This is the most useful description of all."); 4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetDescription(node, description); 4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Check the description is the one that was set. 4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(model_->GetDescription(node), description); 4251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Makes sure that the stars.version field is set every time 4281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// EnhancedBookmarkModel makes a change to a node. 4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, TestVersionField) { 4301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 4311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("", GetVersion(node)); 4321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetDescription(node, "foo"); 4341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v1.0", GetVersion(node)); 4351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Add a suffix to the version to set. 4371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetVersionSuffix("alpha"); 4381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetDescription(node, "foo"); 4401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Since the description didn't actually change, the version field should 4411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // not either. 4421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v1.0", GetVersion(node)); 4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetDescription(node, "bar"); 4451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v1.0/alpha", GetVersion(node)); 4461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Verifies that duplicate nodes are reset when the model is created. 4491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, ResetDuplicateNodesOnInitialization) { 4501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->Shutdown(); 4511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* parent = bookmark_model_->other_node(); 4531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node1 = bookmark_model_->AddURL( 4541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL)); 4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node2 = bookmark_model_->AddURL( 4561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL)); 4571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node3 = bookmark_model_->AddURL( 4581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL)); 4591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node4 = bookmark_model_->AddURL( 4601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci parent, 0, base::ASCIIToUTF16("Some title"), GURL(BOOKMARK_URL)); 4611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1"); 4631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_2"); 4641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node3, "stars.id", "c_1"); 4651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node4, "stars.id", "c_1"); 4661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", GetId(node1)); 4671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_2", GetId(node2)); 4681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", GetId(node3)); 4691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", GetId(node4)); 4701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_.reset(new EnhancedBookmarkModel(bookmark_model_.get(), "v2.0")); 4721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 4731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_2", GetId(node2)); 4741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("", GetId(node1)); 4751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("", GetId(node3)); 4761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("", GetId(node4)); 4771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", GetOldId(node1)); 4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", GetOldId(node3)); 4791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", GetOldId(node4)); 4801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v2.0", GetVersion(node1)); 4811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v2.0", GetVersion(node3)); 4821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v2.0", GetVersion(node4)); 4831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Verifies that duplicate nodes are reset if one is created. 4861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, ResetDuplicateAddedNodes) { 4871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BookmarkNode::MetaInfoMap meta_info; 4881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci meta_info["stars.id"] = "c_1"; 4891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* parent = bookmark_model_->other_node(); 4901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node1 = 4921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->AddURLWithCreationTimeAndMetaInfo( 4931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci parent, 4941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 4951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ASCIIToUTF16("Some title"), 4961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL(BOOKMARK_URL), 4971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Time::Now(), 4981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &meta_info); 4991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", GetId(node1)); 5001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node2 = 5021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->AddURLWithCreationTimeAndMetaInfo( 5031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci parent, 5041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 5051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ASCIIToUTF16("Some title"), 5061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL(BOOKMARK_URL), 5071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Time::Now(), 5081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &meta_info); 5091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 5111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("", GetId(node1)); 5121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("", GetId(node2)); 5131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", GetOldId(node1)); 5141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", GetOldId(node2)); 5151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v1.0", GetVersion(node1)); 5161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v1.0", GetVersion(node2)); 5171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Verifies that duplicate nodes are reset if an id is changed to a duplicate 5201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// value. 5211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, ResetDuplicateChangedNodes) { 5221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node1 = AddBookmark(); 5231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node2 = AddBookmark(); 5241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1"); 5261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", GetId(node1)); 5271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_1"); 5291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 5301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("", GetId(node1)); 5311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("", GetId(node2)); 5321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", GetOldId(node1)); 5331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", GetOldId(node2)); 5341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v1.0", GetVersion(node1)); 5351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v1.0", GetVersion(node2)); 5361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, SetMultipleMetaInfo) { 5391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 5401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BookmarkNode::MetaInfoMap meta_info; 5411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci meta_info["a"] = "aa"; 5421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci meta_info["b"] = "bb"; 5431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetVersionSuffix("1"); 5451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetMultipleMetaInfo(node, meta_info); 5461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("aa", GetMetaInfoField(node, "a")); 5471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("bb", GetMetaInfoField(node, "b")); 5481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v1.0/1", GetVersion(node)); 5491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Not present fields does not erase the fields already set on the node. 5511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci meta_info["a"] = "aaa"; 5521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetVersionSuffix("2"); 5531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetMultipleMetaInfo(node, meta_info); 5541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("aaa", GetMetaInfoField(node, "a")); 5551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("bb", GetMetaInfoField(node, "b")); 5561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v1.0/2", GetVersion(node)); 5571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Not actually changing any values should not set the version field. 5591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetVersionSuffix("3"); 5601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->SetMultipleMetaInfo(node, meta_info); 5611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("v1.0/2", GetVersion(node)); 5621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, ObserverShuttingDownEvent) { 5651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, shutting_down_calls_); 5661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->Shutdown(); 5671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, shutting_down_calls_); 5681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_.reset(); 5691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, ObserverNodeAddedEvent) { 5721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, added_calls_); 5731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 5741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, added_calls_); 5751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(node, last_added_); 5761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* folder = AddFolder(); 5781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, added_calls_); 5791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(folder, last_added_); 5801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, ObserverNodeRemovedEvent) { 5831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = AddBookmark(); 5841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* folder = AddFolder(); 5851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, removed_calls_); 5871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->Remove(node->parent(), node->parent()->GetIndexOf(node)); 5881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, removed_calls_); 5891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(node, last_removed_); 5901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->Remove(folder->parent(), 5921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci folder->parent()->GetIndexOf(folder)); 5931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, removed_calls_); 5941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(folder, last_removed_); 5951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, ObserverAllUserNodesRemovedEvent) { 5981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddBookmark(); 5991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddFolder(); 6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, all_user_nodes_removed_calls_); 6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->RemoveAllUserBookmarks(); 6021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, removed_calls_); 6031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, all_user_nodes_removed_calls_); 6041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, ObserverRemoteIdChangedEvent) { 6071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node1 = AddFolder(); 6081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node2 = AddFolder(); 6091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, remote_id_changed_calls_); 6111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1"); 6121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 6131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, remote_id_changed_calls_); 6141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(node1, last_remote_id_node_); 6151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("", last_old_remote_id_); 6161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", last_remote_id_); 6171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_2"); 6191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 6201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, remote_id_changed_calls_); 6211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(node2, last_remote_id_node_); 6221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("", last_old_remote_id_); 6231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_2", last_remote_id_); 6241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_3"); 6261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 6271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, remote_id_changed_calls_); 6281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(node1, last_remote_id_node_); 6291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_1", last_old_remote_id_); 6301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_3", last_remote_id_); 6311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set to duplicate ids. 6331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_3"); 6341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(4, remote_id_changed_calls_); 6351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(node2, last_remote_id_node_); 6361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_2", last_old_remote_id_); 6371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("c_3", last_remote_id_); 6381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 6391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(6, remote_id_changed_calls_); 6401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("", last_remote_id_); 6411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EnhancedBookmarkModelTest, ShutDownWhileResetDuplicationScheduled) { 6441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node1 = AddBookmark(); 6451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node2 = AddBookmark(); 6461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node1, "stars.id", "c_1"); 6471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmark_model_->SetNodeMetaInfo(node2, "stars.id", "c_1"); 6481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_->Shutdown(); 6491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_.reset(); 6501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 6511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 652