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

Side by Side Diff: chrome/browser/extensions/api/messaging/native_message_process_host_unittest.cc

Issue 12389041: Require manifests for native messaging hosts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 months 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/bind.h" 5 #include "base/bind.h"
6 #include "base/command_line.h" 6 #include "base/command_line.h"
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/files/scoped_temp_dir.h" 9 #include "base/files/scoped_temp_dir.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 15 matching lines...) Expand all
26 #include "chrome/common/extensions/extension.h" 26 #include "chrome/common/extensions/extension.h"
27 #include "chrome/common/extensions/features/feature.h" 27 #include "chrome/common/extensions/features/feature.h"
28 #include "content/public/browser/browser_thread.h" 28 #include "content/public/browser/browser_thread.h"
29 #include "content/public/test/test_browser_thread.h" 29 #include "content/public/test/test_browser_thread.h"
30 #include "testing/gtest/include/gtest/gtest.h" 30 #include "testing/gtest/include/gtest/gtest.h"
31 31
32 using content::BrowserThread; 32 using content::BrowserThread;
33 33
34 namespace { 34 namespace {
35 35
36 const char kTestHostId[] = "knldjmfmopnpolahpmmgbagdohdnhkik";
36 const char kTestMessage[] = "{\"text\": \"Hello.\"}"; 37 const char kTestMessage[] = "{\"text\": \"Hello.\"}";
37 38
38 base::FilePath GetTestDir() { 39 base::FilePath GetTestDir() {
39 base::FilePath test_dir; 40 base::FilePath test_dir;
40 PathService::Get(chrome::DIR_TEST_DATA, &test_dir); 41 PathService::Get(chrome::DIR_TEST_DATA, &test_dir);
41 test_dir = test_dir.AppendASCII("native_messaging"); 42 test_dir = test_dir.AppendASCII("native_messaging");
42 return test_dir; 43 return test_dir;
43 } 44 }
44 45
45 } // namespace 46 } // namespace
46 47
47 namespace extensions { 48 namespace extensions {
48 49
49 class FakeLauncher : public NativeProcessLauncher { 50 class FakeLauncher : public NativeProcessLauncher {
50 public: 51 public:
51 FakeLauncher(base::FilePath read_file, base::FilePath write_file) { 52 FakeLauncher(base::FilePath read_file, base::FilePath write_file) {
52 read_file_ = base::CreatePlatformFile( 53 read_file_ = base::CreatePlatformFile(
53 read_file, 54 read_file,
54 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ | 55 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ |
55 base::PLATFORM_FILE_ASYNC, 56 base::PLATFORM_FILE_ASYNC,
56 NULL, NULL); 57 NULL, NULL);
57 write_file_ = base::CreatePlatformFile( 58 write_file_ = base::CreatePlatformFile(
58 write_file, 59 write_file,
59 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE | 60 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE |
60 base::PLATFORM_FILE_ASYNC, 61 base::PLATFORM_FILE_ASYNC,
61 NULL, NULL); 62 NULL, NULL);
62 } 63 }
63 64
64 virtual void Launch(const std::string& native_host_name, 65 virtual void Launch(const GURL& origin,
66 const std::string& native_host_name,
65 LaunchedCallback callback) const OVERRIDE { 67 LaunchedCallback callback) const OVERRIDE {
66 callback.Run(base::GetCurrentProcessHandle(), read_file_, write_file_); 68 callback.Run(base::GetCurrentProcessHandle(), read_file_, write_file_);
67 } 69 }
68 70
69 private: 71 private:
70 base::PlatformFile read_file_; 72 base::PlatformFile read_file_;
71 base::PlatformFile write_file_; 73 base::PlatformFile write_file_;
72 }; 74 };
73 75
74 class NativeMessagingTest : public ::testing::Test, 76 class NativeMessagingTest : public ::testing::Test,
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 }; 146 };
145 147
146 // Read a single message from a local file. 148 // Read a single message from a local file.
147 TEST_F(NativeMessagingTest, SingleSendMessageRead) { 149 TEST_F(NativeMessagingTest, SingleSendMessageRead) {
148 base::FilePath temp_output_file = temp_dir_.path().AppendASCII("output"); 150 base::FilePath temp_output_file = temp_dir_.path().AppendASCII("output");
149 base::FilePath temp_input_file = CreateTempFileWithMessage(kTestMessage); 151 base::FilePath temp_input_file = CreateTempFileWithMessage(kTestMessage);
150 152
151 scoped_ptr<NativeProcessLauncher> launcher( 153 scoped_ptr<NativeProcessLauncher> launcher(
152 new FakeLauncher(temp_input_file, temp_output_file)); 154 new FakeLauncher(temp_input_file, temp_output_file));
153 native_message_process_host_ = NativeMessageProcessHost::CreateWithLauncher( 155 native_message_process_host_ = NativeMessageProcessHost::CreateWithLauncher(
154 AsWeakPtr(), "empty_app.py", 0, launcher.Pass()); 156 AsWeakPtr(), kTestHostId, "empty_app.py", 0, launcher.Pass());
155 ASSERT_TRUE(native_message_process_host_.get()); 157 ASSERT_TRUE(native_message_process_host_.get());
156 message_loop_.RunUntilIdle(); 158 message_loop_.RunUntilIdle();
157 159
158 native_message_process_host_->ReadNowForTesting(); 160 native_message_process_host_->ReadNowForTesting();
159 read_message_run_loop_.Run(); 161 read_message_run_loop_.Run();
160 EXPECT_EQ(kTestMessage, last_posted_message_); 162 EXPECT_EQ(kTestMessage, last_posted_message_);
161 } 163 }
162 164
163 // Tests sending a single message. The message should get written to 165 // Tests sending a single message. The message should get written to
164 // |temp_file| and should match the contents of single_message_request.msg. 166 // |temp_file| and should match the contents of single_message_request.msg.
165 TEST_F(NativeMessagingTest, SingleSendMessageWrite) { 167 TEST_F(NativeMessagingTest, SingleSendMessageWrite) {
166 base::FilePath temp_output_file = temp_dir_.path().AppendASCII("output"); 168 base::FilePath temp_output_file = temp_dir_.path().AppendASCII("output");
167 base::FilePath temp_input_file = CreateTempFileWithMessage(std::string()); 169 base::FilePath temp_input_file = CreateTempFileWithMessage(std::string());
168 170
169 scoped_ptr<NativeProcessLauncher> launcher( 171 scoped_ptr<NativeProcessLauncher> launcher(
170 new FakeLauncher(temp_input_file, temp_output_file)); 172 new FakeLauncher(temp_input_file, temp_output_file));
171 native_message_process_host_ = NativeMessageProcessHost::CreateWithLauncher( 173 native_message_process_host_ = NativeMessageProcessHost::CreateWithLauncher(
172 AsWeakPtr(), "empty_app.py", 0, launcher.Pass()); 174 AsWeakPtr(), kTestHostId, "empty_app.py", 0, launcher.Pass());
173 ASSERT_TRUE(native_message_process_host_.get()); 175 ASSERT_TRUE(native_message_process_host_.get());
174 message_loop_.RunUntilIdle(); 176 message_loop_.RunUntilIdle();
175 177
176 native_message_process_host_->Send(kTestMessage); 178 native_message_process_host_->Send(kTestMessage);
177 message_loop_.RunUntilIdle(); 179 message_loop_.RunUntilIdle();
178 180
179 std::string output; 181 std::string output;
180 base::TimeTicks start_time = base::TimeTicks::Now(); 182 base::TimeTicks start_time = base::TimeTicks::Now();
181 while (base::TimeTicks::Now() - start_time < TestTimeouts::action_timeout()) { 183 while (base::TimeTicks::Now() - start_time < TestTimeouts::action_timeout()) {
182 ASSERT_TRUE(file_util::ReadFileToString(temp_output_file, &output)); 184 ASSERT_TRUE(file_util::ReadFileToString(temp_output_file, &output));
183 if (!output.empty()) 185 if (!output.empty())
184 break; 186 break;
185 base::PlatformThread::YieldCurrentThread(); 187 base::PlatformThread::YieldCurrentThread();
186 } 188 }
187 189
188 EXPECT_EQ(FormatMessage(kTestMessage), output); 190 EXPECT_EQ(FormatMessage(kTestMessage), output);
189 } 191 }
190 192
191 // Disabled, see http://crbug.com/159754. 193 // Disabled, see http://crbug.com/159754.
192 // Test send message with a real client. The client just echo's back the text 194 // Test send message with a real client. The client just echo's back the text
193 // it recieved. 195 // it recieved.
194 TEST_F(NativeMessagingTest, DISABLED_EchoConnect) { 196 TEST_F(NativeMessagingTest, DISABLED_EchoConnect) {
195 native_message_process_host_ = NativeMessageProcessHost::Create( 197 native_message_process_host_ = NativeMessageProcessHost::Create(
196 AsWeakPtr(), "empty_app.py", 0); 198 AsWeakPtr(), kTestHostId, "empty_app.py", 0);
197 ASSERT_TRUE(native_message_process_host_.get()); 199 ASSERT_TRUE(native_message_process_host_.get());
198 message_loop_.RunUntilIdle(); 200 message_loop_.RunUntilIdle();
199 201
200 native_message_process_host_->Send("{\"text\": \"Hello.\"}"); 202 native_message_process_host_->Send("{\"text\": \"Hello.\"}");
201 read_message_run_loop_.Run(); 203 read_message_run_loop_.Run();
202 EXPECT_EQ("{\"id\": 1, \"echo\": {\"text\": \"Hello.\"}}", 204 EXPECT_EQ("{\"id\": 1, \"echo\": {\"text\": \"Hello.\"}}",
203 last_posted_message_); 205 last_posted_message_);
204 206
205 native_message_process_host_->Send("{\"foo\": \"bar\"}"); 207 native_message_process_host_->Send("{\"foo\": \"bar\"}");
206 read_message_run_loop_.Run(); 208 read_message_run_loop_.Run();
207 EXPECT_EQ("{\"id\": 2, \"echo\": {\"foo\": \"bar\"}}", last_posted_message_); 209 EXPECT_EQ("{\"id\": 2, \"echo\": {\"foo\": \"bar\"}}", last_posted_message_);
208 } 210 }
209 211
210 } // namespace extensions 212 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698