15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/pinned_tab_codec.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/startup/startup_tab.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/pinned_tab_test_utils.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/browser_with_test_window_test.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef BrowserWithTestWindowTest PinnedTabCodecTest;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure nothing is restored when the browser has no pinned tabs.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PinnedTabCodecTest, NoPinnedTabs) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url1("http://www.google.com");
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTab(browser(), url1);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PinnedTabCodec::WritePinnedTabs(profile());
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string result = PinnedTabTestUtils::TabsToString(
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PinnedTabCodec::ReadPinnedTabs(profile()));
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", result);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates a browser with one pinned tab and one normal tab, does restore and
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// makes sure we get back another pinned tab.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PinnedTabCodecTest, PinnedAndNonPinned) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url1("http://www.google.com");
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url2("http://www.google.com/2");
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTab(browser(), url2);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // AddTab inserts at index 0, so order after this is url1, url2.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTab(browser(), url1);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->tab_strip_model()->SetTabPinned(0, true);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PinnedTabCodec::WritePinnedTabs(profile());
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StartupTabs pinned_tabs = PinnedTabCodec::ReadPinnedTabs(profile());
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string result = PinnedTabTestUtils::TabsToString(pinned_tabs);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://www.google.com/::pinned:", result);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Update pinned tabs and restore back the old value directly.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->tab_strip_model()->SetTabPinned(1, true);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PinnedTabCodec::WritePinnedTabs(profile());
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result = PinnedTabTestUtils::TabsToString(
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PinnedTabCodec::ReadPinnedTabs(profile()));
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://www.google.com/::pinned: http://www.google.com/2::pinned:",
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            result);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PinnedTabCodec::WritePinnedTabs(profile(), pinned_tabs);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result = PinnedTabTestUtils::TabsToString(
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PinnedTabCodec::ReadPinnedTabs(profile()));
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://www.google.com/::pinned:", result);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
64