| Index: build/android/pylib/fake_dns.py
 | 
| diff --git a/build/android/pylib/fake_dns.py b/build/android/pylib/fake_dns.py
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..4079c31df74a32bf1fcba9ba2a8e547dee598ffe
 | 
| --- /dev/null
 | 
| +++ b/build/android/pylib/fake_dns.py
 | 
| @@ -0,0 +1,61 @@
 | 
| +# Copyright (c) 2012 The Chromium Authors. All rights reserved.
 | 
| +# Use of this source code is governed by a BSD-style license that can be
 | 
| +# found in the LICENSE file.
 | 
| +
 | 
| +import android_commands
 | 
| +import constants
 | 
| +import logging
 | 
| +import os
 | 
| +import subprocess
 | 
| +import time
 | 
| +
 | 
| +
 | 
| +class FakeDns(object):
 | 
| +  """Wrapper class for the fake_dns tool."""
 | 
| +  _FAKE_DNS_PATH = '/data/local/tmp/fake_dns'
 | 
| +
 | 
| +  def __init__(self, adb):
 | 
| +    """
 | 
| +      Args:
 | 
| +        adb: the AndroidCommands to use.
 | 
| +    """
 | 
| +    self._adb = adb
 | 
| +    self._fake_dns = None
 | 
| +    self._original_dns = None
 | 
| +
 | 
| +  def _PushAndStartFakeDns(self):
 | 
| +    """Starts the fake_dns server that replies all name queries 127.0.0.1.
 | 
| +
 | 
| +    Returns:
 | 
| +      subprocess instance connected to the fake_dns process on the device.
 | 
| +    """
 | 
| +    self._adb.PushIfNeeded(
 | 
| +        os.path.join(constants.CHROME_DIR, 'out', 'Release', 'fake_dns'),
 | 
| +        FakeDns._FAKE_DNS_PATH)
 | 
| +    return subprocess.Popen(
 | 
| +        ['adb', '-s', self._adb._adb.GetSerialNumber(),
 | 
| +         'shell', '%s -D' % FakeDns._FAKE_DNS_PATH])
 | 
| +
 | 
| +  def SetUp(self):
 | 
| +    """Configures the system to point to a DNS server that replies 127.0.0.1.
 | 
| +
 | 
| +    This can be used in combination with the forwarder to forward all web
 | 
| +    traffic to a replay server.
 | 
| +
 | 
| +    The TearDown() method will perform all cleanup.
 | 
| +    """
 | 
| +    self._adb.RunShellCommand('ip route add 8.8.8.0/24 via 127.0.0.1 dev lo')
 | 
| +    self._fake_dns = self._PushAndStartFakeDns()
 | 
| +    self._original_dns = self._adb.RunShellCommand('getprop net.dns1')[0]
 | 
| +    self._adb.RunShellCommand('setprop net.dns1 127.0.0.1')
 | 
| +    time.sleep(2)  # Time for server to start and the setprop to take effect.
 | 
| +
 | 
| +  def TearDown(self):
 | 
| +    """Shuts down the fake_dns."""
 | 
| +    if self._fake_dns:
 | 
| +      if not self._original_dns or self._original_dns == '127.0.0.1':
 | 
| +        logging.warning('Bad original DNS, falling back to Google DNS.')
 | 
| +        self._original_dns = '8.8.8.8'
 | 
| +      self._adb.RunShellCommand('setprop net.dns1 %s' % self._original_dns)
 | 
| +      self._fake_dns.kill()
 | 
| +      self._adb.RunShellCommand('ip route del 8.8.8.0/24 via 127.0.0.1 dev lo')
 | 
| 
 |