190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <set>
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <string>
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/pickle.h"
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/values.h"
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "extensions/common/permissions/api_permission.h"
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "extensions/common/permissions/permissions_info.h"
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/common/permissions/usb_device_permission.h"
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/common/permissions/usb_device_permission_data.h"
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ipc/ipc_message.h"
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace extensions {
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST(USBDevicePermissionTest, PermissionDataOrder) {
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_LT(UsbDevicePermissionData(0x02ad, 0x138c, -1),
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            UsbDevicePermissionData(0x02ad, 0x138d, -1));
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_LT(UsbDevicePermissionData(0x02ad, 0x138d, -1),
25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            UsbDevicePermissionData(0x02ae, 0x138c, -1));
26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_LT(UsbDevicePermissionData(0x02ad, 0x138c, -1),
27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            UsbDevicePermissionData(0x02ad, 0x138c, 0));
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(ENABLE_EXTENSIONS)
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_PermissionMessage PermissionMessage
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE_PermissionMessage DISABLED_PermissionMessage
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif  // defined(ENABLE_EXTENSIONS)
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST(USBDevicePermissionTest, MAYBE_PermissionMessage) {
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const char* const kMessages[] = {
380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      "Access the USB device PVR Mass Storage from HUMAX Co., Ltd.",
390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      "Access the USB device from HUMAX Co., Ltd.",
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      "Access the USB device",
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  };
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Prepare data set
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  scoped_ptr<base::ListValue> permission_list(new base::ListValue());
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  permission_list->Append(
46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      UsbDevicePermissionData(0x02ad, 0x138c, -1).ToValue()->DeepCopy());
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  permission_list->Append(
48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      UsbDevicePermissionData(0x02ad, 0x138d, -1).ToValue()->DeepCopy());
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  permission_list->Append(
50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      UsbDevicePermissionData(0x02ae, 0x138d, -1).ToValue()->DeepCopy());
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  UsbDevicePermission permission(
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      PermissionsInfo::GetInstance()->GetByID(APIPermission::kUsbDevice));
54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ASSERT_TRUE(permission.FromValue(permission_list.get(), NULL, NULL));
5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  PermissionMessages messages = permission.GetMessages();
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(3U, messages.size());
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(base::ASCIIToUTF16(kMessages[0]), messages.at(0).message());
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(base::ASCIIToUTF16(kMessages[1]), messages.at(1).message());
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(base::ASCIIToUTF16(kMessages[2]), messages.at(2).message());
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace extensions
64