Index: README.md |
diff --git a/README.md b/README.md |
index 7da011ecb106d35fc3ba3c525ff1517e9a498221..dc68fbf6e9fa37db7f31b85d8280aaeb27acd21f 100644 |
--- a/README.md |
+++ b/README.md |
@@ -5,23 +5,27 @@ content of the page. This distilled content can then be used in a variety of |
ways. |
The current efforts that will be powered by DOM Distiller: |
-- Reader mode: a mobile-friendly viewing mode for Chrome mobile |
+ |
+- Reader mode: a mobile-friendly viewing mode for Chrome mobile |
## How to use Reader mode on mobile Chrome |
-- Open Chrome on your mobile device |
-- Navigate to [chrome://flags](chrome://flags) and search for "Reader mode" |
- (Menu -> Find in page -> Enable Reader Mode Toolbar Icon), or directly go to |
- [chrome://flags#enable-reader-mode-toolbar-icon](chrome://flags#enable-reader-mode-toolbar-icon) |
-- Click Enable to turn on Reader mode |
-- Click "Relaunch Now" at the bottom of the page |
-- Next time you're trying to read a page, tap on the "Reader mode" icon in |
- the toolbar to try it out! |
+- Open Chrome on your mobile device |
+- Navigate to [chrome://flags](chrome://flags) and search for "Reader mode" |
+ (Menu -> Find in page -> Enable Reader Mode Toolbar Icon), or directly go to |
+ [chrome://flags#enable-reader-mode-toolbar-icon] |
+ (chrome://flags#enable-reader-mode-toolbar-icon) |
+- Click Enable to turn on Reader mode |
+- Click "Relaunch Now" at the bottom of the page |
+- Next time you're trying to read a page, tap on the "Reader mode" icon in the |
+ toolbar to try it out! |
# Continuous integration |
-- [](https://drone.io/github.com/chromium/dom-distiller/latest) |
-- [drone.io waterfall](https://drone.io/github.com/chromium/dom-distiller) |
+- [![Build Status] |
+ (https://drone.io/github.com/chromium/dom-distiller/status.png)] |
+ (https://drone.io/github.com/chromium/dom-distiller/latest) |
+- [drone.io waterfall](https://drone.io/github.com/chromium/dom-distiller) |
# Get the code |
@@ -30,23 +34,24 @@ In a folder where you want the code (outside of the chromium checkout): |
```bash |
git clone https://github.com/chromium/dom-distiller.git |
``` |
+ |
A `dom-distiller` folder will be created in the folder you run that command. |
# Environment setup |
Before you build for the first time, you need to install the build dependencies. |
-For all platforms, it is require to download and install |
-[Google Chrome browser](https://www.google.com/chrome/browser/desktop/). |
+For all platforms, it is require to download and install [Google Chrome browser] |
+(https://www.google.com/chrome/browser/desktop/). |
-ChromeDriver requires Google Chrome to be installed at a specific location |
-(the default location for the platform). See |
-[ChromeDriver documentation](https://code.google.com/p/selenium/wiki/ChromeDriver) |
-for details. |
+ChromeDriver requires Google Chrome to be installed at a specific location (the |
+default location for the platform). See [ChromeDriver documentation] |
+(https://code.google.com/p/selenium/wiki/ChromeDriver) for details. |
## Developing on Ubuntu/Debian |
Install the dependencies by entering the `dom-distiller` folder and running: |
+ |
```bash |
sudo ./install-build-deps.sh |
``` |
@@ -55,32 +60,43 @@ Ubuntu 14.04 64-bit is recommended. |
## Developing on Mac OS X |
-- Install JDK 7 using either your organizations software management tool, |
-or download it from |
-[Oracle](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html). |
-- Install [Homebrew](http://brew.sh/). |
-- Install `ant` and `python` using Homebrew: |
-```bash |
-brew install ant python |
-``` |
-- Since both the protocol buffer compiler and Python bindings are needed, |
-install the `protobuf` package with the `--with-python` command line parameter: |
-```bash |
-brew install protobuf --with-python |
-``` |
-- Create a folder named `buildtools` inside your DOM Distiller checkout |
-- Download ChromeDriver (chromedriver_mac32.zip) from the |
-[Download page](https://sites.google.com/a/chromium.org/chromedriver/downloads) |
-- Unzip the `chromedriver_mac32.zip` and ensure the binary ends up in your |
-`buildtools` folder. |
-- Install the PyPI package management tool `pip` by running: |
-``` |
-sudo easy_install pip |
-``` |
-- Install `selenium` using `pip`: |
-``` |
-pip install --user selenium |
-``` |
+- Install JDK 7 using either your organizations software management tool, or |
+ download it from [Oracle] |
+ (http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html). |
+- Install [Homebrew](http://brew.sh/). |
+- Install `ant` and `python` using Homebrew: |
+ |
+ ```bash |
+ brew install ant python |
+ ``` |
+ |
+- Since both the protocol buffer compiler and Python bindings are needed, |
+ install the `protobuf` package with the `--with-python` command line |
+ parameter: |
+ |
+ ```bash |
+ brew install protobuf --with-python |
+ ``` |
+ |
+- Create a folder named `buildtools` inside your DOM Distiller checkout |
+ |
+- Download ChromeDriver (chromedriver_mac32.zip) from the [Download page] |
+ (https://sites.google.com/a/chromium.org/chromedriver/downloads) |
+ |
+- Unzip the `chromedriver_mac32.zip` and ensure the binary ends up in your |
+ `buildtools` folder. |
+ |
+- Install the PyPI package management tool `pip` by running: |
+ |
+ ```bash |
+ sudo easy_install pip |
+ ``` |
+ |
+- Install `selenium` using `pip`: |
+ |
+ ```bash |
+ pip install --user selenium |
+ ``` |
For the rest of this guide, there are sometimes references to a tool called |
`xvfb` and specifically when running shell commands using `xvfb-run`. When you |
@@ -89,35 +105,40 @@ develop using a Mac OS X, you can remove that part of the command. For example |
## Developing with Vagrant |
-This option could be useful if you want to develop on an unsupported system |
-like Windows or Red Hat Linux. Even if you are on a supported system but |
-would rather not touch the system too much, Vagrant is a viable alternative. |
+This option could be useful if you want to develop on an unsupported system like |
+Windows or Red Hat Linux. Even if you are on a supported system but would rather |
+not touch the system too much, Vagrant is a viable alternative. |
The Vagrant VM is based on Ubuntu 14.04. |
-- [Install Vagrant](http://www.vagrantup.com/downloads.html) on your system. |
- Version 1.7.2 or higher is recommended. |
-- Launch the Vagrant VM instance |
-```bash |
-vagrant up |
-``` |
-- SSH to the VM |
-```bash |
-vagrant ssh |
-``` |
+- [Install Vagrant](http://www.vagrantup.com/downloads.html) on your system. |
+ Version 1.7.2 or higher is recommended. |
+- Launch the Vagrant VM instance |
+ |
+ ```bash |
+ vagrant up |
+ ``` |
+ |
+- SSH to the VM |
+ |
+ ```bash |
+ vagrant ssh |
+ ``` |
## Tools for contributing |
The DOM Distiller project uses the Chromium tools for collaboration. For code |
-reviews, the |
-[Chromium Rietveld code review tool](https://codereview.chromium.org/) is used |
-and the set of tools found in `depot_tools` is also required. |
+reviews, the [Chromium Rietveld code review tool] |
+(https://codereview.chromium.org/) is used and the set of tools found in |
+`depot_tools` is also required. |
-To get `depot_tools`, follow the guide at |
-[Chrome infrastructure documentation for depot_tools](http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up). |
+To get `depot_tools`, follow the guide at [Chrome infrastructure documentation |
+for depot_tools] |
+(http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up). |
The TL;DR of that is to run this from a folder where you install developer |
tools, for example in your `$HOME` folder: |
+ |
```bash |
git clone https://chromium.googlesource.com/chromium/tools/depot_tools |
export PATH="/path/to/depot_tools:$PATH" |
@@ -126,11 +147,13 @@ export PATH="/path/to/depot_tools:$PATH" |
You must also setup your local checkout needs to point to the Chromium Rietveld |
server. This is a one-time setup for your checkout, so from your `dom-distiller` |
checkout folder, run: |
+ |
```bash |
git cl config |
``` |
-- `Rietveld server`: `https://codereview.chromium.org` |
-- You can leave the rest of the fields blank. |
+ |
+- `Rietveld server`: `https://codereview.chromium.org` |
+- You can leave the rest of the fields blank. |
# Building |
@@ -140,48 +163,53 @@ git cl config |
`ant -p`, but the typical targets you might use when you work on this project |
is: |
-- `ant test` Runs all tests. |
-- `ant test -Dtest.filter=$FILTER_PATTERN` where `$FILTER_PATTERN` is a [gtest\_filter |
-pattern] |
-(https://code.google.com/p/googletest/wiki/AdvancedGuide#Running_a_Subset_of_the_Tests). |
-For example `*.FilterTest.*:*Foo*-*Bar*` would run all tests containing `.FilterTest.` |
-and `Foo`, but not those with `Bar`. |
-- `ant gwtc` compiles .class+.java files to JavaScript. Standalone JavaScript |
- is available at `war/domdistiller/domdistiller.nocache.js`. |
-- `ant gwtc.jstests` creates a standalone JavaScript for the tests. |
-- `ant package` Copies the main build artifacts into the `out/package` folder, |
-typically the extracted JS and protocol buffer files. |
+- `ant test` Runs all tests. |
+- `ant test -Dtest.filter=$FILTER_PATTERN` where `$FILTER_PATTERN` is a |
+ [gtest\_filter pattern] |
+ (https://code.google.com/p/googletest/wiki/AdvancedGuide#Running_a_Subset_of_the_Tests). |
+ For example `*.FilterTest.*:*Foo*-*Bar*` would run all tests containing |
+ `.FilterTest.` and `Foo`, but not those with `Bar`. |
+- `ant gwtc` compiles .class+.java files to JavaScript. Standalone JavaScript |
+ is available at `war/domdistiller/domdistiller.nocache.js`. |
+- `ant gwtc.jstests` creates a standalone JavaScript for the tests. |
+- `ant package` Copies the main build artifacts into the `out/package` folder, |
+ typically the extracted JS and protocol buffer files. |
# Contributing |
-You can use regular `git` command when developing in this project and use |
-`git cl` for collaboration. |
+You can use regular `git` command when developing in this project and use `git |
+cl` for collaboration. |
## Uploading a CL for review |
On your branch, run: `git cl upload`. The first time you do this, you will have |
to provide a username and password. |
-- For username, use your @chromium.org. account. |
-- For password, get it from |
-[GoogleCode.com settings page](https://code.google.com/hosting/settings) when |
-logged into your @chromium.org account, and add the full |
-`machine code.google.com login` line to your `~/.netrc` file. |
+ |
+- For username, use your @chromium.org. account. |
+- For password, get it from [GoogleCode.com settings page] |
+ (https://code.google.com/hosting/settings) when logged into your |
+ @chromium.org account, and add the full `machine code.google.com login` line |
+ to your `~/.netrc` file. |
## Committing a CL |
-- Change upstream to remote master, push cl, then revert upstream to local: |
-```bash |
-git branch -u origin/master |
-git cl land |
-git branch -u master |
-``` |
-- For username, use your GitHub account name (the username, not the full |
- e-mail). |
-- For password, use your GitHub password. |
- - If you have two-factor authentication enabled, create a personal access |
- token at your |
- [application settings page](https://github.com/settings/applications) and use |
- that as your password. |
+- Change upstream to remote master, push cl, then revert upstream to local: |
+ |
+ ```bash |
+ git branch -u origin/master |
+ git cl land |
+ git branch -u master |
+ ``` |
+ |
+- For username, use your GitHub account name (the username, not the full |
+ e-mail). |
+ |
+- For password, use your GitHub password. |
+ |
+ - If you have two-factor authentication enabled, create a personal access |
+ token at your [application settings page] |
+ (https://github.com/settings/applications) and use that as your |
+ password. |
## Code formatting |
@@ -190,9 +218,12 @@ requires adding symbolic links to your chromium checkout. |
Inside the `buildtools` folder of your checkout, add the following symbolic |
links: |
-- `clang_format` → `/path/to/chromium/src/buildtools/clang_format/` |
-- `linux64` -> → `/path/to/chromium/src/buildtools/linux64/` (only for Linux 64-bit platform) |
-- `mac` → `/path/to/chromium/mac/buildtools/linux64/` (only for Mac platform) |
+ |
+- `clang_format` → `/path/to/chromium/src/buildtools/clang_format/` |
+- `linux64` → `/path/to/chromium/src/buildtools/linux64/` (only for Linux |
+ 64-bit platform) |
+- `mac` → `/path/to/chromium/mac/buildtools/linux64/` (only for Mac |
+ platform) |
Doing this enables you to run the command `git cl format` to fix the formatting |
of your code. |
@@ -200,72 +231,89 @@ of your code. |
# Run in Chrome for desktop |
In this section, the following shell variables and are assumed correctly set: |
+ |
```bash |
export CHROME_SRC=/path/to/chromium/src |
export DOM_DISTILLER_DIR=/path/to/dom-distiller |
``` |
-- Pull generated package (from ant package) into Chrome. You can use this handy |
-bash-function to help with that: |
-```bash |
-roll-distiller () { |
- ( |
- (cd $DOM_DISTILLER_DIR && ant package) && \ |
- rm -rf $CHROME_SRC/third_party/dom_distiller_js/dist/* && \ |
- cp -rf $DOM_DISTILLER_DIR/out/package/* $CHROME_SRC/third_party/dom_distiller_js/dist/ && \ |
- touch $CHROME_SRC/components/resources/dom_distiller_resources.grdp |
- ) |
-} |
-``` |
-- From `$CHROME_SRC` run GYP to setup ninja build files using |
-```bash |
-build/gyp_chromium |
-``` |
+- Pull generated package (from ant package) into Chrome. You can use this |
+ handy bash-function to help with that: |
+ |
+ ```bash |
+ roll-distiller () { |
+ ( |
+ (cd $DOM_DISTILLER_DIR && ant package) && \ |
+ rm -rf $CHROME_SRC/third_party/dom_distiller_js/dist/* && \ |
+ cp -rf $DOM_DISTILLER_DIR/out/package/* $CHROME_SRC/third_party/dom_distiller_js/dist/ && \ |
+ touch $CHROME_SRC/components/resources/dom_distiller_resources.grdp |
+ ) |
+ } |
+ ``` |
+ |
+- From `$CHROME_SRC` run GYP to setup ninja build files using |
+ |
+ ```bash |
+ build/gyp_chromium |
+ ``` |
## Running the Chrome browser with distiller support |
-- For running Chrome, you need to build the `chrome` target: |
-```bash |
-ninja -C out/Debug chrome |
-``` |
-- Run chrome with DOM Distiller enabled: |
-```bash |
-out/Debug/chrome --enable-dom-distiller |
-``` |
-- This adds a menu item `Distill page` that you can use to distill web pages. |
-- You can also go to `chrome://dom-distiller` to access the debug page. |
-- To have a unique user profile every time you run Chrome, you can also add |
-`--user-data-dir=/tmp/$(mktemp -d)` as a command line parameter. |
-On Mac OS X, you can instead write |
-`--user-data-dir=$(mktemp -d 2>/dev/null || mktemp -d -t 'chromeprofile')`. |
+- For running Chrome, you need to build the `chrome` target: |
+ |
+ ```bash |
+ ninja -C out/Debug chrome |
+ ``` |
+ |
+- Run chrome with DOM Distiller enabled: |
+ |
+ ```bash |
+ out/Debug/chrome --enable-dom-distiller |
+ ``` |
+ |
+- This adds a menu item `Distill page` that you can use to distill web pages. |
+ |
+- You can also go to `chrome://dom-distiller` to access the debug page. |
+ |
+- To have a unique user profile every time you run Chrome, you can also add |
+ `--user-data-dir=/tmp/$(mktemp -d)` as a command line parameter. On Mac OS |
+ X, you can instead write `--user-data-dir=$(mktemp -d 2>/dev/null || mktemp |
+ -d -t 'chromeprofile')`. |
## Running the automated tests in Chromium |
-- For running the tests, you need to build the `components_browsertests` target: |
-```bash |
-ninja -C out/Debug components_browsertests |
-``` |
-- Run the `components_browsertests` binary to execute the tests. You can prefix |
-the command with `xvfb-run` to avoid pop-up windows: |
-```bash |
-xvfb-run out/Debug/components_browsertests |
-``` |
+- For running the tests, you need to build the `components_browsertests` |
+ target: |
-- To only run tests related to DOM Distiller, run: |
-```bash |
-xvfb-run out/Debug/components_browsertests --gtest_filter=\*Distiller\* |
-``` |
+ ```bash |
+ ninja -C out/Debug components_browsertests |
+ ``` |
-- For running tests as isolates, you need to build `components_browsertests_run` |
-and execute them using the swarming tool: |
-```bash |
-ninja -C out/Debug components_browsertests_run |
-python tools/swarming_client/isolate.py run -s out/Debug/components_browsertests.isolated |
-``` |
+- Run the `components_browsertests` binary to execute the tests. You can |
+ prefix the command with `xvfb-run` to avoid pop-up windows: |
+ |
+ ```bash |
+ xvfb-run out/Debug/components_browsertests |
+ ``` |
+ |
+- To only run tests related to DOM Distiller, run: |
+ |
+ ```bash |
+ xvfb-run out/Debug/components_browsertests --gtest_filter=\*Distiller\* |
+ ``` |
+ |
+- For running tests as isolates, you need to build |
+ `components_browsertests_run` and execute them using the swarming tool: |
+ |
+ ```bash |
+ ninja -C out/Debug components_browsertests_run |
+ python tools/swarming_client/isolate.py run -s out/Debug/components_browsertests.isolated |
+ ``` |
## Running the content extractor |
To extract the content from a web page directly, you can run: |
+ |
```bash |
xvfb-run out/Debug/components_browsertests \ |
--gtest_filter='*MANUAL_ExtractUrl' \ |
@@ -275,11 +323,13 @@ xvfb-run out/Debug/components_browsertests \ |
--url=http://www.example.com \ |
> ./extract.log 2>&1 |
``` |
+ |
`extract.out` has the extracted HTML, `extract.log` has the console logging. |
If you need more logging, you can add the following arguments to the command: |
-- Chrome browser: `--vmodule=*distiller*=2` |
-- Content extractor: `--debug-level=99` |
+ |
+- Chrome browser: `--vmodule=*distiller*=2` |
+- Content extractor: `--debug-level=99` |
If this is something you often do, you can put the following function in a bash |
file you include (for example `~/.bashrc`) and use it for iterative development: |
@@ -311,24 +361,28 @@ distill http://example.com/article.html |
## Interactive debugging |
You can use the Chrome Developer Tools to debug DOM Distiller: |
-- Update the test JavaScript by running `ant gwtc.jstests` or `ant test`. |
-- Open `war/test.html` in Chrome desktop |
-- Open the `Console` panel in Developer Tools (**Ctrl-Shift-J**). |
-On Mac OS X you can use **⌥-⌘-I** (uppercase `I`) as the shortcut. |
-- Run all tests by calling: |
-```javascript |
-org.chromium.distiller.JsTestEntry.run() |
-``` |
-- To run only a subset of tests, you can use a regular expression that matches a |
-single test or multiple tests: |
-```javascript |
-org.chromium.distiller.JsTestEntry.runWithFilter('MyTestClass.testSomething') |
-``` |
+ |
+- Update the test JavaScript by running `ant gwtc.jstests` or `ant test`. |
+- Open `war/test.html` in Chrome desktop |
+- Open the `Console` panel in Developer Tools (**Ctrl-Shift-J**). On Mac OS X |
+ you can use **⌥-⌘-I** (uppercase `I`) as the shortcut. |
+- Run all tests by calling: |
+ |
+ ```javascript |
+ org.chromium.distiller.JsTestEntry.run() |
+ ``` |
+ |
+- To run only a subset of tests, you can use a regular expression that matches |
+ a single test or multiple tests: |
+ |
+ ```javascript |
+ org.chromium.distiller.JsTestEntry.runWithFilter('MyTestClass.testSomething') |
+ ``` |
The `Sources` panel contains both the extracted JavaScript and all the Java |
-source files as long as you haven't disabled JavaScript source maps in |
-Developer Tools. You can set breakpoints in the Java source files and then |
-inspect all kinds of different interesting things when that breakpoint is hit. |
+source files as long as you haven't disabled JavaScript source maps in Developer |
+Tools. You can set breakpoints in the Java source files and then inspect all |
+kinds of different interesting things when that breakpoint is hit. |
When a test fails, you will see several stack traces. One of these contains |
clickable links to the corresponding Java source files for the stack frames. |
@@ -337,9 +391,11 @@ clickable links to the corresponding Java source files for the stack frames. |
After running `ant package`, the `out/extension` folder contains an unpacked |
Chrome extension. This can be added to Chrome and used for development. |
-- Go to `chrome://extensions` |
-- Enable developer mode |
-- Select to load an unpacked extension and point to the `out/extension` folder. |
+ |
+- Go to `chrome://extensions` |
+- Enable developer mode |
+- Select to load an unpacked extension and point to the `out/extension` |
+ folder. |
### Features |
@@ -354,14 +410,15 @@ extraction on a mobile device which you are currently inspecting using |
To add logging, you can use the LogUtil. You can use the Java function |
`LogUtil.logToConsole()`. Destination of logs: |
-- `ant test`: Terminal. |
-To get more verbose output, use `ant test -Dtest.debug_level=99`. |
-- Chrome browser: the Chrome log file, as set by shell variable |
-`$CHROME_LOG_FILE`. A release mode build of Chrome will log all JavaScript |
-`INFO` there if you start Chrome with `--enable-logging`. You can add |
-`--enable-logging=stderr` to have the log go to stderr instead of a file. |
-- Content extractor: See |
-[documentation about `extract.log` above](#running-the-content-extractor). |
+ |
+- `ant test`: Terminal. To get more verbose output, use `ant test |
+ -Dtest.debug_level=99`. |
+- Chrome browser: the Chrome log file, as set by shell variable |
+ `$CHROME_LOG_FILE`. A release mode build of Chrome will log all JavaScript |
+ `INFO` there if you start Chrome with `--enable-logging`. You can add |
+ `--enable-logging=stderr` to have the log go to stderr instead of a file. |
+- Content extractor: See [documentation about `extract.log` above] |
+ (#running-the-content-extractor). |
For an example, see |
`$DOM_DISTILLER_DIR/java/org/chromium/distiller/PagingLinksFinder.java`. |
@@ -371,23 +428,24 @@ debugging. |
# Mobile distillation from desktop |
-1. In the tab with the interesting URL, bring up the Developer Tools emulation |
-panel (the mobile device icon). |
-2. Select the desired `Device` and reload the page. Verify that you get what you |
-expect. For example a Nexus 4 might get a mobile site, whereas Nexus 7 might get |
-the desktop site. |
-3. The User-Agent can be copied directly out from the `UA` field. This field |
-does not even require reload after changing device, but it is good practice to |
-verify that you get what you expect. Copy this to the clipboard. |
-4. (Re)start chrome with `--user-agent="$USER_AGENT_FROM_CLIPBOARD"`. Remember |
-to also add `--enable-dom-distiller`. |
-5. Distill the same URL in viewer by either using the menu `Distill page` or by |
-going to `chrome://dom-distiller` and using the input field there. |
-6. Have fun scrutinizing the Chrome log file. |
+1. In the tab with the interesting URL, bring up the Developer Tools emulation |
+ panel (the mobile device icon). |
+2. Select the desired `Device` and reload the page. Verify that you get what |
+ you expect. For example a Nexus 4 might get a mobile site, whereas Nexus 7 |
+ might get the desktop site. |
+3. The User-Agent can be copied directly out from the `UA` field. This field |
+ does not even require reload after changing device, but it is good practice |
+ to verify that you get what you expect. Copy this to the clipboard. |
+4. (Re)start chrome with `--user-agent="$USER_AGENT_FROM_CLIPBOARD"`. Remember |
+ to also add `--enable-dom-distiller`. |
+5. Distill the same URL in viewer by either using the menu `Distill page` or by |
+ going to `chrome://dom-distiller` and using the input field there. |
+6. Have fun scrutinizing the Chrome log file. |
If you want you can copy some of these User-Agent aliases into normal bash |
aliases for easy access later. For example, Nexus 4 would be: |
-```bash |
+ |
+``` |
--user-agent="Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19" |
``` |