1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "base/pickle.h" 6#include "chrome/browser/ui/views/extensions/browser_action_drag_data.h" 7#include "chrome/test/testing_profile.h" 8#include "googleurl/src/gurl.h" 9#include "testing/gtest/include/gtest/gtest.h" 10#include "ui/base/dragdrop/os_exchange_data.h" 11#include "ui/base/dragdrop/os_exchange_data_provider_win.h" 12 13namespace { 14 15ui::OSExchangeData::Provider* CloneProvider(const ui::OSExchangeData& data) { 16 return new ui::OSExchangeDataProviderWin( 17 ui::OSExchangeDataProviderWin::GetIDataObject(data)); 18} 19 20} // namespace 21 22typedef testing::Test BrowserActionDragDataTest; 23 24TEST_F(BrowserActionDragDataTest, ArbitraryFormat) { 25 TestingProfile profile; 26 profile.SetID(L"id"); 27 28 ui::OSExchangeData data; 29 data.SetURL(GURL("http://www.google.com"), L"Title"); 30 31 // We only support our format, so this should not succeed. 32 BrowserActionDragData drag_data; 33 EXPECT_FALSE(drag_data.Read(ui::OSExchangeData(CloneProvider(data)))); 34} 35 36TEST_F(BrowserActionDragDataTest, BrowserActionDragDataFormat) { 37 TestingProfile profile; 38 profile.SetID(L"id"); 39 40 const std::string extension_id = "42"; 41 const ProfileId profile_id = profile.GetRuntimeId(); 42 Pickle pickle; 43 pickle.WriteBytes(&profile_id, sizeof(profile_id)); 44 pickle.WriteString(extension_id); 45 pickle.WriteInt(42); 46 47 ui::OSExchangeData data; 48 data.SetPickledData(BrowserActionDragData::GetBrowserActionCustomFormat(), 49 pickle); 50 51 BrowserActionDragData drag_data; 52 EXPECT_TRUE(drag_data.Read(ui::OSExchangeData(CloneProvider(data)))); 53 ASSERT_TRUE(drag_data.IsFromProfile(profile.GetOriginalProfile())); 54 ASSERT_STREQ(extension_id.c_str(), drag_data.id().c_str()); 55 ASSERT_EQ(42, drag_data.index()); 56} 57