update_client: refactor the parsing and serializing of XML.
This is a mechanical change.
It introduces ProtocolParser and ProtocolSerializer abstract classes
to allow different protocols in the future. Only the XML implementation
of these classes is provided in this changelist.
Bug: 848505
Change-Id: I4bda0f92f5b676f0f0eaca7dc841c8dca9c282ad
Reviewed-on: https://chromium-review.googlesource.com/c/1278476
Commit-Queue: Sorin Jianu <[email protected]>
Reviewed-by: Joshua Pawlicki <[email protected]>
Cr-Commit-Position: refs/heads/master@{#599366}
diff --git a/components/update_client/update_client_unittest.cc b/components/update_client/update_client_unittest.cc
index 8f1da0f0..43ec49e 100644
--- a/components/update_client/update_client_unittest.cc
+++ b/components/update_client/update_client_unittest.cc
@@ -111,14 +111,14 @@
const std::vector<PingData>& ping_data() const;
- const std::vector<std::string>& events() const;
+ const std::vector<base::Value>& events() const;
protected:
~MockPingManagerImpl() override;
private:
std::vector<PingData> ping_data_;
- std::vector<std::string> events_;
+ std::vector<base::Value> events_;
DISALLOW_COPY_AND_ASSIGN(MockPingManagerImpl);
};
@@ -141,8 +141,7 @@
ping_data.diff_update_failed = component.diff_update_failed();
ping_data_.push_back(ping_data);
- const auto& events = component.events();
- events_.insert(events_.end(), events.begin(), events.end());
+ events_ = component.GetEvents();
std::move(callback).Run(0, "");
}
@@ -152,7 +151,7 @@
return ping_data_;
}
-const std::vector<std::string>& MockPingManagerImpl::events() const {
+const std::vector<base::Value>& MockPingManagerImpl::events() const {
return events_;
}
@@ -3465,12 +3464,12 @@
R"( status="error-foobarApp"/>)"
R"(</response>)";
- ProtocolParser parser;
- EXPECT_TRUE(parser.Parse(update_response));
+ const auto parser = ProtocolParser::Create();
+ EXPECT_TRUE(parser->Parse(update_response));
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
- base::BindOnce(std::move(update_check_callback), parser.results(),
+ base::BindOnce(std::move(update_check_callback), parser->results(),
ErrorCategory::kNone, 0, 0));
}
};
@@ -3706,23 +3705,40 @@
protected:
~MockPingManager() override {
- const auto& events = MockPingManagerImpl::events();
- EXPECT_EQ(3u, events.size());
- EXPECT_STREQ(
- "<event eventtype=\"14\" eventresult=\"1\" downloader=\"unknown\" "
- "url=\"http://localhost/download/"
- "runaction_test_win.crx3\" downloaded=\"1843\" "
- "total=\"1843\" download_time_ms=\"1000\" previousversion=\"0.0\" "
- "nextversion=\"1.0\"/>",
- events[0].c_str());
- EXPECT_STREQ(
- "<event eventtype=\"42\" eventresult=\"1\" "
- "errorcode=\"1877345072\"/>",
- events[1].c_str());
- EXPECT_STREQ(
- "<event eventtype=\"3\" eventresult=\"1\" previousversion=\"0.0\" "
- "nextversion=\"1.0\"/>",
- events[2].c_str());
+ EXPECT_EQ(3u, events().size());
+
+ /*
+ "<event eventtype="14" eventresult="1" downloader="unknown" "
+ "url="http://localhost/download/runaction_test_win.crx3"
+ "downloaded="1843" "
+ "total="1843" download_time_ms="1000" previousversion="0.0" "
+ "nextversion="1.0"/>"
+ */
+ const auto& event0 = events()[0];
+ EXPECT_EQ(14, event0.FindKey("eventtype")->GetInt());
+ EXPECT_EQ(1, event0.FindKey("eventresult")->GetInt());
+ EXPECT_EQ("unknown", event0.FindKey("downloader")->GetString());
+ EXPECT_EQ("http://localhost/download/runaction_test_win.crx3",
+ event0.FindKey("url")->GetString());
+ EXPECT_EQ("1843", event0.FindKey("downloaded")->GetString());
+ EXPECT_EQ("1843", event0.FindKey("total")->GetString());
+ EXPECT_EQ("1000", event0.FindKey("download_time_ms")->GetString());
+ EXPECT_EQ("0.0", event0.FindKey("previousversion")->GetString());
+ EXPECT_EQ("1.0", event0.FindKey("nextversion")->GetString());
+
+ // "<event eventtype="42" eventresult="1" errorcode="1877345072"/>"
+ const auto& event1 = events()[1];
+ EXPECT_EQ(42, event1.FindKey("eventtype")->GetInt());
+ EXPECT_EQ(1, event1.FindKey("eventresult")->GetInt());
+ EXPECT_EQ(1877345072, event1.FindKey("errorcode")->GetInt());
+
+ // "<event eventtype=\"3\" eventresult=\"1\" previousversion=\"0.0\" "
+ // "nextversion=\"1.0\"/>",
+ const auto& event2 = events()[2];
+ EXPECT_EQ(3, event2.FindKey("eventtype")->GetInt());
+ EXPECT_EQ(1, event1.FindKey("eventresult")->GetInt());
+ EXPECT_EQ("0.0", event0.FindKey("previousversion")->GetString());
+ EXPECT_EQ("1.0", event0.FindKey("nextversion")->GetString());
}
};
@@ -3826,12 +3842,13 @@
protected:
~MockPingManager() override {
- const auto& events = MockPingManagerImpl::events();
- EXPECT_EQ(1u, events.size());
- EXPECT_STREQ(
- "<event eventtype=\"42\" eventresult=\"1\" "
- "errorcode=\"1877345072\"/>",
- events[0].c_str());
+ EXPECT_EQ(1u, events().size());
+
+ // "<event eventtype="42" eventresult="1" errorcode="1877345072"/>"
+ const auto& event = events()[0];
+ EXPECT_EQ(42, event.FindKey("eventtype")->GetInt());
+ EXPECT_EQ(1, event.FindKey("eventresult")->GetInt());
+ EXPECT_EQ(1877345072, event.FindKey("errorcode")->GetInt());
}
};