local_discovery_ui_browsertest.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/basictypes.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/bind.h" 7b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/callback.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 9a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/compiler_specific.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/message_loop/message_loop.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/local_discovery/test_service_discovery_client.h" 13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/signin/profile_oauth2_token_service.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/signin/signin_manager.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_base.h" 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/common/url_constants.h" 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/test/base/ui_test_utils.h" 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/test/base/web_ui_browsertest.h" 24a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "google_apis/gaia/gaia_urls.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/http/http_status_code.h" 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h" 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/url_request/url_request_status.h" 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/url_request/url_request_test_util.h" 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using testing::InvokeWithoutArgs; 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using testing::Return; 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using testing::AtLeast; 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using testing::DoDefault; 39a3f7b4e666c476898878fa745f637129375cd889Ben Murdochusing testing::DoAll; 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing testing::InSequence; 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)using testing::StrictMock; 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using testing::AnyNumber; 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using testing::InvokeWithoutArgs; 458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)using testing::Return; 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using testing::AtLeast; 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace local_discovery { 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace { 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 52a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const uint8 kQueryData[] = { 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Header 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 0x00, 0x00, 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 0x00, 0x00, // Flags not set. 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 0x00, 0x01, // Set QDCOUNT (question count) to 1, all the 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // rest are 0 for a query. 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 0x00, 0x00, 59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 0x00, 0x00, 60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 0x00, 0x00, 61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Question 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't', 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x04, '_', 't', 'c', 'p', 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x05, 'l', 'o', 'c', 'a', 'l', 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0x00, 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0x00, 0x0c, // QTYPE: A query. 6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 0x00, 0x01, // QCLASS: IN class. Unicast bit not set. 7068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}; 7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const uint8 kAnnouncePacket[] = { 7368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Header 7468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 0x00, 0x00, // ID is zeroed out 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x80, 0x00, // Standard query response, no error 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x00, 0x00, // No questions (for simplicity) 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x00, 0x05, // 5 RR (answers) 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x00, 0x00, // 0 authority RRs 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x00, 0x00, // 0 additional RRs 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't', 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x04, '_', 't', 'c', 'p', 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x05, 'l', 'o', 'c', 'a', 'l', 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 0x00, 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 0x00, 0x0c, // TYPE is PTR. 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 0x00, 0x01, // CLASS is IN. 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 0x00, 0x00, // TTL (4 bytes) is 32768 second. 8868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 0x10, 0x00, 8968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 0x00, 0x0c, // RDLENGTH is 12 bytes. 907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0xc0, 0x0c, 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 0xc0, 0x0c, 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 0x00, 0x10, // TYPE is TXT. 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 0x00, 0x01, // CLASS is IN. 977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x00, 0x00, // TTL (4 bytes) is 32768 seconds. 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x01, 0x00, 991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x00, 0x34, // RDLENGTH is 69 bytes. 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x03, 'i', 'd', '=', 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x10, 't', 'y', '=', 'S', 'a', 'm', 'p', 'l', 'e', ' ', 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 'd', 'e', 'v', 'i', 'c', 'e', 103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0x1e, 'n', 'o', 't', 'e', '=', 104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 'S', 'a', 'm', 'p', 'l', 'e', ' ', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'i', 'o', 'n', 1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 1088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 0xc0, 0x0c, 1098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 0x00, 0x21, // Type is SRV 1108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 0x00, 0x01, // CLASS is IN 1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x00, 0x00, // TTL (4 bytes) is 32768 second. 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x10, 0x00, 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 0x00, 0x17, // RDLENGTH is 23 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x00, 0x00, 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x00, 0x00, 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x22, 0xb8, // port 8888 1178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 1188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 0x05, 'l', 'o', 'c', 'a', 'l', 1198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 0x00, 1208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x05, 'l', 'o', 'c', 'a', 'l', 1237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x00, 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0x00, 0x01, // Type is A 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0x00, 0x01, // CLASS is IN 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0x00, 0x00, // TTL (4 bytes) is 32768 second. 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0x10, 0x00, 1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x00, 0x04, // RDLENGTH is 4 1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x01, 0x02, 0x03, 0x04, // 1.2.3.4 1307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0x05, 'l', 'o', 'c', 'a', 'l', 133424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 0x00, 134ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 0x00, 0x1C, // Type is AAAA 135ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 0x00, 0x01, // CLASS is IN 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 0x00, 0x00, // TTL (4 bytes) is 32768 second. 137a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 0x10, 0x00, 138a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 0x00, 0x10, // RDLENGTH is 16 139a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 0x01, 0x02, 0x03, 0x04, // 1.2.3.4 1407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x01, 0x02, 0x03, 0x04, 141424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 0x01, 0x02, 0x03, 0x04, 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0x01, 0x02, 0x03, 0x04, 1437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const uint8 kGoodbyePacket[] = { 14790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Header 1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x00, 0x00, // ID is zeroed out 1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x80, 0x00, // Standard query response, RA, no error 1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x00, 0x00, // No questions (for simplicity) 1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x00, 0x02, // 1 RR (answers) 1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x00, 0x00, // 0 authority RRs 1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x00, 0x00, // 0 additional RRs 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't', 1561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x04, '_', 't', 'c', 'p', 1571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x05, 'l', 'o', 'c', 'a', 'l', 1581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x00, 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0x00, 0x0c, // TYPE is PTR. 1601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x00, 0x01, // CLASS is IN. 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0x00, 0x00, // TTL (4 bytes) is 0 seconds. 1621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x00, 0x00, 1631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x00, 0x0c, // RDLENGTH is 12 bytes. 1641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 1651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0xc0, 0x0c, 1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xc0, 0x0c, 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 0x00, 0x21, // Type is SRV 1713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 0x00, 0x01, // CLASS is IN 1721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x00, 0x00, // TTL (4 bytes) is 0 seconds. 1733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 0x00, 0x00, 1743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 0x00, 0x17, // RDLENGTH is 23 1753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 0x00, 0x00, 1763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 0x00, 0x00, 177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x22, 0xb8, // port 8888 1781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 1791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x05, 'l', 'o', 'c', 'a', 'l', 1801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x00, 1813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 1823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)const uint8 kAnnouncePacketRegistered[] = { 1841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Header 185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0x00, 0x00, // ID is zeroed out 186c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 0x80, 0x00, // Standard query response, RA, no error 1871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x00, 0x00, // No questions (for simplicity) 1881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x00, 0x01, // 1 RR (answers) 1891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 0x00, 0x00, // 0 authority RRs 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0x00, 0x00, // 0 additional RRs 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 193a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't', 1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 0x04, '_', 't', 'c', 'p', 1957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0x05, 'l', 'o', 'c', 'a', 'l', 196a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 0x00, 197a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 0x00, 0x10, // TYPE is TXT. 198a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 0x00, 0x01, // CLASS is IN. 199a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 0x00, 0x00, // TTL (4 bytes) is 32768 seconds. 200a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 0x01, 0x00, 201a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 0x00, 0x3b, // RDLENGTH is 76 bytes. 202a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 0x0a, 'i', 'd', '=', 's', 'o', 'm', 'e', '_', 'i', 'd', 203a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 0x10, 't', 'y', '=', 'S', 'a', 'm', 'p', 'l', 'e', ' ', 204a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 'd', 'e', 'v', 'i', 'c', 'e', 205a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 0x1e, 'n', 'o', 't', 'e', '=', 206a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 'S', 'a', 'm', 'p', 'l', 'e', ' ', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 207a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'i', 'o', 'n', 208a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}; 209a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 210a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst char kResponseInfo[] = "{" 211a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " \"x-privet-token\" : \"MyPrivetToken\"" 212a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "}"; 213a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 214a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst char kResponseInfoWithID[] = "{" 2150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch " \"x-privet-token\" : \"MyPrivetToken\"," 2160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch " \"id\" : \"my_id\"" 2170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "}"; 218a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 219a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst char kResponseRegisterStart[] = "{" 2207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) " \"action\": \"start\"," 221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) " \"user\": \"user@host.com\"" 222a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "}"; 223a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 224a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst char kResponseRegisterClaimTokenNoConfirm[] = "{" 225a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " \"action\": \"getClaimToken\"," 226a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " \"user\": \"user@host.com\"," 227a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " \"error\": \"pending_user_action\"," 228a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " \"timeout\": 1" 229a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "}"; 230a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 231a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst char kResponseRegisterClaimTokenConfirm[] = "{" 232a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch " \"action\": \"getClaimToken\"," 233a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) " \"user\": \"user@host.com\"," 234ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " \"token\": \"MySampleToken\"," 235a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) " \"claim_url\": \"http://someurl.com/\"" 236a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "}"; 237a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 238a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kResponseCloudPrintConfirm[] = "{ \"success\": true }"; 239ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 240ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochconst char kResponseRegisterComplete[] = "{" 241ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " \"action\": \"complete\"," 242ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " \"user\": \"user@host.com\"," 243ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch " \"device_id\": \"my_id\"" 244ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "}"; 245ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 24658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char kResponseGaiaToken[] = "{" 24758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) " \"access_token\": \"at1\"," 24858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) " \"expires_in\": 3600," 24958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) " \"token_type\": \"Bearer\"" 25058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "}"; 25158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 25258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char kResponseGaiaId[] = "{" 25358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) " \"id\": \"12345\"" 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "}"; 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 256a3f7b4e666c476898878fa745f637129375cd889Ben Murdochconst char kURLInfo[] = "http://1.2.3.4:8888/privet/info"; 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 258a3f7b4e666c476898878fa745f637129375cd889Ben Murdochconst char kURLRegisterStart[] = 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "http://1.2.3.4:8888/privet/register?action=start&user=user%40host.com"; 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 261a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kURLRegisterClaimToken[] = 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "http://1.2.3.4:8888/privet/register?action=getClaimToken&" 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "user=user%40host.com"; 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kURLCloudPrintConfirm[] = 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "https://www.google.com/cloudprint/confirm?token=MySampleToken"; 267a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 2683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const char kURLRegisterComplete[] = 2693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "http://1.2.3.4:8888/privet/register?action=complete&user=user%40host.com"; 270a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 271a3f7b4e666c476898878fa745f637129375cd889Ben Murdochconst char kURLGaiaToken[] = 272424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "https://accounts.google.com/o/oauth2/token"; 273424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 274a3f7b4e666c476898878fa745f637129375cd889Ben Murdochconst char kSampleUser[] = "user@host.com"; 275a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 2763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class TestMessageLoopCondition { 277424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public: 278a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch TestMessageLoopCondition() : signaled_(false), 279a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch waiting_(false) { 280a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch } 2818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ~TestMessageLoopCondition() { 2838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 2848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Signal a waiting method that it can continue executing. 2868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void Signal() { 287a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch signaled_ = true; 288424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (waiting_) 289a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::MessageLoop::current()->Quit(); 290a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch } 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 292a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // Pause execution and recursively run the message loop until |Signal()| is 293a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // called. Do not pause if |Signal()| has already been called. 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void Wait() { 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) while (!signaled_) { 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) waiting_ = true; 2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoop::current()->Run(); 2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) waiting_ = false; 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) signaled_ = false; 301a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch } 302a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 303a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch private: 304a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch bool signaled_; 305a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch bool waiting_; 306a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 307a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch DISALLOW_COPY_AND_ASSIGN(TestMessageLoopCondition); 3088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}; 3098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class MockableFakeURLFetcherCreator { 3118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public: 312a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch MockableFakeURLFetcherCreator() { 313a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch } 3140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 3150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ~MockableFakeURLFetcherCreator() { 3160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 3170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 3180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch MOCK_METHOD1(OnCreateFakeURLFetcher, void(const std::string& url)); 3190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 3200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<net::FakeURLFetcher> CreateFakeURLFetcher( 3210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const GURL& url, 3220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch net::URLFetcherDelegate* delegate, 3230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const std::string& response_data, 3240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch net::HttpStatusCode response_code, 3250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch net::URLRequestStatus::Status status) { 3260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch OnCreateFakeURLFetcher(url.spec()); 3270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return scoped_ptr<net::FakeURLFetcher>(new net::FakeURLFetcher( 3280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch url, delegate, response_data, response_code, status)); 3290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 3300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 3310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch net::FakeURLFetcherFactory::FakeURLFetcherCreator callback() { 3320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return base::Bind(&MockableFakeURLFetcherCreator::CreateFakeURLFetcher, 3330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::Unretained(this)); 3340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 3350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}; 3360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 3370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass LocalDiscoveryUITest : public WebUIBrowserTest { 3380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public: 3390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch LocalDiscoveryUITest() : fake_fetcher_factory_( 3400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch &fetcher_impl_factory_, 3410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch fake_url_fetcher_creator_.callback()) { 3420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 343424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual ~LocalDiscoveryUITest() { 3447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 345424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 34658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 3477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WebUIBrowserTest::SetUpOnMainThread(); 3481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) test_service_discovery_client_ = new TestServiceDiscoveryClient(); 3507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_service_discovery_client_->Start(); 351424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_CALL(*test_service_discovery_client_, OnSendTo( 352bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch std::string((const char*)kQueryData, 353424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) sizeof(kQueryData)))) 354bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch .Times(AtLeast(2)) 355bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch .WillOnce(InvokeWithoutArgs(&condition_devices_listed_, 356c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch &TestMessageLoopCondition::Signal)) 3577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) .WillRepeatedly(Return()); 358bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 359bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch SigninManagerBase* signin_manager = 360424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SigninManagerFactory::GetForProfile(browser()->profile()); 361424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 362c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_CHROMEOS) 3637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Chrome OS initializes prefs::kGoogleServicesUsername to "stub user" so 364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // we need to override it as well. 365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->profile()->GetPrefs()-> 3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetString(prefs::kGoogleServicesUsername, kSampleUser); 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(signin_manager); 3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) signin_manager->SetAuthenticatedUsername(kSampleUser); 3707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 371424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) fake_fetcher_factory().SetFakeResponse( 3727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GURL(kURLInfo), 3730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch kResponseInfo, 37458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) net::HTTP_OK, 3750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch net::URLRequestStatus::SUCCESS); 3767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) fake_fetcher_factory().SetFakeResponse( 3787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GURL(kURLRegisterStart), 3797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kResponseRegisterStart, 3807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::HTTP_OK, 3817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::URLRequestStatus::SUCCESS); 3827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) fake_fetcher_factory().SetFakeResponse( 3847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GURL(kURLRegisterClaimToken), 3857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kResponseRegisterClaimTokenNoConfirm, 3867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::HTTP_OK, 3877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::URLRequestStatus::SUCCESS); 38858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) fake_fetcher_factory().SetFakeResponse( 3904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GURL(kURLCloudPrintConfirm), 3914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kResponseCloudPrintConfirm, 3924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) net::HTTP_OK, 3934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) net::URLRequestStatus::SUCCESS); 3947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 395a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch fake_fetcher_factory().SetFakeResponse( 396a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch GURL(kURLRegisterComplete), 3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kResponseRegisterComplete, 398a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch net::HTTP_OK, 399a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch net::URLRequestStatus::SUCCESS); 400a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 401a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch fake_fetcher_factory().SetFakeResponse( 402a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch GURL(kURLGaiaToken), 403a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch kResponseGaiaToken, 4047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::HTTP_OK, 4057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::URLRequestStatus::SUCCESS); 4067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(fake_url_fetcher_creator(), OnCreateFakeURLFetcher( 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kURLGaiaToken)) 4093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) .Times(AnyNumber()); 410a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 411a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch fake_fetcher_factory().SetFakeResponse( 4123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GaiaUrls::GetInstance()->oauth_user_info_url(), 4131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kResponseGaiaId, 414a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch net::HTTP_OK, 4153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) net::URLRequestStatus::SUCCESS); 4161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_CALL(fake_url_fetcher_creator(), OnCreateFakeURLFetcher( 4185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GaiaUrls::GetInstance()->oauth_user_info_url().spec())) 4195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .Times(AnyNumber()); 4205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ProfileOAuth2TokenService* token_service = 4221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetForProfile(browser()->profile()); 423a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 424a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) token_service->UpdateCredentials("user@host.com", "MyFakeToken"); 425a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddLibrary(base::FilePath(FILE_PATH_LITERAL("local_discovery_ui_test.js"))); 427a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 428a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 429a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 430a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WebUIBrowserTest::SetUpCommandLine(command_line); 4311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void RunFor(base::TimeDelta time_period) { 434a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::CancelableCallback<void()> callback(base::Bind( 4351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &base::MessageLoop::Quit, base::Unretained( 4367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::MessageLoop::current()))); 4377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 4387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FROM_HERE, callback.callback(), time_period); 4397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::MessageLoop::current()->Run(); 4417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) callback.Cancel(); 442424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 443424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 444424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) TestServiceDiscoveryClient* test_service_discovery_client() { 4457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return test_service_discovery_client_.get(); 4467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 447a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 4487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TestMessageLoopCondition& condition_devices_listed() { 449424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return condition_devices_listed_; 4507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 451a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 452a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch net::FakeURLFetcherFactory& fake_fetcher_factory() { 4537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return fake_fetcher_factory_; 4547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockableFakeURLFetcherCreator& fake_url_fetcher_creator() { 4577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return fake_url_fetcher_creator_; 4587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private: 461ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_refptr<TestServiceDiscoveryClient> test_service_discovery_client_; 4627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TestMessageLoopCondition condition_devices_listed_; 4637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::URLFetcherImplFactory fetcher_impl_factory_; 4657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) StrictMock<MockableFakeURLFetcherCreator> fake_url_fetcher_creator_; 4667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) net::FakeURLFetcherFactory fake_fetcher_factory_; 4677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(LocalDiscoveryUITest); 4697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 4700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 4717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(LocalDiscoveryUITest, EmptyTest) { 4727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL( 4737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) chrome::kChromeUIDevicesURL)); 4747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) condition_devices_listed().Wait(); 4757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(WebUIBrowserTest::RunJavascriptTest("checkNoDevices")); 4767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 4777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(LocalDiscoveryUITest, AddRowTest) { 4797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL( 4807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) chrome::kChromeUIDevicesURL)); 4817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) condition_devices_listed().Wait(); 482ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_service_discovery_client()->SimulateReceive( 4847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kAnnouncePacket, sizeof(kAnnouncePacket)); 4857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 487eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(WebUIBrowserTest::RunJavascriptTest("checkOneDevice")); 4897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_service_discovery_client()->SimulateReceive( 4917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kGoodbyePacket, sizeof(kGoodbyePacket)); 4927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) RunFor(base::TimeDelta::FromMilliseconds(1100)); 4940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 4957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(WebUIBrowserTest::RunJavascriptTest("checkNoDevices")); 4967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 4977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(LocalDiscoveryUITest, RegisterTest) { 5000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch TestMessageLoopCondition condition_token_claimed; 5017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL( 5037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) chrome::kChromeUIDevicesURL)); 5047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) condition_devices_listed().Wait(); 5057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_service_discovery_client()->SimulateReceive( 5077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kAnnouncePacket, sizeof(kAnnouncePacket)); 5087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 5107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 511424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(WebUIBrowserTest::RunJavascriptTest("checkOneDevice")); 512424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 5135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(WebUIBrowserTest::RunJavascriptTest("registerShowOverlay")); 5145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 515424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { 516424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) InSequence s; 5177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(fake_url_fetcher_creator(), OnCreateFakeURLFetcher(kURLInfo)); 5187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(fake_url_fetcher_creator(), OnCreateFakeURLFetcher( 5191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kURLRegisterStart)); 5203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_CALL(fake_url_fetcher_creator(), OnCreateFakeURLFetcher( 5213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) kURLRegisterClaimToken)) 522c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch .WillOnce(InvokeWithoutArgs(&condition_token_claimed, 523c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch &TestMessageLoopCondition::Signal)); 5243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 5253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 5263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(WebUIBrowserTest::RunJavascriptTest("registerBegin")); 5273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 5283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) condition_token_claimed.Wait(); 5297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(WebUIBrowserTest::RunJavascriptTest("expectPageAdding1")); 5311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 532424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) fake_fetcher_factory().SetFakeResponse( 533424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) GURL(kURLRegisterClaimToken), 5341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kResponseRegisterClaimTokenConfirm, 53523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) net::HTTP_OK, 5361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) net::URLRequestStatus::SUCCESS); 5374ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 5384ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch fake_fetcher_factory().SetFakeResponse( 5397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GURL(kURLInfo), 540ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kResponseInfoWithID, 541c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch net::HTTP_OK, 542c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch net::URLRequestStatus::SUCCESS); 543ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 544ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch { 545ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch InSequence s; 546c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_CALL(fake_url_fetcher_creator(), OnCreateFakeURLFetcher( 547c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch kURLRegisterClaimToken)); 548ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_CALL(fake_url_fetcher_creator(), OnCreateFakeURLFetcher( 549558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch kURLCloudPrintConfirm)); 550558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_CALL(fake_url_fetcher_creator(), OnCreateFakeURLFetcher( 5513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) kURLRegisterComplete)); 5527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(fake_url_fetcher_creator(), OnCreateFakeURLFetcher(kURLInfo)) 5533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) .WillOnce(InvokeWithoutArgs(&condition_token_claimed, 5547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &TestMessageLoopCondition::Signal)); 5557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 556a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 557a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch condition_token_claimed.Wait(); 5587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 559a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) test_service_discovery_client()->SimulateReceive( 560c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch kAnnouncePacketRegistered, sizeof(kAnnouncePacketRegistered)); 561a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 563ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 564ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_TRUE(WebUIBrowserTest::RunJavascriptTest("expectRegisterDone")); 5657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 567a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace 5687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace local_discovery 5707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)