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

Unified Diff: chrome/browser/extensions/api/debugger/debugger_apitest.cc

Issue 910053002: Validate debuggee.targetId before use in chrome.debugger (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments #6 Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/extensions/api/debugger/debugger_api.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/api/debugger/debugger_apitest.cc
diff --git a/chrome/browser/extensions/api/debugger/debugger_apitest.cc b/chrome/browser/extensions/api/debugger/debugger_apitest.cc
index 64dbc1227976cccbaf0d2d55a90f0bf04c3cb58b..0d8185877dca9065fd5f7378edad1dd406f31110 100644
--- a/chrome/browser/extensions/api/debugger/debugger_apitest.cc
+++ b/chrome/browser/extensions/api/debugger/debugger_apitest.cc
@@ -42,6 +42,9 @@ class DebuggerApiTest : public ExtensionApiTest {
base::CommandLine* command_line() const { return command_line_; }
private:
+ testing::AssertionResult RunAttachFunctionOnTarget(
+ const std::string& debuggee_target, const std::string& expected_error);
+
// The command-line for the test process, preserved in order to modify
// mid-test.
base::CommandLine* command_line_;
@@ -72,41 +75,75 @@ testing::AssertionResult DebuggerApiTest::RunAttachFunction(
ui_test_utils::NavigateToURL(browser(), url);
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
+
+ // Attach by tabId.
int tab_id = SessionTabHelper::IdForTab(web_contents);
+ std::string debugee_by_tab = base::StringPrintf("{\"tabId\": %d}", tab_id);
+ testing::AssertionResult result =
+ RunAttachFunctionOnTarget(debugee_by_tab, expected_error);
+ if (!result)
+ return result;
+
+ // Attach by targetId.
+ scoped_refptr<DebuggerGetTargetsFunction> get_targets_function =
+ new DebuggerGetTargetsFunction();
+ scoped_ptr<base::Value> value(
+ extension_function_test_utils::RunFunctionAndReturnSingleResult(
+ get_targets_function.get(), "[]", browser()));
+ base::ListValue* targets = nullptr;
+ EXPECT_TRUE(value->GetAsList(&targets));
+
+ std::string debugger_target_id;
+ for (size_t i = 0; i < targets->GetSize(); ++i) {
+ base::DictionaryValue* target_dict = nullptr;
+ EXPECT_TRUE(targets->GetDictionary(i, &target_dict));
+ int id = -1;
+ if (target_dict->GetInteger("tabId", &id) && id == tab_id) {
+ EXPECT_TRUE(target_dict->GetString("id", &debugger_target_id));
+ break;
+ }
+ }
+ EXPECT_TRUE(!debugger_target_id.empty());
+
+ std::string debugee_by_target_id =
+ base::StringPrintf("{\"targetId\": \"%s\"}", debugger_target_id.c_str());
+ return RunAttachFunctionOnTarget(debugee_by_target_id, expected_error);
+}
+
+testing::AssertionResult DebuggerApiTest::RunAttachFunctionOnTarget(
+ const std::string& debuggee_target, const std::string& expected_error) {
scoped_refptr<DebuggerAttachFunction> attach_function =
new DebuggerAttachFunction();
attach_function->set_extension(extension_.get());
- std::string args = base::StringPrintf("[{\"tabId\": %d}, \"1.1\"]", tab_id);
-
- if (!expected_error.empty()) {
- std::string actual_error =
- extension_function_test_utils::RunFunctionAndReturnError(
- attach_function.get(), args, browser());
- if (actual_error != expected_error) {
- return testing::AssertionFailure() << "Did not get correct error: "
- << "expected: " << expected_error << ", found: " << actual_error;
- }
- } else {
- if (!RunFunction(attach_function.get(),
- args,
- browser(),
- extension_function_test_utils::NONE)) {
- return testing::AssertionFailure() << "Could not run function: "
- << attach_function->GetError();
- }
+ std::string actual_error;
+ if (!RunFunction(attach_function.get(),
+ base::StringPrintf("[%s, \"1.1\"]", debuggee_target.c_str()),
+ browser(),
+ extension_function_test_utils::NONE)) {
+ actual_error = attach_function->GetError();
+ } else {
// Clean up and detach.
scoped_refptr<DebuggerDetachFunction> detach_function =
new DebuggerDetachFunction();
detach_function->set_extension(extension_.get());
if (!RunFunction(detach_function.get(),
- base::StringPrintf("[{\"tabId\": %d}]", tab_id),
+ base::StringPrintf("[%s]", debuggee_target.c_str()),
browser(),
extension_function_test_utils::NONE)) {
- return testing::AssertionFailure() << "Could not detach: "
- << detach_function->GetError();
+ return testing::AssertionFailure() << "Could not detach from "
+ << debuggee_target << " : " << detach_function->GetError();
}
}
+
+ if (expected_error.empty() && !actual_error.empty()) {
+ return testing::AssertionFailure() << "Could not attach to "
+ << debuggee_target << " : " << actual_error;
+ } else if (actual_error != expected_error) {
+ return testing::AssertionFailure() << "Did not get correct error upon "
+ << "attach to " << debuggee_target << " : "
+ << "expected: " << expected_error << ", found: " << actual_error;
+ }
return testing::AssertionSuccess();
}
« no previous file with comments | « chrome/browser/extensions/api/debugger/debugger_api.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698