| Index: chrome/test/live_sync/live_sync_test.cc | 
| diff --git a/chrome/test/live_sync/live_sync_test.cc b/chrome/test/live_sync/live_sync_test.cc | 
| index b609fc251a0f8a0be5c30c8e9679cc265d34035a..52e1311e87b12de76a743f35685e2a82655b808e 100644 | 
| --- a/chrome/test/live_sync/live_sync_test.cc | 
| +++ b/chrome/test/live_sync/live_sync_test.cc | 
| @@ -21,6 +21,7 @@ | 
| #include "chrome/browser/password_manager/encryptor.h" | 
| #include "chrome/browser/profiles/profile.h" | 
| #include "chrome/browser/profiles/profile_manager.h" | 
| +#include "chrome/browser/sync/notifier/p2p_notifier.h" | 
| #include "chrome/browser/sync/profile_sync_service_harness.h" | 
| #include "chrome/browser/ui/browser.h" | 
| #include "chrome/browser/ui/browser_list.h" | 
| @@ -113,8 +114,7 @@ LiveSyncTest::LiveSyncTest(TestType test_type) | 
| server_type_(SERVER_TYPE_UNDECIDED), | 
| num_clients_(-1), | 
| use_verifier_(true), | 
| -      test_server_handle_(base::kNullProcessHandle), | 
| -      enable_notifications_(true) { | 
| +      test_server_handle_(base::kNullProcessHandle) { | 
| InProcessBrowserTest::set_show_window(true); | 
| sync_datatype_helper::AssociateWithTest(this); | 
| switch (test_type_) { | 
| @@ -287,8 +287,7 @@ bool LiveSyncTest::SetupClients() { | 
| EXPECT_FALSE(GetBrowser(i) == NULL) << "GetBrowser(" << i << ") failed."; | 
|  | 
| clients_.push_back( | 
| -        new ProfileSyncServiceHarness(GetProfile(i), username_, password_, | 
| -                                      enable_notifications_)); | 
| +        new ProfileSyncServiceHarness(GetProfile(i), username_, password_)); | 
| EXPECT_FALSE(GetClient(i) == NULL) << "GetClient(" << i << ") failed."; | 
|  | 
| ui_test_utils::WaitForBookmarkModelToLoad( | 
| @@ -407,27 +406,25 @@ bool LiveSyncTest::SetUpLocalPythonTestServer() { | 
| cl->AppendSwitchASCII(switches::kSyncServiceURL, sync_service_url); | 
| VLOG(1) << "Started local python test server at " << sync_service_url; | 
|  | 
| -  if (enable_notifications_) { | 
| -    int xmpp_port = 0; | 
| -    if (!sync_server_.server_data().GetInteger("xmpp_port", &xmpp_port)) { | 
| -      LOG(ERROR) << "Could not find valid xmpp_port value"; | 
| -      return false; | 
| -    } | 
| -    if ((xmpp_port <= 0) || (xmpp_port > kuint16max)) { | 
| -      LOG(ERROR) << "Invalid xmpp port: " << xmpp_port; | 
| -      return false; | 
| -    } | 
| +  int xmpp_port = 0; | 
| +  if (!sync_server_.server_data().GetInteger("xmpp_port", &xmpp_port)) { | 
| +    LOG(ERROR) << "Could not find valid xmpp_port value"; | 
| +    return false; | 
| +  } | 
| +  if ((xmpp_port <= 0) || (xmpp_port > kuint16max)) { | 
| +    LOG(ERROR) << "Invalid xmpp port: " << xmpp_port; | 
| +    return false; | 
| +  } | 
|  | 
| -    net::HostPortPair xmpp_host_port_pair(sync_server_.host_port_pair()); | 
| -    xmpp_host_port_pair.set_port(xmpp_port); | 
| -    xmpp_port_.reset(new net::ScopedPortException(xmpp_port)); | 
| +  net::HostPortPair xmpp_host_port_pair(sync_server_.host_port_pair()); | 
| +  xmpp_host_port_pair.set_port(xmpp_port); | 
| +  xmpp_port_.reset(new net::ScopedPortException(xmpp_port)); | 
|  | 
| -    if (!cl->HasSwitch(switches::kSyncNotificationHost)) { | 
| -      cl->AppendSwitchASCII(switches::kSyncNotificationHost, | 
| -                            xmpp_host_port_pair.ToString()); | 
| -      // The local XMPP server only supports insecure connections. | 
| -      cl->AppendSwitch(switches::kSyncAllowInsecureXmppConnection); | 
| -    } | 
| +  if (!cl->HasSwitch(switches::kSyncNotificationHost)) { | 
| +    cl->AppendSwitchASCII(switches::kSyncNotificationHost, | 
| +                          xmpp_host_port_pair.ToString()); | 
| +    // The local XMPP server only supports insecure connections. | 
| +    cl->AppendSwitch(switches::kSyncAllowInsecureXmppConnection); | 
| } | 
|  | 
| return true; | 
| @@ -526,21 +523,42 @@ bool LiveSyncTest::IsEncrypted(int index, syncable::ModelType type) { | 
| return GetClient(index)->IsTypeEncrypted(type); | 
| } | 
|  | 
| +bool LiveSyncTest::AwaitQuiescence() { | 
| +  return ProfileSyncServiceHarness::AwaitQuiescence(clients()); | 
| +} | 
| + | 
| +bool LiveSyncTest::ServerSupportsNotificationControl() { | 
| +  EXPECT_NE(SERVER_TYPE_UNDECIDED, server_type_); | 
| + | 
| +  // Supported only if we're using the python testserver. | 
| +  return server_type_ == LOCAL_PYTHON_SERVER; | 
| +} | 
| + | 
| void LiveSyncTest::DisableNotifications() { | 
| -  // TODO(akalin): It would be better to assert that the test server | 
| -  // hasn't been started yet.  That would require adding an | 
| -  // IsStarted() method to TestServer. | 
| -  ASSERT_TRUE(profiles_.empty()); | 
| -  ASSERT_TRUE(clients_.empty()); | 
| -  enable_notifications_ = false; | 
| +  ASSERT_TRUE(ServerSupportsNotificationControl()); | 
| +  std::string path = "chromiumsync/disablenotifications"; | 
| +  ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path)); | 
| +  ASSERT_EQ("Notifications disabled", | 
| +            UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle())); | 
| } | 
|  | 
| -bool LiveSyncTest::AwaitQuiescence() { | 
| -  return ProfileSyncServiceHarness::AwaitQuiescence(clients()); | 
| +void LiveSyncTest::TriggerNotification( | 
| +    const syncable::ModelTypeSet& changed_types) { | 
| +  ASSERT_TRUE(ServerSupportsNotificationControl()); | 
| +  const std::string& data = | 
| +      sync_notifier::P2PNotificationData("from_server", | 
| +                                         sync_notifier::NOTIFY_ALL, | 
| +                                         changed_types).ToString(); | 
| +  const std::string& path = | 
| +      std::string("chromiumsync/sendnotification?channel=") + | 
| +      sync_notifier::kSyncP2PNotificationChannel + "&data=" + data; | 
| +  ui_test_utils::NavigateToURL(browser(), sync_server_.GetURL(path)); | 
| +  ASSERT_EQ("Notification sent", | 
| +            UTF16ToASCII(browser()->GetSelectedTabContents()->GetTitle())); | 
| } | 
|  | 
| bool LiveSyncTest::ServerSupportsErrorTriggering() { | 
| -  EXPECT_TRUE(server_type_ != SERVER_TYPE_UNDECIDED); | 
| +  EXPECT_NE(SERVER_TYPE_UNDECIDED, server_type_); | 
|  | 
| // Supported only if we're using the python testserver. | 
| return server_type_ == LOCAL_PYTHON_SERVER; | 
|  |