Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(199)

Side by Side Diff: chrome/browser/extensions/api/declarative_content/content_action_unittest.cc

Issue 11547033: Implement declarativeContent API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 "chrome/browser/extensions/api/declarative_content/content_action.h"
6
7 #include "base/command_line.h"
8 #include "base/message_loop.h"
9 #include "base/test/values_test_util.h"
10 #include "base/values.h"
11 #include "chrome/browser/extensions/extension_action.h"
12 #include "chrome/browser/extensions/extension_action_manager.h"
13 #include "chrome/browser/extensions/extension_service.h"
14 #include "chrome/browser/extensions/extension_tab_util.h"
15 #include "chrome/browser/extensions/test_extension_system.h"
16 #include "chrome/browser/sessions/session_tab_helper.h"
17 #include "chrome/common/extensions/extension_builder.h"
18 #include "chrome/common/extensions/value_builder.h"
19 #include "chrome/test/base/testing_profile.h"
20 #include "content/public/test/test_browser_thread.h"
21 #include "content/public/test/web_contents_tester.h"
22 #include "testing/gmock/include/gmock/gmock.h"
23 #include "testing/gtest/include/gtest/gtest.h"
24
25 namespace extensions {
26 namespace {
27
28 using testing::HasSubstr;
29
30 class TestExtensionEnvironment {
31 public:
32 TestExtensionEnvironment()
33 : ui_thread_(BrowserThread::UI, &loop_),
34 extension_service_(NULL) {}
35
36 TestingProfile* profile() { return &profile_; }
37
38 ExtensionService* GetExtensionService() {
39 if (extension_service_ == NULL) {
40 TestExtensionSystem* extension_system =
41 static_cast<TestExtensionSystem*>(ExtensionSystem::Get(&profile_));
42 extension_service_ = extension_system->CreateExtensionService(
43 CommandLine::ForCurrentProcess(), FilePath(), false);
44 }
45 return extension_service_;
46 }
47
48 scoped_refptr<Extension> MakeExtension(DictionaryBuilder& manifest_extra) {
49 scoped_ptr<base::DictionaryValue> manifest = DictionaryBuilder()
50 .Set("name", "Extension")
51 .Set("version", "1.0")
52 .Set("manifest_version", 2)
53 .Build();
54 manifest->MergeDictionary(manifest_extra.Build().get());
55
56 scoped_refptr<Extension> result =
57 ExtensionBuilder().SetManifest(manifest.Pass()).Build();
58 GetExtensionService()->AddExtension(result);
59 return result;
60 }
61
62 scoped_ptr<content::WebContents> MakeTab() {
63 scoped_ptr<content::WebContents> contents(
64 content::WebContentsTester::CreateTestWebContents(&profile_, NULL));
65 // Create a tab id.
66 SessionTabHelper::CreateForWebContents(contents.get());
67 return contents.Pass();
68 }
69
70 private:
71 MessageLoop loop_;
72 content::TestBrowserThread ui_thread_;
73 TestingProfile profile_;
74 ExtensionService* extension_service_;
75 };
76
77 TEST(ContentActionTest, ShowPageAction) {
78 TestExtensionEnvironment env;
79 std::string error;
80 bool bad_message = false;
81 scoped_ptr<ContentAction> result;
82
83 // Test wrong data type passed.
84 error.clear();
85 result = ContentAction::Create(*base::ParseJson("[]"), &error, &bad_message);
86 EXPECT_TRUE(bad_message);
87 EXPECT_EQ("", error);
88 EXPECT_FALSE(result);
89
90 // Test missing instanceType element.
91 error.clear();
92 result = ContentAction::Create(*base::ParseJson("{}"), &error, &bad_message);
93 EXPECT_TRUE(bad_message);
94 EXPECT_EQ("", error);
95 EXPECT_FALSE(result);
96
97 // Test wrong instanceType element.
98 error.clear();
99 result = ContentAction::Create(*base::ParseJson(
100 "{\n"
101 " \"instanceType\": \"declarativeContent.UnknownType\",\n"
102 "}"),
103 &error, &bad_message);
104 EXPECT_THAT(error, HasSubstr("invalid instanceType"));
105 EXPECT_FALSE(result);
106
107 // Test success
108 error.clear();
109 result = ContentAction::Create(*base::ParseJson(
110 "{\n"
111 " \"instanceType\": \"declarativeContent.ShowPageAction\",\n"
112 "}"),
113 &error, &bad_message);
114 EXPECT_EQ("", error);
115 EXPECT_FALSE(bad_message);
116 ASSERT_TRUE(result);
117 EXPECT_EQ(ContentAction::ACTION_SHOW_PAGE_ACTION, result->GetType());
118
119 scoped_refptr<Extension> extension = env.MakeExtension(
120 DictionaryBuilder().Set("page_action", DictionaryBuilder()
121 .Set("default_title", "Extension")));
122 ExtensionAction* page_action =
123 ExtensionActionManager::Get(env.profile())->GetPageAction(*extension);
124 scoped_ptr<content::WebContents> contents = env.MakeTab();
125 const int tab_id = ExtensionTabUtil::GetTabId(contents.get());
126 EXPECT_FALSE(page_action->GetIsVisible(tab_id));
127 ContentAction::ApplyInfo apply_info = {
128 env.profile(), contents.get()
129 };
130 result->Apply(extension->id(), base::Time(), apply_info);
131 EXPECT_TRUE(page_action->GetIsVisible(tab_id));
132 }
133
134 } // namespace
135 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698