| Index: chrome/test/data/extensions/api_test/tabs/basics/pinned.js
|
| ===================================================================
|
| --- chrome/test/data/extensions/api_test/tabs/basics/pinned.js (revision 0)
|
| +++ chrome/test/data/extensions/api_test/tabs/basics/pinned.js (revision 0)
|
| @@ -0,0 +1,85 @@
|
| +// Copyright (c) 2011 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.
|
| +
|
| +var firstWindowId;
|
| +
|
| +chrome.test.runTests([
|
| + function setupWindow() {
|
| + createWindow(["about:blank", "chrome://newtab/", pageUrl("a")], {},
|
| + pass(function(winId, tabIds) {
|
| + firstWindowId = winId;
|
| + }));
|
| + },
|
| +
|
| + function createPinned() {
|
| + var winOptions = {"windowId": firstWindowId, "pinned": true};
|
| + var onUpdatedCompleted = chrome.test.listenForever(
|
| + chrome.tabs.onUpdated,
|
| + function(tabId, changeInfo, tab) {
|
| + if ('pinned' in changeInfo) {
|
| + assertEq(false, changeInfo.pinned);
|
| + assertEq(false, tab.pinned);
|
| + onUpdatedCompleted();
|
| + }
|
| + }
|
| + );
|
| + chrome.tabs.create(winOptions, pass(function(tab) {
|
| + assertEq(true, tab.pinned);
|
| + chrome.tabs.update(tab.id, {"pinned":false}, pass(function() {
|
| + // Leave a clean slate for the next test.
|
| + chrome.tabs.remove(tab.id);
|
| + }));
|
| + }));
|
| + },
|
| +
|
| + function updatePinned() {
|
| + // A helper function that (un)pins a tab and verifies that both the callback
|
| + // and the chrome.tabs.onUpdated event listeners are called.
|
| + var pinTab = function(id, pinnedState, callback) {
|
| + var onUpdatedCompleted = chrome.test.listenForever(
|
| + chrome.tabs.onUpdated,
|
| + function(tabId, changeInfo, tab) {
|
| + if ('pinned' in changeInfo) {
|
| + assertEq(tabId, id);
|
| + assertEq(pinnedState, tab.pinned);
|
| + onUpdatedCompleted();
|
| + if (callback)
|
| + callback(tab);
|
| + }
|
| + }
|
| + );
|
| + chrome.tabs.update(id, { "pinned": pinnedState }, pass(function(tab) {
|
| + assertEq(pinnedState, tab.pinned);
|
| + }));
|
| + };
|
| +
|
| + // We pin and unpin these tabs because the TabStripModelObserver used to
|
| + // have multiple notification code paths depending on the tab moves as a
|
| + // result of being pinned or unpinned.
|
| + // This works as follows:
|
| + // 1. Pin first tab (does not move, pinning)
|
| + // 2. Pin 3rd tab (moves to 2nd tab, pinning)
|
| + // 3. Unpin 1st tab (moves to 2nd tab, unpinning)
|
| + // 4. Unpin (new) 1st tab (does not move. unpinning)
|
| + chrome.tabs.getAllInWindow(firstWindowId,
|
| + pass(function(tabs) {
|
| + assertEq(tabs.length, 3);
|
| + for (var i = 0; i < tabs.length; i++)
|
| + assertEq(false, tabs[i].pinned);
|
| +
|
| + pinTab(tabs[0].id, true, function(tab) {
|
| + assertEq(tabs[0].index, tab.index);
|
| + pinTab(tabs[2].id, true, function(tab) {
|
| + assertEq(1, tab.index);
|
| + pinTab(tabs[0].id, false, function(tab) {
|
| + assertEq(1, tab.index);
|
| + pinTab(tabs[2].id, false, function (tab) {
|
| + assertEq(0, tab.index);
|
| + });
|
| + });
|
| + });
|
| + });
|
| + }));
|
| + }
|
| +]);
|
|
|