Commit 44f81e6b authored by Alex Chau's avatar Alex Chau Committed by Commit Bot

Return SYNC_NETWORK_ERROR in SharingMessageBridge when offline

Bug: 1048704
Change-Id: I29dacfd0d0b0b0f4231160decb82f4ee4099922f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2036184
Commit-Queue: Alex Chau <alexchau@chromium.org>
Reviewed-by: default avatarvitaliii <vitaliii@chromium.org>
Reviewed-by: default avatarMarc Treib <treib@chromium.org>
Cr-Commit-Position: refs/heads/master@{#738930}
parent c93fad09
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "components/sync/model/metadata_batch.h" #include "components/sync/model/metadata_batch.h"
#include "components/sync/model/mutable_data_batch.h" #include "components/sync/model/mutable_data_batch.h"
#include "components/sync/model_impl/dummy_metadata_change_list.h" #include "components/sync/model_impl/dummy_metadata_change_list.h"
#include "net/base/network_change_notifier.h"
namespace { namespace {
...@@ -60,6 +61,16 @@ void SharingMessageBridgeImpl::SendSharingMessage( ...@@ -60,6 +61,16 @@ void SharingMessageBridgeImpl::SendSharingMessage(
ReplyToCallback(std::move(on_commit_callback), sync_disabled_error_message); ReplyToCallback(std::move(on_commit_callback), sync_disabled_error_message);
return; return;
} }
if (net::NetworkChangeNotifier::GetConnectionType() ==
net::NetworkChangeNotifier::CONNECTION_NONE) {
sync_pb::SharingMessageCommitError network_error_message;
network_error_message.set_error_code(
sync_pb::SharingMessageCommitError::SYNC_NETWORK_ERROR);
ReplyToCallback(std::move(on_commit_callback), network_error_message);
return;
}
std::unique_ptr<syncer::MetadataChangeList> metadata_change_list = std::unique_ptr<syncer::MetadataChangeList> metadata_change_list =
CreateMetadataChangeList(); CreateMetadataChangeList();
// Fill in the internal message id with unique generated identifier. // Fill in the internal message id with unique generated identifier.
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "components/sync/model/metadata_batch.h" #include "components/sync/model/metadata_batch.h"
#include "components/sync/model/metadata_change_list.h" #include "components/sync/model/metadata_change_list.h"
#include "components/sync/model/mock_model_type_change_processor.h" #include "components/sync/model/mock_model_type_change_processor.h"
#include "net/base/network_change_notifier.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -38,6 +39,16 @@ MATCHER_P(HasErrorCode, expected_error_code, "") { ...@@ -38,6 +39,16 @@ MATCHER_P(HasErrorCode, expected_error_code, "") {
return arg.error_code() == expected_error_code; return arg.error_code() == expected_error_code;
} }
// Fake NetworkChangeNotifier to simulate being offline. NetworkChangeNotifier
// is a singleton, so making this instance will apply globally.
class OfflineNetworkChangeNotifier : public net::NetworkChangeNotifier {
public:
// net::NetworkChangeNotifier:
ConnectionType GetCurrentConnectionType() const override {
return NetworkChangeNotifier::CONNECTION_NONE;
}
};
class SharingMessageBridgeTest : public testing::Test { class SharingMessageBridgeTest : public testing::Test {
protected: protected:
SharingMessageBridgeTest() { SharingMessageBridgeTest() {
...@@ -179,6 +190,24 @@ TEST_F(SharingMessageBridgeTest, ShouldInvokeCallbackIfSyncIsDisabled) { ...@@ -179,6 +190,24 @@ TEST_F(SharingMessageBridgeTest, ShouldInvokeCallbackIfSyncIsDisabled) {
SharingMessageCommitError::SYNC_TURNED_OFF, 1); SharingMessageCommitError::SYNC_TURNED_OFF, 1);
} }
TEST_F(SharingMessageBridgeTest, ShouldInvokeCallbackWithErrorOffline) {
OfflineNetworkChangeNotifier network_change_notifier;
base::HistogramTester histogram_tester;
EXPECT_CALL(*processor(), Put).Times(0);
base::MockCallback<SharingMessageBridge::CommitFinishedCallback> callback;
EXPECT_CALL(callback,
Run(HasErrorCode(
sync_pb::SharingMessageCommitError::SYNC_NETWORK_ERROR)));
bridge()->SendSharingMessage(CreateSpecifics("test_payload"), callback.Get());
EXPECT_EQ(bridge()->GetCallbacksCountForTesting(), 0u);
histogram_tester.ExpectUniqueSample(
"Sync.SharingMessage.CommitResult",
sync_pb::SharingMessageCommitError::SYNC_NETWORK_ERROR, 1);
}
TEST_F(SharingMessageBridgeTest, ShouldInvokeCallbackOnSyncStoppedEvent) { TEST_F(SharingMessageBridgeTest, ShouldInvokeCallbackOnSyncStoppedEvent) {
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
base::MockCallback<SharingMessageBridge::CommitFinishedCallback> callback; base::MockCallback<SharingMessageBridge::CommitFinishedCallback> callback;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment