Merge pull request #311 from morphis/f/check-for-valid-launch-intent
Ensure that we have an valid intent before we launch it
This commit is contained in:
commit
91a338ae27
6 changed files with 46 additions and 0 deletions
|
|
@ -21,6 +21,12 @@
|
||||||
|
|
||||||
namespace anbox {
|
namespace anbox {
|
||||||
namespace android {
|
namespace android {
|
||||||
|
bool Intent::valid() const {
|
||||||
|
// At the moment we only support component+package for intents
|
||||||
|
// (see android/service/android_api_skeleton.cpp for more details)
|
||||||
|
return !(component.empty() && package.empty());
|
||||||
|
}
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &out, const Intent &intent) {
|
std::ostream &operator<<(std::ostream &out, const Intent &intent) {
|
||||||
out << "[";
|
out << "[";
|
||||||
if (!intent.action.empty())
|
if (!intent.action.empty())
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,8 @@ struct Intent {
|
||||||
std::string package;
|
std::string package;
|
||||||
std::string component;
|
std::string component;
|
||||||
std::vector<std::string> categories;
|
std::vector<std::string> categories;
|
||||||
|
|
||||||
|
bool valid() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &out, const Intent &intent);
|
std::ostream &operator<<(std::ostream &out, const Intent &intent);
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,11 @@ anbox::cmds::Launch::Launch()
|
||||||
stack_));
|
stack_));
|
||||||
|
|
||||||
action([this](const cli::Command::Context&) {
|
action([this](const cli::Command::Context&) {
|
||||||
|
if (!intent_.valid()) {
|
||||||
|
ERROR("The intent you provided is invalid. Please provide a correct launch intent.");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
auto trap = core::posix::trap_signals_for_process({core::posix::Signal::sig_term, core::posix::Signal::sig_int});
|
auto trap = core::posix::trap_signals_for_process({core::posix::Signal::sig_term, core::posix::Signal::sig_int});
|
||||||
trap->signal_raised().connect([trap](const core::posix::Signal& signal) {
|
trap->signal_raised().connect([trap](const core::posix::Signal& signal) {
|
||||||
INFO("Signal %i received. Good night.", static_cast<int>(signal));
|
INFO("Signal %i received. Good night.", static_cast<int>(signal));
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
add_subdirectory(android)
|
||||||
add_subdirectory(support)
|
add_subdirectory(support)
|
||||||
add_subdirectory(common)
|
add_subdirectory(common)
|
||||||
add_subdirectory(graphics)
|
add_subdirectory(graphics)
|
||||||
|
|
|
||||||
1
tests/anbox/android/CMakeLists.txt
Normal file
1
tests/anbox/android/CMakeLists.txt
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
ANBOX_ADD_TEST(intent_tests intent_tests.cpp)
|
||||||
31
tests/anbox/android/intent_tests.cpp
Normal file
31
tests/anbox/android/intent_tests.cpp
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 Simon Fels <morphis@gravedo.de>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 3, as published
|
||||||
|
* by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranties of
|
||||||
|
* MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "anbox/android/intent.h"
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
TEST(Intent, IsValid) {
|
||||||
|
anbox::android::Intent intent;
|
||||||
|
ASSERT_FALSE(intent.valid());
|
||||||
|
intent.component = "foo";
|
||||||
|
ASSERT_TRUE(intent.valid());
|
||||||
|
intent.package = "bla";
|
||||||
|
ASSERT_TRUE(intent.valid());
|
||||||
|
intent.component = "";
|
||||||
|
ASSERT_TRUE(intent.valid());
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue