diff options
author | miket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-18 21:17:53 +0000 |
---|---|---|
committer | miket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-18 21:17:53 +0000 |
commit | 223a93f11d161cd63a6986d8bd81364bae16a600 (patch) | |
tree | f0664542e7519fbb60ec6b29c66a4899dd91e7e2 /chrome/browser/extensions | |
parent | fe600fb29e02b7c6d5c87ecca6d88646ad53d292 (diff) | |
download | chromium_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')
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>(); |