summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
diff options
context:
space:
mode:
authormiket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-18 21:17:53 +0000
committermiket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-18 21:17:53 +0000
commit223a93f11d161cd63a6986d8bd81364bae16a600 (patch)
treef0664542e7519fbb60ec6b29c66a4899dd91e7e2 /chrome/browser/extensions
parentfe600fb29e02b7c6d5c87ecca6d88646ad53d292 (diff)
downloadchromium_src-223a93f11d161cd63a6986d8bd81364bae16a600.zip
chromium_src-223a93f11d161cd63a6986d8bd81364bae16a600.tar.gz
chromium_src-223a93f11d161cd63a6986d8bd81364bae16a600.tar.bz2
Add skeleton plumbing for serial API. No functionality yet.
BUG=110241 TEST=added a small extension to test roundtrip. Review URL: http://codereview.chromium.org/9174019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@118151 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions')
-rw-r--r--chrome/browser/extensions/api/serial/serial_api.cc86
-rw-r--r--chrome/browser/extensions/api/serial/serial_api.h53
-rw-r--r--chrome/browser/extensions/api/serial/serial_apitest.cc34
-rw-r--r--chrome/browser/extensions/extension_function_dispatcher.cc5
4 files changed, 178 insertions, 0 deletions
diff --git a/chrome/browser/extensions/api/serial/serial_api.cc b/chrome/browser/extensions/api/serial/serial_api.cc
new file mode 100644
index 0000000..da52f5e
--- /dev/null
+++ b/chrome/browser/extensions/api/serial/serial_api.cc
@@ -0,0 +1,86 @@
+// Copyright (c) 2012 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.
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/values.h"
+#include "chrome/browser/extensions/api/serial/serial_api.h"
+#include "content/public/browser/browser_thread.h"
+
+using content::BrowserThread;
+
+namespace extensions {
+
+const char kConnectionIdKey[] = "connectionId";
+
+SerialOpenFunction::SerialOpenFunction() {
+}
+
+SerialOpenFunction::~SerialOpenFunction() {
+}
+
+bool SerialOpenFunction::RunImpl() {
+ EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &port_));
+
+ bool rv = BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&SerialOpenFunction::WorkOnIOThread, this));
+ DCHECK(rv);
+
+ return true;
+}
+
+void SerialOpenFunction::WorkOnIOThread() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+ DictionaryValue* result = new DictionaryValue();
+ result->SetInteger(kConnectionIdKey, 42);
+ result_.reset(result);
+
+ bool rv = BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&SerialOpenFunction::RespondOnUIThread, this));
+ DCHECK(rv);
+}
+
+void SerialOpenFunction::RespondOnUIThread() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ SendResponse(true);
+}
+
+SerialCloseFunction::SerialCloseFunction() {
+}
+
+SerialCloseFunction::~SerialCloseFunction() {
+}
+
+bool SerialCloseFunction::RunImpl() {
+ EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &connection_id_));
+
+ bool rv = BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&SerialCloseFunction::WorkOnIOThread, this));
+ DCHECK(rv);
+
+ return true;
+}
+
+void SerialCloseFunction::WorkOnIOThread() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+ result_.reset(Value::CreateBooleanValue(true));
+
+ bool rv = BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&SerialCloseFunction::RespondOnUIThread, this));
+ DCHECK(rv);
+}
+
+void SerialCloseFunction::RespondOnUIThread() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ SendResponse(true);
+}
+
+} // namespace extensions
diff --git a/chrome/browser/extensions/api/serial/serial_api.h b/chrome/browser/extensions/api/serial/serial_api.h
new file mode 100644
index 0000000..df4c3e0
--- /dev/null
+++ b/chrome/browser/extensions/api/serial/serial_api.h
@@ -0,0 +1,53 @@
+// Copyright (c) 2012 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_API_SERIAL_SERIAL_API_H_
+#define CHROME_BROWSER_EXTENSIONS_API_SERIAL_SERIAL_API_H_
+#pragma once
+
+#include <string>
+
+#include "chrome/browser/extensions/extension_function.h"
+
+namespace extensions {
+
+extern const char kConnectionIdKey[];
+
+class SerialOpenFunction : public AsyncExtensionFunction {
+ public:
+ SerialOpenFunction();
+ virtual ~SerialOpenFunction();
+
+ virtual bool RunImpl() OVERRIDE;
+
+ protected:
+ void WorkOnIOThread();
+ void RespondOnUIThread();
+
+ private:
+ std::string port_;
+
+ DECLARE_EXTENSION_FUNCTION_NAME("experimental.serial.open")
+};
+
+class SerialCloseFunction : public AsyncExtensionFunction {
+ public:
+ SerialCloseFunction();
+ virtual ~SerialCloseFunction();
+
+ virtual bool RunImpl() OVERRIDE;
+
+ protected:
+ void WorkOnIOThread();
+ void RespondOnUIThread();
+
+ private:
+ int connection_id_;
+
+ DECLARE_EXTENSION_FUNCTION_NAME("experimental.serial.close")
+};
+
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_API_SERIAL_SERIAL_API_H_
diff --git a/chrome/browser/extensions/api/serial/serial_apitest.cc b/chrome/browser/extensions/api/serial/serial_apitest.cc
new file mode 100644
index 0000000..7a58d73
--- /dev/null
+++ b/chrome/browser/extensions/api/serial/serial_apitest.cc
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 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.
+
+#include "base/command_line.h"
+#include "base/memory/scoped_ptr.h"
+#include "chrome/browser/extensions/api/serial/serial_api.h"
+#include "chrome/browser/extensions/extension_apitest.h"
+#include "chrome/browser/extensions/extension_function_test_utils.h"
+#include "chrome/common/chrome_switches.h"
+#include "content/public/browser/browser_thread.h"
+
+using content::BrowserThread;
+
+using namespace extension_function_test_utils;
+
+namespace {
+
+class SerialApiTest : public ExtensionApiTest {
+ public:
+ SerialApiTest() {}
+
+ virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
+ ExtensionApiTest::SetUpCommandLine(command_line);
+ command_line->AppendSwitch(switches::kEnableExperimentalExtensionApis);
+ command_line->AppendSwitch(switches::kEnablePlatformApps);
+ }
+};
+
+} // namespace
+
+IN_PROC_BROWSER_TEST_F(SerialApiTest, SerialExtension) {
+ ASSERT_TRUE(RunExtensionTest("serial/api")) << message_;
+}
diff --git a/chrome/browser/extensions/extension_function_dispatcher.cc b/chrome/browser/extensions/extension_function_dispatcher.cc
index c583456..107911b 100644
--- a/chrome/browser/extensions/extension_function_dispatcher.cc
+++ b/chrome/browser/extensions/extension_function_dispatcher.cc
@@ -17,6 +17,7 @@
#include "chrome/browser/bookmarks/bookmark_manager_extension_api.h"
#include "chrome/browser/download/download_extension_api.h"
#include "chrome/browser/extensions/api/dns/dns_api.h"
+#include "chrome/browser/extensions/api/serial/serial_api.h"
#include "chrome/browser/extensions/api/socket/socket_api.h"
#include "chrome/browser/extensions/execute_code_in_tab_function.h"
#include "chrome/browser/extensions/extension_activity_log.h"
@@ -481,6 +482,10 @@ void FactoryRegistry::ResetFunctions() {
// TopSites
RegisterFunction<GetTopSitesFunction>();
+ // Serial
+ RegisterFunction<extensions::SerialOpenFunction>();
+ RegisterFunction<extensions::SerialCloseFunction>();
+
// Sockets
RegisterFunction<extensions::SocketCreateFunction>();
RegisterFunction<extensions::SocketDestroyFunction>();