Merge f-t to m-c
authorPhil Ringnalda <philringnalda@gmail.com>
Sat, 19 Oct 2013 18:52:09 -0700
changeset 165228 4b3b07791e46e31e2503ab788650e72c8efcf5f4
parent 165208 3af0c2e6012cadb1cf0eb7e15b00d50f64665c22 (current diff)
parent 165227 b106a15a50eed323515f28a5c70c79e6cacea8bc (diff)
child 165229 fc39ece941ffdec8265b8432ae78096a6416ec40
child 165275 d0286101dcd4d9e82f94e5f9eaa44c36a1974be0
child 165279 92c512181d1c24eb877198b43eea642cf9fd4132
child 165331 5062b395d7ce89c15b8788eb941dfc3855fcffc5
child 170460 8218ec9bf8b33e01b1daa3618c4cdd2a9cbe4c44
push id3066
push userakeybl@mozilla.com
push dateMon, 09 Dec 2013 19:58:46 +0000
treeherdermozilla-beta@a31a0dce83aa [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone27.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge f-t to m-c
browser/extensions/shumway/components/FlashStreamConverter.js
mobile/android/base/apache/commons/codec/BinaryDecoder.java
mobile/android/base/apache/commons/codec/BinaryEncoder.java
mobile/android/base/apache/commons/codec/CharEncoding.java
mobile/android/base/apache/commons/codec/Decoder.java
mobile/android/base/apache/commons/codec/DecoderException.java
mobile/android/base/apache/commons/codec/Encoder.java
mobile/android/base/apache/commons/codec/EncoderException.java
mobile/android/base/apache/commons/codec/StringDecoder.java
mobile/android/base/apache/commons/codec/StringEncoder.java
mobile/android/base/apache/commons/codec/StringEncoderComparator.java
mobile/android/base/apache/commons/codec/binary/Base32.java
mobile/android/base/apache/commons/codec/binary/Base32InputStream.java
mobile/android/base/apache/commons/codec/binary/Base32OutputStream.java
mobile/android/base/apache/commons/codec/binary/Base64.java
mobile/android/base/apache/commons/codec/binary/Base64InputStream.java
mobile/android/base/apache/commons/codec/binary/Base64OutputStream.java
mobile/android/base/apache/commons/codec/binary/BaseNCodec.java
mobile/android/base/apache/commons/codec/binary/BaseNCodecInputStream.java
mobile/android/base/apache/commons/codec/binary/BaseNCodecOutputStream.java
mobile/android/base/apache/commons/codec/binary/BinaryCodec.java
mobile/android/base/apache/commons/codec/binary/Hex.java
mobile/android/base/apache/commons/codec/binary/StringUtils.java
mobile/android/base/apache/commons/codec/binary/package.html
mobile/android/base/apache/commons/codec/digest/DigestUtils.java
mobile/android/base/apache/commons/codec/digest/package.html
mobile/android/base/apache/commons/codec/language/AbstractCaverphone.java
mobile/android/base/apache/commons/codec/language/Caverphone.java
mobile/android/base/apache/commons/codec/language/Caverphone1.java
mobile/android/base/apache/commons/codec/language/Caverphone2.java
mobile/android/base/apache/commons/codec/language/ColognePhonetic.java
mobile/android/base/apache/commons/codec/language/DoubleMetaphone.java
mobile/android/base/apache/commons/codec/language/Metaphone.java
mobile/android/base/apache/commons/codec/language/RefinedSoundex.java
mobile/android/base/apache/commons/codec/language/Soundex.java
mobile/android/base/apache/commons/codec/language/SoundexUtils.java
mobile/android/base/apache/commons/codec/language/package.html
mobile/android/base/apache/commons/codec/net/BCodec.java
mobile/android/base/apache/commons/codec/net/QCodec.java
mobile/android/base/apache/commons/codec/net/QuotedPrintableCodec.java
mobile/android/base/apache/commons/codec/net/RFC1522Codec.java
mobile/android/base/apache/commons/codec/net/URLCodec.java
mobile/android/base/apache/commons/codec/net/Utils.java
mobile/android/base/apache/commons/codec/net/package.html
mobile/android/base/apache/commons/codec/overview.html
mobile/android/base/apache/commons/codec/package.html
mobile/android/base/braille/com/googlecode/eyesfree/braille/selfbraille/ISelfBrailleService.java
mobile/android/base/braille/com/googlecode/eyesfree/braille/selfbraille/SelfBrailleClient.java
mobile/android/base/braille/com/googlecode/eyesfree/braille/selfbraille/WriteData.java
mobile/android/base/httpclientandroidlib/ConnectionClosedException.java
mobile/android/base/httpclientandroidlib/ConnectionReuseStrategy.java
mobile/android/base/httpclientandroidlib/FormattedHeader.java
mobile/android/base/httpclientandroidlib/Header.java
mobile/android/base/httpclientandroidlib/HeaderElement.java
mobile/android/base/httpclientandroidlib/HeaderElementIterator.java
mobile/android/base/httpclientandroidlib/HeaderIterator.java
mobile/android/base/httpclientandroidlib/HttpClientConnection.java
mobile/android/base/httpclientandroidlib/HttpConnection.java
mobile/android/base/httpclientandroidlib/HttpConnectionMetrics.java
mobile/android/base/httpclientandroidlib/HttpEntity.java
mobile/android/base/httpclientandroidlib/HttpEntityEnclosingRequest.java
mobile/android/base/httpclientandroidlib/HttpException.java
mobile/android/base/httpclientandroidlib/HttpHeaders.java
mobile/android/base/httpclientandroidlib/HttpHost.java
mobile/android/base/httpclientandroidlib/HttpInetConnection.java
mobile/android/base/httpclientandroidlib/HttpMessage.java
mobile/android/base/httpclientandroidlib/HttpRequest.java
mobile/android/base/httpclientandroidlib/HttpRequestFactory.java
mobile/android/base/httpclientandroidlib/HttpRequestInterceptor.java
mobile/android/base/httpclientandroidlib/HttpResponse.java
mobile/android/base/httpclientandroidlib/HttpResponseFactory.java
mobile/android/base/httpclientandroidlib/HttpResponseInterceptor.java
mobile/android/base/httpclientandroidlib/HttpServerConnection.java
mobile/android/base/httpclientandroidlib/HttpStatus.java
mobile/android/base/httpclientandroidlib/HttpVersion.java
mobile/android/base/httpclientandroidlib/MalformedChunkCodingException.java
mobile/android/base/httpclientandroidlib/MethodNotSupportedException.java
mobile/android/base/httpclientandroidlib/NameValuePair.java
mobile/android/base/httpclientandroidlib/NoHttpResponseException.java
mobile/android/base/httpclientandroidlib/ParseException.java
mobile/android/base/httpclientandroidlib/ProtocolException.java
mobile/android/base/httpclientandroidlib/ProtocolVersion.java
mobile/android/base/httpclientandroidlib/README.txt
mobile/android/base/httpclientandroidlib/ReasonPhraseCatalog.java
mobile/android/base/httpclientandroidlib/RequestLine.java
mobile/android/base/httpclientandroidlib/StatusLine.java
mobile/android/base/httpclientandroidlib/TokenIterator.java
mobile/android/base/httpclientandroidlib/TruncatedChunkException.java
mobile/android/base/httpclientandroidlib/UnsupportedHttpVersionException.java
mobile/android/base/httpclientandroidlib/androidextra/HttpClientAndroidLog.java
mobile/android/base/httpclientandroidlib/annotation/GuardedBy.java
mobile/android/base/httpclientandroidlib/annotation/Immutable.java
mobile/android/base/httpclientandroidlib/annotation/NotThreadSafe.java
mobile/android/base/httpclientandroidlib/annotation/ThreadSafe.java
mobile/android/base/httpclientandroidlib/auth/AUTH.java
mobile/android/base/httpclientandroidlib/auth/AuthScheme.java
mobile/android/base/httpclientandroidlib/auth/AuthSchemeFactory.java
mobile/android/base/httpclientandroidlib/auth/AuthSchemeRegistry.java
mobile/android/base/httpclientandroidlib/auth/AuthScope.java
mobile/android/base/httpclientandroidlib/auth/AuthState.java
mobile/android/base/httpclientandroidlib/auth/AuthenticationException.java
mobile/android/base/httpclientandroidlib/auth/BasicUserPrincipal.java
mobile/android/base/httpclientandroidlib/auth/ContextAwareAuthScheme.java
mobile/android/base/httpclientandroidlib/auth/Credentials.java
mobile/android/base/httpclientandroidlib/auth/InvalidCredentialsException.java
mobile/android/base/httpclientandroidlib/auth/MalformedChallengeException.java
mobile/android/base/httpclientandroidlib/auth/NTCredentials.java
mobile/android/base/httpclientandroidlib/auth/NTUserPrincipal.java
mobile/android/base/httpclientandroidlib/auth/UsernamePasswordCredentials.java
mobile/android/base/httpclientandroidlib/auth/package.html
mobile/android/base/httpclientandroidlib/auth/params/AuthPNames.java
mobile/android/base/httpclientandroidlib/auth/params/AuthParamBean.java
mobile/android/base/httpclientandroidlib/auth/params/AuthParams.java
mobile/android/base/httpclientandroidlib/auth/params/package.html
mobile/android/base/httpclientandroidlib/client/AuthCache.java
mobile/android/base/httpclientandroidlib/client/AuthenticationHandler.java
mobile/android/base/httpclientandroidlib/client/CircularRedirectException.java
mobile/android/base/httpclientandroidlib/client/ClientProtocolException.java
mobile/android/base/httpclientandroidlib/client/CookieStore.java
mobile/android/base/httpclientandroidlib/client/CredentialsProvider.java
mobile/android/base/httpclientandroidlib/client/HttpClient.java
mobile/android/base/httpclientandroidlib/client/HttpRequestRetryHandler.java
mobile/android/base/httpclientandroidlib/client/HttpResponseException.java
mobile/android/base/httpclientandroidlib/client/NonRepeatableRequestException.java
mobile/android/base/httpclientandroidlib/client/RedirectException.java
mobile/android/base/httpclientandroidlib/client/RedirectHandler.java
mobile/android/base/httpclientandroidlib/client/RedirectStrategy.java
mobile/android/base/httpclientandroidlib/client/RequestDirector.java
mobile/android/base/httpclientandroidlib/client/ResponseHandler.java
mobile/android/base/httpclientandroidlib/client/UserTokenHandler.java
mobile/android/base/httpclientandroidlib/client/entity/DecompressingEntity.java
mobile/android/base/httpclientandroidlib/client/entity/DeflateDecompressingEntity.java
mobile/android/base/httpclientandroidlib/client/entity/GzipDecompressingEntity.java
mobile/android/base/httpclientandroidlib/client/entity/UrlEncodedFormEntity.java
mobile/android/base/httpclientandroidlib/client/entity/package.html
mobile/android/base/httpclientandroidlib/client/methods/AbortableHttpRequest.java
mobile/android/base/httpclientandroidlib/client/methods/HttpDelete.java
mobile/android/base/httpclientandroidlib/client/methods/HttpEntityEnclosingRequestBase.java
mobile/android/base/httpclientandroidlib/client/methods/HttpGet.java
mobile/android/base/httpclientandroidlib/client/methods/HttpHead.java
mobile/android/base/httpclientandroidlib/client/methods/HttpOptions.java
mobile/android/base/httpclientandroidlib/client/methods/HttpPost.java
mobile/android/base/httpclientandroidlib/client/methods/HttpPut.java
mobile/android/base/httpclientandroidlib/client/methods/HttpRequestBase.java
mobile/android/base/httpclientandroidlib/client/methods/HttpTrace.java
mobile/android/base/httpclientandroidlib/client/methods/HttpUriRequest.java
mobile/android/base/httpclientandroidlib/client/methods/package.html
mobile/android/base/httpclientandroidlib/client/package.html
mobile/android/base/httpclientandroidlib/client/params/AllClientPNames.java
mobile/android/base/httpclientandroidlib/client/params/AuthPolicy.java
mobile/android/base/httpclientandroidlib/client/params/ClientPNames.java
mobile/android/base/httpclientandroidlib/client/params/ClientParamBean.java
mobile/android/base/httpclientandroidlib/client/params/CookiePolicy.java
mobile/android/base/httpclientandroidlib/client/params/HttpClientParams.java
mobile/android/base/httpclientandroidlib/client/params/package.html
mobile/android/base/httpclientandroidlib/client/protocol/ClientContext.java
mobile/android/base/httpclientandroidlib/client/protocol/ClientContextConfigurer.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestAcceptEncoding.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestAddCookies.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestAuthCache.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestClientConnControl.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestDefaultHeaders.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestProxyAuthentication.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestTargetAuthentication.java
mobile/android/base/httpclientandroidlib/client/protocol/ResponseAuthCache.java
mobile/android/base/httpclientandroidlib/client/protocol/ResponseContentEncoding.java
mobile/android/base/httpclientandroidlib/client/protocol/ResponseProcessCookies.java
mobile/android/base/httpclientandroidlib/client/protocol/package.html
mobile/android/base/httpclientandroidlib/client/utils/CloneUtils.java
mobile/android/base/httpclientandroidlib/client/utils/Idn.java
mobile/android/base/httpclientandroidlib/client/utils/JdkIdn.java
mobile/android/base/httpclientandroidlib/client/utils/Punycode.java
mobile/android/base/httpclientandroidlib/client/utils/Rfc3492Idn.java
mobile/android/base/httpclientandroidlib/client/utils/URIUtils.java
mobile/android/base/httpclientandroidlib/client/utils/URLEncodedUtils.java
mobile/android/base/httpclientandroidlib/client/utils/package.html
mobile/android/base/httpclientandroidlib/conn/BasicEofSensorWatcher.java
mobile/android/base/httpclientandroidlib/conn/BasicManagedEntity.java
mobile/android/base/httpclientandroidlib/conn/ClientConnectionManager.java
mobile/android/base/httpclientandroidlib/conn/ClientConnectionManagerFactory.java
mobile/android/base/httpclientandroidlib/conn/ClientConnectionOperator.java
mobile/android/base/httpclientandroidlib/conn/ClientConnectionRequest.java
mobile/android/base/httpclientandroidlib/conn/ConnectTimeoutException.java
mobile/android/base/httpclientandroidlib/conn/ConnectionKeepAliveStrategy.java
mobile/android/base/httpclientandroidlib/conn/ConnectionPoolTimeoutException.java
mobile/android/base/httpclientandroidlib/conn/ConnectionReleaseTrigger.java
mobile/android/base/httpclientandroidlib/conn/EofSensorInputStream.java
mobile/android/base/httpclientandroidlib/conn/EofSensorWatcher.java
mobile/android/base/httpclientandroidlib/conn/HttpHostConnectException.java
mobile/android/base/httpclientandroidlib/conn/HttpRoutedConnection.java
mobile/android/base/httpclientandroidlib/conn/ManagedClientConnection.java
mobile/android/base/httpclientandroidlib/conn/MultihomePlainSocketFactory.java
mobile/android/base/httpclientandroidlib/conn/OperatedClientConnection.java
mobile/android/base/httpclientandroidlib/conn/package.html
mobile/android/base/httpclientandroidlib/conn/params/ConnConnectionPNames.java
mobile/android/base/httpclientandroidlib/conn/params/ConnConnectionParamBean.java
mobile/android/base/httpclientandroidlib/conn/params/ConnManagerPNames.java
mobile/android/base/httpclientandroidlib/conn/params/ConnManagerParamBean.java
mobile/android/base/httpclientandroidlib/conn/params/ConnManagerParams.java
mobile/android/base/httpclientandroidlib/conn/params/ConnPerRoute.java
mobile/android/base/httpclientandroidlib/conn/params/ConnPerRouteBean.java
mobile/android/base/httpclientandroidlib/conn/params/ConnRoutePNames.java
mobile/android/base/httpclientandroidlib/conn/params/ConnRouteParamBean.java
mobile/android/base/httpclientandroidlib/conn/params/ConnRouteParams.java
mobile/android/base/httpclientandroidlib/conn/params/package.html
mobile/android/base/httpclientandroidlib/conn/routing/BasicRouteDirector.java
mobile/android/base/httpclientandroidlib/conn/routing/HttpRoute.java
mobile/android/base/httpclientandroidlib/conn/routing/HttpRouteDirector.java
mobile/android/base/httpclientandroidlib/conn/routing/HttpRoutePlanner.java
mobile/android/base/httpclientandroidlib/conn/routing/RouteInfo.java
mobile/android/base/httpclientandroidlib/conn/routing/RouteTracker.java
mobile/android/base/httpclientandroidlib/conn/routing/package.html
mobile/android/base/httpclientandroidlib/conn/scheme/HostNameResolver.java
mobile/android/base/httpclientandroidlib/conn/scheme/LayeredSchemeSocketFactory.java
mobile/android/base/httpclientandroidlib/conn/scheme/LayeredSchemeSocketFactoryAdaptor.java
mobile/android/base/httpclientandroidlib/conn/scheme/LayeredSocketFactory.java
mobile/android/base/httpclientandroidlib/conn/scheme/LayeredSocketFactoryAdaptor.java
mobile/android/base/httpclientandroidlib/conn/scheme/PlainSocketFactory.java
mobile/android/base/httpclientandroidlib/conn/scheme/Scheme.java
mobile/android/base/httpclientandroidlib/conn/scheme/SchemeRegistry.java
mobile/android/base/httpclientandroidlib/conn/scheme/SchemeSocketFactory.java
mobile/android/base/httpclientandroidlib/conn/scheme/SchemeSocketFactoryAdaptor.java
mobile/android/base/httpclientandroidlib/conn/scheme/SocketFactory.java
mobile/android/base/httpclientandroidlib/conn/scheme/SocketFactoryAdaptor.java
mobile/android/base/httpclientandroidlib/conn/scheme/package.html
mobile/android/base/httpclientandroidlib/conn/ssl/AbstractVerifier.java
mobile/android/base/httpclientandroidlib/conn/ssl/AllowAllHostnameVerifier.java
mobile/android/base/httpclientandroidlib/conn/ssl/BrowserCompatHostnameVerifier.java
mobile/android/base/httpclientandroidlib/conn/ssl/SSLSocketFactory.java
mobile/android/base/httpclientandroidlib/conn/ssl/StrictHostnameVerifier.java
mobile/android/base/httpclientandroidlib/conn/ssl/TrustManagerDecorator.java
mobile/android/base/httpclientandroidlib/conn/ssl/TrustSelfSignedStrategy.java
mobile/android/base/httpclientandroidlib/conn/ssl/TrustStrategy.java
mobile/android/base/httpclientandroidlib/conn/ssl/X509HostnameVerifier.java
mobile/android/base/httpclientandroidlib/conn/ssl/package.html
mobile/android/base/httpclientandroidlib/conn/util/InetAddressUtils.java
mobile/android/base/httpclientandroidlib/conn/util/package.html
mobile/android/base/httpclientandroidlib/cookie/ClientCookie.java
mobile/android/base/httpclientandroidlib/cookie/Cookie.java
mobile/android/base/httpclientandroidlib/cookie/CookieAttributeHandler.java
mobile/android/base/httpclientandroidlib/cookie/CookieIdentityComparator.java
mobile/android/base/httpclientandroidlib/cookie/CookieOrigin.java
mobile/android/base/httpclientandroidlib/cookie/CookiePathComparator.java
mobile/android/base/httpclientandroidlib/cookie/CookieRestrictionViolationException.java
mobile/android/base/httpclientandroidlib/cookie/CookieSpec.java
mobile/android/base/httpclientandroidlib/cookie/CookieSpecFactory.java
mobile/android/base/httpclientandroidlib/cookie/CookieSpecRegistry.java
mobile/android/base/httpclientandroidlib/cookie/MalformedCookieException.java
mobile/android/base/httpclientandroidlib/cookie/SM.java
mobile/android/base/httpclientandroidlib/cookie/SetCookie.java
mobile/android/base/httpclientandroidlib/cookie/SetCookie2.java
mobile/android/base/httpclientandroidlib/cookie/package.html
mobile/android/base/httpclientandroidlib/cookie/params/CookieSpecPNames.java
mobile/android/base/httpclientandroidlib/cookie/params/CookieSpecParamBean.java
mobile/android/base/httpclientandroidlib/cookie/params/package.html
mobile/android/base/httpclientandroidlib/entity/AbstractHttpEntity.java
mobile/android/base/httpclientandroidlib/entity/BasicHttpEntity.java
mobile/android/base/httpclientandroidlib/entity/BufferedHttpEntity.java
mobile/android/base/httpclientandroidlib/entity/ByteArrayEntity.java
mobile/android/base/httpclientandroidlib/entity/ContentLengthStrategy.java
mobile/android/base/httpclientandroidlib/entity/ContentProducer.java
mobile/android/base/httpclientandroidlib/entity/EntityTemplate.java
mobile/android/base/httpclientandroidlib/entity/FileEntity.java
mobile/android/base/httpclientandroidlib/entity/HttpEntityWrapper.java
mobile/android/base/httpclientandroidlib/entity/InputStreamEntity.java
mobile/android/base/httpclientandroidlib/entity/SerializableEntity.java
mobile/android/base/httpclientandroidlib/entity/StringEntity.java
mobile/android/base/httpclientandroidlib/entity/package.html
mobile/android/base/httpclientandroidlib/impl/AbstractHttpClientConnection.java
mobile/android/base/httpclientandroidlib/impl/AbstractHttpServerConnection.java
mobile/android/base/httpclientandroidlib/impl/DefaultConnectionReuseStrategy.java
mobile/android/base/httpclientandroidlib/impl/DefaultHttpClientConnection.java
mobile/android/base/httpclientandroidlib/impl/DefaultHttpRequestFactory.java
mobile/android/base/httpclientandroidlib/impl/DefaultHttpResponseFactory.java
mobile/android/base/httpclientandroidlib/impl/DefaultHttpServerConnection.java
mobile/android/base/httpclientandroidlib/impl/EnglishReasonPhraseCatalog.java
mobile/android/base/httpclientandroidlib/impl/HttpConnectionMetricsImpl.java
mobile/android/base/httpclientandroidlib/impl/NoConnectionReuseStrategy.java
mobile/android/base/httpclientandroidlib/impl/SocketHttpClientConnection.java
mobile/android/base/httpclientandroidlib/impl/SocketHttpServerConnection.java
mobile/android/base/httpclientandroidlib/impl/auth/AuthSchemeBase.java
mobile/android/base/httpclientandroidlib/impl/auth/BasicScheme.java
mobile/android/base/httpclientandroidlib/impl/auth/BasicSchemeFactory.java
mobile/android/base/httpclientandroidlib/impl/auth/DigestScheme.java
mobile/android/base/httpclientandroidlib/impl/auth/DigestSchemeFactory.java
mobile/android/base/httpclientandroidlib/impl/auth/NTLMEngine.java
mobile/android/base/httpclientandroidlib/impl/auth/NTLMEngineException.java
mobile/android/base/httpclientandroidlib/impl/auth/NTLMEngineImpl.java
mobile/android/base/httpclientandroidlib/impl/auth/NTLMScheme.java
mobile/android/base/httpclientandroidlib/impl/auth/NTLMSchemeFactory.java
mobile/android/base/httpclientandroidlib/impl/auth/RFC2617Scheme.java
mobile/android/base/httpclientandroidlib/impl/auth/SpnegoTokenGenerator.java
mobile/android/base/httpclientandroidlib/impl/auth/UnsupportedDigestAlgorithmException.java
mobile/android/base/httpclientandroidlib/impl/auth/package.html
mobile/android/base/httpclientandroidlib/impl/client/AbstractAuthenticationHandler.java
mobile/android/base/httpclientandroidlib/impl/client/AbstractHttpClient.java
mobile/android/base/httpclientandroidlib/impl/client/BasicAuthCache.java
mobile/android/base/httpclientandroidlib/impl/client/BasicCookieStore.java
mobile/android/base/httpclientandroidlib/impl/client/BasicCredentialsProvider.java
mobile/android/base/httpclientandroidlib/impl/client/BasicResponseHandler.java
mobile/android/base/httpclientandroidlib/impl/client/ClientParamsStack.java
mobile/android/base/httpclientandroidlib/impl/client/ContentEncodingHttpClient.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultConnectionKeepAliveStrategy.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultHttpClient.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultHttpRequestRetryHandler.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultProxyAuthenticationHandler.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultRedirectHandler.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultRedirectStrategy.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultRedirectStrategyAdaptor.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultRequestDirector.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultTargetAuthenticationHandler.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultUserTokenHandler.java
mobile/android/base/httpclientandroidlib/impl/client/EntityEnclosingRequestWrapper.java
mobile/android/base/httpclientandroidlib/impl/client/RedirectLocations.java
mobile/android/base/httpclientandroidlib/impl/client/RequestWrapper.java
mobile/android/base/httpclientandroidlib/impl/client/RoutedRequest.java
mobile/android/base/httpclientandroidlib/impl/client/TunnelRefusedException.java
mobile/android/base/httpclientandroidlib/impl/client/package.html
mobile/android/base/httpclientandroidlib/impl/conn/AbstractClientConnAdapter.java
mobile/android/base/httpclientandroidlib/impl/conn/AbstractPoolEntry.java
mobile/android/base/httpclientandroidlib/impl/conn/AbstractPooledConnAdapter.java
mobile/android/base/httpclientandroidlib/impl/conn/ConnectionShutdownException.java
mobile/android/base/httpclientandroidlib/impl/conn/DefaultClientConnection.java
mobile/android/base/httpclientandroidlib/impl/conn/DefaultClientConnectionOperator.java
mobile/android/base/httpclientandroidlib/impl/conn/DefaultHttpRoutePlanner.java
mobile/android/base/httpclientandroidlib/impl/conn/DefaultResponseParser.java
mobile/android/base/httpclientandroidlib/impl/conn/HttpInetSocketAddress.java
mobile/android/base/httpclientandroidlib/impl/conn/IdleConnectionHandler.java
mobile/android/base/httpclientandroidlib/impl/conn/LoggingSessionInputBuffer.java
mobile/android/base/httpclientandroidlib/impl/conn/LoggingSessionOutputBuffer.java
mobile/android/base/httpclientandroidlib/impl/conn/ProxySelectorRoutePlanner.java
mobile/android/base/httpclientandroidlib/impl/conn/SchemeRegistryFactory.java
mobile/android/base/httpclientandroidlib/impl/conn/SingleClientConnManager.java
mobile/android/base/httpclientandroidlib/impl/conn/Wire.java
mobile/android/base/httpclientandroidlib/impl/conn/package.html
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/AbstractConnPool.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/BasicPoolEntry.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/BasicPoolEntryRef.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/BasicPooledConnAdapter.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/ConnPoolByRoute.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/PoolEntryRequest.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/RefQueueHandler.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/RefQueueWorker.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/RouteSpecificPool.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/ThreadSafeClientConnManager.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/WaitingThread.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/WaitingThreadAborter.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/doc-files/tsccm-structure.png
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/package.html
mobile/android/base/httpclientandroidlib/impl/cookie/AbstractCookieAttributeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/AbstractCookieSpec.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicClientCookie.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicClientCookie2.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicCommentHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicDomainHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicExpiresHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicMaxAgeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicPathHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicSecureHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/BestMatchSpec.java
mobile/android/base/httpclientandroidlib/impl/cookie/BestMatchSpecFactory.java
mobile/android/base/httpclientandroidlib/impl/cookie/BrowserCompatSpec.java
mobile/android/base/httpclientandroidlib/impl/cookie/BrowserCompatSpecFactory.java
mobile/android/base/httpclientandroidlib/impl/cookie/CookieSpecBase.java
mobile/android/base/httpclientandroidlib/impl/cookie/DateParseException.java
mobile/android/base/httpclientandroidlib/impl/cookie/DateUtils.java
mobile/android/base/httpclientandroidlib/impl/cookie/IgnoreSpec.java
mobile/android/base/httpclientandroidlib/impl/cookie/IgnoreSpecFactory.java
mobile/android/base/httpclientandroidlib/impl/cookie/NetscapeDomainHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/NetscapeDraftHeaderParser.java
mobile/android/base/httpclientandroidlib/impl/cookie/NetscapeDraftSpec.java
mobile/android/base/httpclientandroidlib/impl/cookie/NetscapeDraftSpecFactory.java
mobile/android/base/httpclientandroidlib/impl/cookie/PublicSuffixFilter.java
mobile/android/base/httpclientandroidlib/impl/cookie/PublicSuffixListParser.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2109DomainHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2109Spec.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2109SpecFactory.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2109VersionHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965CommentUrlAttributeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965DiscardAttributeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965DomainAttributeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965PortAttributeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965Spec.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965SpecFactory.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965VersionAttributeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/package.html
mobile/android/base/httpclientandroidlib/impl/entity/EntityDeserializer.java
mobile/android/base/httpclientandroidlib/impl/entity/EntitySerializer.java
mobile/android/base/httpclientandroidlib/impl/entity/LaxContentLengthStrategy.java
mobile/android/base/httpclientandroidlib/impl/entity/StrictContentLengthStrategy.java
mobile/android/base/httpclientandroidlib/impl/entity/package.html
mobile/android/base/httpclientandroidlib/impl/io/AbstractMessageParser.java
mobile/android/base/httpclientandroidlib/impl/io/AbstractMessageWriter.java
mobile/android/base/httpclientandroidlib/impl/io/AbstractSessionInputBuffer.java
mobile/android/base/httpclientandroidlib/impl/io/AbstractSessionOutputBuffer.java
mobile/android/base/httpclientandroidlib/impl/io/ChunkedInputStream.java
mobile/android/base/httpclientandroidlib/impl/io/ChunkedOutputStream.java
mobile/android/base/httpclientandroidlib/impl/io/ContentLengthInputStream.java
mobile/android/base/httpclientandroidlib/impl/io/ContentLengthOutputStream.java
mobile/android/base/httpclientandroidlib/impl/io/HttpRequestParser.java
mobile/android/base/httpclientandroidlib/impl/io/HttpRequestWriter.java
mobile/android/base/httpclientandroidlib/impl/io/HttpResponseParser.java
mobile/android/base/httpclientandroidlib/impl/io/HttpResponseWriter.java
mobile/android/base/httpclientandroidlib/impl/io/HttpTransportMetricsImpl.java
mobile/android/base/httpclientandroidlib/impl/io/IdentityInputStream.java
mobile/android/base/httpclientandroidlib/impl/io/IdentityOutputStream.java
mobile/android/base/httpclientandroidlib/impl/io/SocketInputBuffer.java
mobile/android/base/httpclientandroidlib/impl/io/SocketOutputBuffer.java
mobile/android/base/httpclientandroidlib/impl/io/package.html
mobile/android/base/httpclientandroidlib/impl/package.html
mobile/android/base/httpclientandroidlib/io/BufferInfo.java
mobile/android/base/httpclientandroidlib/io/EofSensor.java
mobile/android/base/httpclientandroidlib/io/HttpMessageParser.java
mobile/android/base/httpclientandroidlib/io/HttpMessageWriter.java
mobile/android/base/httpclientandroidlib/io/HttpTransportMetrics.java
mobile/android/base/httpclientandroidlib/io/SessionInputBuffer.java
mobile/android/base/httpclientandroidlib/io/SessionOutputBuffer.java
mobile/android/base/httpclientandroidlib/io/package.html
mobile/android/base/httpclientandroidlib/message/AbstractHttpMessage.java
mobile/android/base/httpclientandroidlib/message/BasicHeader.java
mobile/android/base/httpclientandroidlib/message/BasicHeaderElement.java
mobile/android/base/httpclientandroidlib/message/BasicHeaderElementIterator.java
mobile/android/base/httpclientandroidlib/message/BasicHeaderIterator.java
mobile/android/base/httpclientandroidlib/message/BasicHeaderValueFormatter.java
mobile/android/base/httpclientandroidlib/message/BasicHeaderValueParser.java
mobile/android/base/httpclientandroidlib/message/BasicHttpEntityEnclosingRequest.java
mobile/android/base/httpclientandroidlib/message/BasicHttpRequest.java
mobile/android/base/httpclientandroidlib/message/BasicHttpResponse.java
mobile/android/base/httpclientandroidlib/message/BasicLineFormatter.java
mobile/android/base/httpclientandroidlib/message/BasicLineParser.java
mobile/android/base/httpclientandroidlib/message/BasicListHeaderIterator.java
mobile/android/base/httpclientandroidlib/message/BasicNameValuePair.java
mobile/android/base/httpclientandroidlib/message/BasicRequestLine.java
mobile/android/base/httpclientandroidlib/message/BasicStatusLine.java
mobile/android/base/httpclientandroidlib/message/BasicTokenIterator.java
mobile/android/base/httpclientandroidlib/message/BufferedHeader.java
mobile/android/base/httpclientandroidlib/message/HeaderGroup.java
mobile/android/base/httpclientandroidlib/message/HeaderValueFormatter.java
mobile/android/base/httpclientandroidlib/message/HeaderValueParser.java
mobile/android/base/httpclientandroidlib/message/LineFormatter.java
mobile/android/base/httpclientandroidlib/message/LineParser.java
mobile/android/base/httpclientandroidlib/message/ParserCursor.java
mobile/android/base/httpclientandroidlib/message/package.html
mobile/android/base/httpclientandroidlib/package.html
mobile/android/base/httpclientandroidlib/params/AbstractHttpParams.java
mobile/android/base/httpclientandroidlib/params/BasicHttpParams.java
mobile/android/base/httpclientandroidlib/params/CoreConnectionPNames.java
mobile/android/base/httpclientandroidlib/params/CoreProtocolPNames.java
mobile/android/base/httpclientandroidlib/params/DefaultedHttpParams.java
mobile/android/base/httpclientandroidlib/params/HttpAbstractParamBean.java
mobile/android/base/httpclientandroidlib/params/HttpConnectionParamBean.java
mobile/android/base/httpclientandroidlib/params/HttpConnectionParams.java
mobile/android/base/httpclientandroidlib/params/HttpParams.java
mobile/android/base/httpclientandroidlib/params/HttpProtocolParamBean.java
mobile/android/base/httpclientandroidlib/params/HttpProtocolParams.java
mobile/android/base/httpclientandroidlib/params/SyncBasicHttpParams.java
mobile/android/base/httpclientandroidlib/params/package.html
mobile/android/base/httpclientandroidlib/protocol/BasicHttpContext.java
mobile/android/base/httpclientandroidlib/protocol/BasicHttpProcessor.java
mobile/android/base/httpclientandroidlib/protocol/DefaultedHttpContext.java
mobile/android/base/httpclientandroidlib/protocol/ExecutionContext.java
mobile/android/base/httpclientandroidlib/protocol/HTTP.java
mobile/android/base/httpclientandroidlib/protocol/HttpContext.java
mobile/android/base/httpclientandroidlib/protocol/HttpDateGenerator.java
mobile/android/base/httpclientandroidlib/protocol/HttpExpectationVerifier.java
mobile/android/base/httpclientandroidlib/protocol/HttpProcessor.java
mobile/android/base/httpclientandroidlib/protocol/HttpRequestExecutor.java
mobile/android/base/httpclientandroidlib/protocol/HttpRequestHandler.java
mobile/android/base/httpclientandroidlib/protocol/HttpRequestHandlerRegistry.java
mobile/android/base/httpclientandroidlib/protocol/HttpRequestHandlerResolver.java
mobile/android/base/httpclientandroidlib/protocol/HttpRequestInterceptorList.java
mobile/android/base/httpclientandroidlib/protocol/HttpResponseInterceptorList.java
mobile/android/base/httpclientandroidlib/protocol/HttpService.java
mobile/android/base/httpclientandroidlib/protocol/ImmutableHttpProcessor.java
mobile/android/base/httpclientandroidlib/protocol/RequestConnControl.java
mobile/android/base/httpclientandroidlib/protocol/RequestContent.java
mobile/android/base/httpclientandroidlib/protocol/RequestDate.java
mobile/android/base/httpclientandroidlib/protocol/RequestExpectContinue.java
mobile/android/base/httpclientandroidlib/protocol/RequestTargetHost.java
mobile/android/base/httpclientandroidlib/protocol/RequestUserAgent.java
mobile/android/base/httpclientandroidlib/protocol/ResponseConnControl.java
mobile/android/base/httpclientandroidlib/protocol/ResponseContent.java
mobile/android/base/httpclientandroidlib/protocol/ResponseDate.java
mobile/android/base/httpclientandroidlib/protocol/ResponseServer.java
mobile/android/base/httpclientandroidlib/protocol/SyncBasicHttpContext.java
mobile/android/base/httpclientandroidlib/protocol/UriPatternMatcher.java
mobile/android/base/httpclientandroidlib/protocol/package.html
mobile/android/base/httpclientandroidlib/util/ByteArrayBuffer.java
mobile/android/base/httpclientandroidlib/util/CharArrayBuffer.java
mobile/android/base/httpclientandroidlib/util/EncodingUtils.java
mobile/android/base/httpclientandroidlib/util/EntityUtils.java
mobile/android/base/httpclientandroidlib/util/ExceptionUtils.java
mobile/android/base/httpclientandroidlib/util/LangUtils.java
mobile/android/base/httpclientandroidlib/util/VersionInfo.java
mobile/android/base/httpclientandroidlib/util/package.html
mobile/android/base/json-simple/ItemList.java
mobile/android/base/json-simple/JSONArray.java
mobile/android/base/json-simple/JSONAware.java
mobile/android/base/json-simple/JSONObject.java
mobile/android/base/json-simple/JSONStreamAware.java
mobile/android/base/json-simple/JSONValue.java
mobile/android/base/json-simple/LICENSE.txt
mobile/android/base/json-simple/parser/ContainerFactory.java
mobile/android/base/json-simple/parser/ContentHandler.java
mobile/android/base/json-simple/parser/JSONParser.java
mobile/android/base/json-simple/parser/ParseException.java
mobile/android/base/json-simple/parser/Yylex.java
mobile/android/base/json-simple/parser/Yytoken.java
mobile/android/base/resources/drawable-hdpi/grid_icon_bg_activated.png
mobile/android/base/websockets/HybiParser.java
mobile/android/base/websockets/README.md
mobile/android/base/websockets/README_MOZILLA
mobile/android/base/websockets/WebSocketClient.java
mobile/android/chrome/content/HelperApps.js
--- a/browser/devtools/app-manager/app-validator.js
+++ b/browser/devtools/app-manager/app-validator.js
@@ -47,16 +47,17 @@ AppValidator.prototype._getPackagedManif
   if (!manifestFile) {
     return null;
   }
   return Services.io.newFileURI(manifestFile).spec;
 };
 
 AppValidator.prototype._fetchManifest = function (manifestURL) {
   let deferred = promise.defer();
+  this.manifestURL = manifestURL;
 
   let req = new XMLHttpRequest();
   try {
     req.open("GET", manifestURL, true);
   } catch(e) {
     this.error(strings.formatStringFromName("validator.invalidManifestURL", [manifestURL], 1));
     deferred.resolve(null);
     return deferred.promise;
@@ -115,16 +116,78 @@ AppValidator.prototype.validateManifest 
 
   if (!manifest.icons || Object.keys(manifest.icons).length == 0) {
     this.warning(strings.GetStringFromName("validator.missIconsManifestProperty"));
   } else if (!manifest.icons["128"]) {
     this.warning(strings.GetStringFromName("validator.missIconMarketplace"));
   }
 }
 
+AppValidator.prototype._getOriginURL = function (manifest) {
+  if (this.project.type == "packaged") {
+    let manifestURL = Services.io.newURI(this.manifestURL, null, null);
+    return Services.io.newURI(".", null, manifestURL).spec;
+  } else if (this.project.type == "hosted") {
+    return Services.io.newURI(this.project.location, null, null).prePath;
+  }
+}
+
+AppValidator.prototype.validateLaunchPath = function (manifest) {
+  let deferred = promise.defer();
+  // The launch_path field has to start with a `/`
+  if (manifest.launch_path && manifest.launch_path[0] !== "/") {
+    this.error(strings.formatStringFromName("validator.nonAbsoluteLaunchPath", [manifest.launch_path], 1));
+    deferred.resolve();
+    return deferred.promise;
+  }
+  let origin = this._getOriginURL();
+  let path;
+  if (this.project.type == "packaged") {
+    path = "." + ( manifest.launch_path || "/index.html" );
+  } else if (this.project.type == "hosted") {
+    path = manifest.launch_path || "/";
+  }
+  let indexURL;
+  try {
+    indexURL = Services.io.newURI(path, null, Services.io.newURI(origin, null, null)).spec;
+  } catch(e) {
+    this.error(strings.formatStringFromName("validator.invalidLaunchPath", [origin + path], 1));
+    deferred.resolve();
+    return deferred.promise;
+  }
+
+  let req = new XMLHttpRequest();
+  try {
+    req.open("HEAD", indexURL, true);
+  } catch(e) {
+    this.error(strings.formatStringFromName("validator.invalidLaunchPath", [indexURL], 1));
+    deferred.resolve();
+    return deferred.promise;
+  }
+  req.channel.loadFlags |= Ci.nsIRequest.LOAD_BYPASS_CACHE | Ci.nsIRequest.INHIBIT_CACHING;
+  req.onload = () => {
+    if (req.status >= 400)
+      this.error(strings.formatStringFromName("validator.invalidLaunchPathBadHttpCode", [indexURL, req.status], 2));
+    deferred.resolve();
+  };
+  req.onerror = () => {
+    this.error(strings.formatStringFromName("validator.invalidLaunchPath", [indexURL], 1));
+    deferred.resolve();
+  };
+
+  try {
+    req.send(null);
+  } catch(e) {
+    this.error(strings.formatStringFromName("validator.invalidLaunchPath", [indexURL], 1));
+    deferred.resolve();
+  }
+
+  return deferred.promise;
+}
+
 AppValidator.prototype.validateType = function (manifest) {
   let appType = manifest.type || "web";
   if (["web", "privileged", "certified"].indexOf(appType) === -1) {
     this.error(strings.formatStringFromName("validator.invalidAppType", [appType], 1));
   } else if (this.project.type == "hosted" &&
              ["certified", "privileged"].indexOf(appType) !== -1) {
     this.error(strings.formatStringFromName("validator.invalidHostedPriviledges", [appType], 1));
   }
@@ -139,14 +202,15 @@ AppValidator.prototype.validate = functi
   this.errors = [];
   this.warnings = [];
   return this._getManifest().
     then((function (manifest) {
       if (manifest) {
         this.manifest = manifest;
         this.validateManifest(manifest);
         this.validateType(manifest);
+        return this.validateLaunchPath(manifest);
       }
     }).bind(this));
 }
 
 exports.AppValidator = AppValidator;
 
--- a/browser/devtools/app-manager/test/chrome.ini
+++ b/browser/devtools/app-manager/test/chrome.ini
@@ -1,8 +1,11 @@
 [DEFAULT]
-support-files = hosted_app.manifest
+support-files =
+  hosted_app.manifest
+  validator/*
 
 [test_connection_store.html]
 [test_device_store.html]
 [test_projects_store.html]
 [test_remain_connected.html]
 [test_template.html]
+[test_app_validator.html]
new file mode 100644
--- /dev/null
+++ b/browser/devtools/app-manager/test/test_app_validator.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+
+<html>
+
+  <head>
+    <meta charset="utf8">
+    <title></title>
+
+    <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+    <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
+    <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
+  </head>
+
+  <body>
+
+    <script type="application/javascript;version=1.8">
+    const Cu = Components.utils;
+    const Cc = Components.classes;
+    const Ci = Components.interfaces;
+    Cu.import("resource://testing-common/httpd.js");
+    const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+    const {require} = devtools;
+
+    const {AppValidator} = require("devtools/app-manager/app-validator");
+    const {Services} = Cu.import("resource://gre/modules/Services.jsm");
+    const nsFile = Components.Constructor("@mozilla.org/file/local;1",
+                                           "nsILocalFile", "initWithPath");
+    const cr = Cc["@mozilla.org/chrome/chrome-registry;1"]
+                 .getService(Ci.nsIChromeRegistry);
+    const strings = Services.strings.createBundle("chrome://browser/locale/devtools/app-manager.properties");
+    let httpserver, origin;
+
+    window.onload = function() {
+      SimpleTest.waitForExplicitFinish();
+
+      httpserver = new HttpServer();
+      httpserver.start(-1);
+      origin = "http://localhost:" + httpserver.identity.primaryPort + "/";
+
+      next();
+    }
+
+    function createHosted(path) {
+      let dirPath = getTestFilePath("validator/" + path);
+      httpserver.registerDirectory("/", nsFile(dirPath));
+      return new AppValidator({
+        type: "hosted",
+        location: origin + "/manifest.webapp"
+      });
+    }
+
+    function createPackaged(path) {
+      let dirPath = getTestFilePath("validator/" + path);
+      return new AppValidator({
+        type: "packaged",
+        location: dirPath
+      });
+    }
+
+    function next() {
+      let test = tests.shift();
+      if (test) {
+        try {
+          test();
+        } catch(e) {
+          console.error("exception", String(e), e, e.stack);
+        }
+      } else {
+        httpserver.stop(function() {
+          SimpleTest.finish();
+        });
+      }
+    }
+
+    let tests =  [
+      // Test a 100% valid example
+      function () {
+        let validator = createHosted("valid");
+        validator.validate().then(() => {
+            is(validator.errors.length, 0, "valid app got no error");
+            is(validator.warnings.length, 0, "valid app got no warning");
+
+            next();
+          });
+      },
+
+      function () {
+        let validator = createPackaged("valid");
+        validator.validate().then(() => {
+            is(validator.errors.length, 0, "valid packaged app got no error");
+            is(validator.warnings.length, 0, "valid packaged app got no warning");
+
+            next();
+          });
+      },
+
+      // Test a launch path that returns a 404
+      function () {
+        let validator = createHosted("wrong-launch-path");
+        validator.validate().then(() => {
+            is(validator.errors.length, 1, "app with non-existant launch path got an error");
+            is(validator.errors[0], strings.formatStringFromName("validator.invalidLaunchPathBadHttpCode", [origin + "wrong-path.html", 404], 2),
+               "with the right error message");
+            is(validator.warnings.length, 0, "but no warning");
+            next();
+          });
+      },
+      function () {
+        let validator = createPackaged("wrong-launch-path");
+        validator.validate().then(() => {
+            is(validator.errors.length, 1, "app with wrong path got an error");
+            let file = nsFile(validator.project.location);
+            file.append("wrong-path.html");
+            let url = Services.io.newFileURI(file);
+            is(validator.errors[0], strings.formatStringFromName("validator.invalidLaunchPath", [url.spec], 1),
+               "with the expected message");
+            is(validator.warnings.length, 0, "but no warning");
+
+            next();
+          });
+      },
+
+      // Test when using a non-absolute path for launch_path
+      function () {
+        let validator = createHosted("non-absolute-path");
+        validator.validate().then(() => {
+            is(validator.errors.length, 1, "app with non absolute path got an error");
+            is(validator.errors[0], strings.formatStringFromName("validator.nonAbsoluteLaunchPath", ["non-absolute.html"], 1),
+               "with expected message");
+            is(validator.warnings.length, 0, "but no warning");
+            next();
+          });
+      },
+      function () {
+        let validator = createPackaged("non-absolute-path");
+        validator.validate().then(() => {
+            is(validator.errors.length, 1, "app with non absolute path got an error");
+            is(validator.errors[0], strings.formatStringFromName("validator.nonAbsoluteLaunchPath", ["non-absolute.html"], 1),
+               "with expected message");
+            is(validator.warnings.length, 0, "but no warning");
+            next();
+          });
+      },
+    ];
+
+    </script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/devtools/app-manager/test/validator/non-absolute-path/manifest.webapp
@@ -0,0 +1,7 @@
+{
+  "name": "non-absolute path",
+  "icons": {
+    "128": "/icon.png"
+  },
+  "launch_path": "non-absolute.html"
+}
new file mode 100644
new file mode 100644
new file mode 100644
--- /dev/null
+++ b/browser/devtools/app-manager/test/validator/valid/manifest.webapp
@@ -0,0 +1,7 @@
+{
+  "name": "valid",
+  "launch_path": "/home.html",
+  "icons": {
+    "128": "/icon.png"
+  }
+}
new file mode 100644
new file mode 100644
--- /dev/null
+++ b/browser/devtools/app-manager/test/validator/wrong-launch-path/manifest.webapp
@@ -0,0 +1,7 @@
+{
+  "name": "valid",
+  "launch_path": "/wrong-path.html",
+  "icons": {
+    "128": "/icon.png"
+  }
+}
--- a/browser/devtools/app-manager/webapps-store.js
+++ b/browser/devtools/app-manager/webapps-store.js
@@ -253,16 +253,20 @@ WebappsStore.prototype = {
       }
 
       request.type = "getIconAsDataURL";
       client.request(request, (res) => {
         if (res.url) {
           proxifiedApp.iconURL = res.url;
         }
       });
+
+      // This app may have been running while being installed, so check the list
+      // of running apps again to get the right answer.
+      this._getRunningApps();
     });
   },
 
   _onAppUninstall: function(manifest) {
     this.object.all = this.object.all.filter((app) => {
       return (app.manifestURL != manifest);
     });
   },
--- a/browser/devtools/debugger/debugger-controller.js
+++ b/browser/devtools/debugger/debugger-controller.js
@@ -65,16 +65,19 @@ const EVENTS = {
   GLOBAL_SEARCH_MATCH_NOT_FOUND: "Debugger:GlobalSearch:MatchNotFound",
 
   // After the stackframes are cleared and debugger won't pause anymore.
   AFTER_FRAMES_CLEARED: "Debugger:AfterFramesCleared",
 
   // When the options popup is showing or hiding.
   OPTIONS_POPUP_SHOWING: "Debugger:OptionsPopupShowing",
   OPTIONS_POPUP_HIDDEN: "Debugger:OptionsPopupHidden",
+
+  // When the widgets layout has been changed.
+  LAYOUT_CHANGED: "Debugger:LayoutChanged"
 };
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/devtools/dbg-client.jsm");
 let promise = Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js").Promise;
 Cu.import("resource:///modules/devtools/shared/event-emitter.js");
 Cu.import("resource:///modules/devtools/sourceeditor/source-editor.jsm");
@@ -272,35 +275,35 @@ let DebuggerController = {
    *        Packet type.
    * @param object aPacket
    *        Packet received from the server.
    */
   _onTabNavigated: function(aType, aPacket) {
     switch (aType) {
       case "will-navigate": {
         // Reset UI.
-        DebuggerView._handleTabNavigation();
+        DebuggerView.handleTabNavigation();
 
         // Discard all the cached sources *before* the target starts navigating.
         // Sources may be fetched during navigation, in which case we don't
         // want to hang on to the old source contents.
         DebuggerController.SourceScripts.clearCache();
         DebuggerController.Parser.clearCache();
         SourceUtils.clearCache();
 
         // Prevent performing any actions that were scheduled before navigation.
         clearNamedTimeout("new-source");
         clearNamedTimeout("event-breakpoints-update");
         clearNamedTimeout("event-listeners-fetch");
         break;
       }
       case "navigate": {
-        this.ThreadState._handleTabNavigation();
-        this.StackFrames._handleTabNavigation();
-        this.SourceScripts._handleTabNavigation();
+        this.ThreadState.handleTabNavigation();
+        this.StackFrames.handleTabNavigation();
+        this.SourceScripts.handleTabNavigation();
         break;
       }
     }
   },
 
   /**
    * Called when the debugged tab is closed.
    */
@@ -396,18 +399,18 @@ let DebuggerController = {
       if (aResponse.error) {
         let msg = "Couldn't reconfigure thread: " + aResponse.message;
         Cu.reportError(msg);
         dumpn(msg);
         return;
       }
 
       // Reset the view and fetch all the sources again.
-      DebuggerView._handleTabNavigation();
-      this.SourceScripts._handleTabNavigation();
+      DebuggerView.handleTabNavigation();
+      this.SourceScripts.handleTabNavigation();
 
       // Update the stack frame list.
       this.activeThread._clearFrames();
       this.activeThread.fillFrames(CALL_STACK_PAGE_SIZE);
     });
   },
 
   /**
@@ -459,17 +462,17 @@ ThreadState.prototype = {
    * Connect to the current thread client.
    */
   connect: function() {
     dumpn("ThreadState is connecting...");
     this.activeThread.addListener("paused", this._update);
     this.activeThread.addListener("resumed", this._update);
     this.activeThread.pauseOnExceptions(Prefs.pauseOnExceptions,
                                         Prefs.ignoreCaughtExceptions);
-    this._handleTabNavigation();
+    this.handleTabNavigation();
   },
 
   /**
    * Disconnect from the client.
    */
   disconnect: function() {
     if (!this.activeThread) {
       return;
@@ -477,17 +480,17 @@ ThreadState.prototype = {
     dumpn("ThreadState is disconnecting...");
     this.activeThread.removeListener("paused", this._update);
     this.activeThread.removeListener("resumed", this._update);
   },
 
   /**
    * Handles any initialization on a tab navigation event issued by the client.
    */
-  _handleTabNavigation: function() {
+  handleTabNavigation: function() {
     if (!this.activeThread) {
       return;
     }
     dumpn("Handling tab navigation in the ThreadState");
     this._update();
   },
 
   /**
@@ -533,17 +536,17 @@ StackFrames.prototype = {
    */
   connect: function() {
     dumpn("StackFrames is connecting...");
     this.activeThread.addListener("paused", this._onPaused);
     this.activeThread.addListener("resumed", this._onResumed);
     this.activeThread.addListener("framesadded", this._onFrames);
     this.activeThread.addListener("framescleared", this._onFramesCleared);
     this.activeThread.addListener("blackboxchange", this._onBlackBoxChange);
-    this._handleTabNavigation();
+    this.handleTabNavigation();
   },
 
   /**
    * Disconnect from the client.
    */
   disconnect: function() {
     if (!this.activeThread) {
       return;
@@ -554,17 +557,17 @@ StackFrames.prototype = {
     this.activeThread.removeListener("framesadded", this._onFrames);
     this.activeThread.removeListener("framescleared", this._onFramesCleared);
     this.activeThread.removeListener("blackboxchange", this._onBlackBoxChange);
   },
 
   /**
    * Handles any initialization on a tab navigation event issued by the client.
    */
-  _handleTabNavigation: function() {
+  handleTabNavigation: function() {
     dumpn("Handling tab navigation in the StackFrames");
     // Nothing to do here yet.
   },
 
   /**
    * Handler for the thread client's paused notification.
    *
    * @param string aEvent
@@ -1002,17 +1005,17 @@ SourceScripts.prototype = {
   /**
    * Connect to the current thread client.
    */
   connect: function() {
     dumpn("SourceScripts is connecting...");
     this.debuggerClient.addListener("newGlobal", this._onNewGlobal);
     this.debuggerClient.addListener("newSource", this._onNewSource);
     this.activeThread.addListener("blackboxchange", this._onBlackBoxChange);
-    this._handleTabNavigation();
+    this.handleTabNavigation();
   },
 
   /**
    * Disconnect from the client.
    */
   disconnect: function() {
     if (!this.activeThread) {
       return;
@@ -1028,17 +1031,17 @@ SourceScripts.prototype = {
    */
   clearCache: function() {
     this._cache.clear();
   },
 
   /**
    * Handles any initialization on a tab navigation event issued by the client.
    */
-  _handleTabNavigation: function() {
+  handleTabNavigation: function() {
     if (!this.activeThread) {
       return;
     }
     dumpn("Handling tab navigation in the SourceScripts");
 
     // Retrieve the list of script sources known to the server from before
     // the client was ready to handle "newSource" notifications.
     this.activeThread.getSources(this._onSourcesAdded);
@@ -1897,16 +1900,19 @@ DebuggerController.Breakpoints.DOM = new
 
 /**
  * Export some properties to the global scope for easier access.
  */
 Object.defineProperties(window, {
   "gTarget": {
     get: function() DebuggerController._target
   },
+  "gHostType": {
+    get: function() DebuggerView._hostType
+  },
   "gClient": {
     get: function() DebuggerController.client
   },
   "gThreadClient": {
     get: function() DebuggerController.activeThread
   },
   "gCallStackPageSize": {
     get: function() CALL_STACK_PAGE_SIZE
--- a/browser/devtools/debugger/debugger-panel.js
+++ b/browser/devtools/debugger/debugger-panel.js
@@ -11,18 +11,20 @@ const EventEmitter = require("devtools/s
 
 function DebuggerPanel(iframeWindow, toolbox) {
   this.panelWin = iframeWindow;
   this._toolbox = toolbox;
   this._destroyer = null;
 
   this._view = this.panelWin.DebuggerView;
   this._controller = this.panelWin.DebuggerController;
+  this._view._hostType = this._toolbox.hostType;
   this._controller._target = this.target;
 
+  this.handleHostChanged = this.handleHostChanged.bind(this);
   this.highlightWhenPaused = this.highlightWhenPaused.bind(this);
   this.unhighlightWhenResumed = this.unhighlightWhenResumed.bind(this);
 
   EventEmitter.decorate(this);
 };
 
 exports.DebuggerPanel = DebuggerPanel;
 
@@ -42,16 +44,17 @@ DebuggerPanel.prototype = {
     } else {
       targetPromise = promise.resolve(this.target);
     }
 
     return targetPromise
       .then(() => this._controller.startupDebugger())
       .then(() => this._controller.connect())
       .then(() => {
+        this._toolbox.on("host-changed", this.handleHostChanged);
         this.target.on("thread-paused", this.highlightWhenPaused);
         this.target.on("thread-resumed", this.unhighlightWhenResumed);
         this.isReady = true;
         this.emit("ready");
         return this;
       })
       .then(null, function onError(aReason) {
         Cu.reportError("DebuggerPanel open failed. " +
@@ -82,16 +85,20 @@ DebuggerPanel.prototype = {
   addBreakpoint: function(aLocation, aOptions) {
     return this._controller.Breakpoints.addBreakpoint(aLocation, aOptions);
   },
 
   removeBreakpoint: function(aLocation) {
     return this._controller.Breakpoints.removeBreakpoint(aLocation);
   },
 
+  handleHostChanged: function() {
+    this._view.handleHostChanged(this._toolbox.hostType);
+  },
+
   highlightWhenPaused: function() {
     this._toolbox.highlightTool("jsdebugger");
 
     // Also raise the toolbox window if it is undocked or select the
     // corresponding tab when toolbox is docked.
     this._toolbox.raise();
   },
 
--- a/browser/devtools/debugger/debugger-view.js
+++ b/browser/devtools/debugger/debugger-view.js
@@ -105,47 +105,53 @@ let DebuggerView = {
   },
 
   /**
    * Initializes the UI for all the displayed panes.
    */
   _initializePanes: function() {
     dumpn("Initializing the DebuggerView panes");
 
+    this._body = document.getElementById("body");
+    this._editorDeck = document.getElementById("editor-deck");
     this._sourcesPane = document.getElementById("sources-pane");
     this._instrumentsPane = document.getElementById("instruments-pane");
     this._instrumentsPaneToggleButton = document.getElementById("instruments-pane-toggle");
 
     this.showEditor = this.showEditor.bind(this);
     this.showBlackBoxMessage = this.showBlackBoxMessage.bind(this);
     this.showProgressBar = this.showProgressBar.bind(this);
     this.maybeShowBlackBoxMessage = this.maybeShowBlackBoxMessage.bind(this);
-    this._editorDeck = document.getElementById("editor-deck");
 
     this._onTabSelect = this._onInstrumentsPaneTabSelect.bind(this);
     this._instrumentsPane.tabpanels.addEventListener("select", this._onTabSelect);
 
     this._collapsePaneString = L10N.getStr("collapsePanes");
     this._expandPaneString = L10N.getStr("expandPanes");
 
     this._sourcesPane.setAttribute("width", Prefs.sourcesWidth);
     this._instrumentsPane.setAttribute("width", Prefs.instrumentsWidth);
     this.toggleInstrumentsPane({ visible: Prefs.panesVisibleOnStartup });
+
+    // Side hosts requires a different arrangement of the debugger widgets.
+    if (gHostType == "side") {
+      this.handleHostChanged(gHostType);
+    }
   },
 
   /**
    * Destroys the UI for all the displayed panes.
    */
   _destroyPanes: function() {
     dumpn("Destroying the DebuggerView panes");
 
-    Prefs.sourcesWidth = this._sourcesPane.getAttribute("width");
-    Prefs.instrumentsWidth = this._instrumentsPane.getAttribute("width");
-
-    this._instrumentsPane.tabpanels.removeEventListener("select", this._onTabSelect);
+    if (gHostType != "side") {
+      Prefs.sourcesWidth = this._sourcesPane.getAttribute("width");
+      Prefs.instrumentsWidth = this._instrumentsPane.getAttribute("width");
+    }
 
     this._sourcesPane = null;
     this._instrumentsPane = null;
     this._instrumentsPaneToggleButton = null;
   },
 
   /**
    * Initializes the VariablesView instance and attaches a controller.
@@ -512,19 +518,78 @@ let DebuggerView = {
    */
   _onInstrumentsPaneTabSelect: function() {
     if (this._instrumentsPane.selectedTab.id == "events-tab") {
       DebuggerController.Breakpoints.DOM.scheduleEventListenersFetch();
     }
   },
 
   /**
+   * Handles a host change event issued by the parent toolbox.
+   *
+   * @param string aType
+   *        The host type, either "bottom", "side" or "window".
+   */
+  handleHostChanged: function(aType) {
+    let newLayout = "";
+
+    if (aType == "side") {
+      newLayout = "vertical";
+      this._enterVerticalLayout();
+    } else {
+      newLayout = "horizontal";
+      this._enterHorizontalLayout();
+    }
+
+    this._hostType = aType;
+    this._body.setAttribute("layout", newLayout);
+    window.emit(EVENTS.LAYOUT_CHANGED, newLayout);
+  },
+
+  /**
+   * Switches the debugger widgets to a horizontal layout.
+   */
+  _enterVerticalLayout: function() {
+    let normContainer = document.getElementById("debugger-widgets");
+    let vertContainer = document.getElementById("vertical-layout-panes-container");
+
+    // Move the soruces and instruments panes in a different container.
+    let splitter = document.getElementById("sources-and-instruments-splitter");
+    vertContainer.insertBefore(this._sourcesPane, splitter);
+    vertContainer.appendChild(this._instrumentsPane);
+
+    // Make sure the vertical layout container's height doesn't repeatedly
+    // grow or shrink based on the displayed sources, variables etc.
+    vertContainer.setAttribute("height",
+      vertContainer.getBoundingClientRect().height);
+  },
+
+  /**
+   * Switches the debugger widgets to a vertical layout.
+   */
+  _enterHorizontalLayout: function() {
+    let normContainer = document.getElementById("debugger-widgets");
+    let vertContainer = document.getElementById("vertical-layout-panes-container");
+
+    // The sources and instruments pane need to be inserted at their
+    // previous locations in their normal container.
+    let splitter = document.getElementById("sources-and-editor-splitter");
+    normContainer.insertBefore(this._sourcesPane, splitter);
+    normContainer.appendChild(this._instrumentsPane);
+
+    // Revert to the preferred sources and instruments widths, because
+    // they flexed in the vertical layout.
+    this._sourcesPane.setAttribute("width", Prefs.sourcesWidth);
+    this._instrumentsPane.setAttribute("width", Prefs.instrumentsWidth);
+  },
+
+  /**
    * Handles any initialization on a tab navigation event issued by the client.
    */
-  _handleTabNavigation: function() {
+  handleTabNavigation: function() {
     dumpn("Handling tab navigation in the DebuggerView");
 
     this.Filtering.clearSearch();
     this.FilteredSources.clearView();
     this.FilteredFunctions.clearView();
     this.GlobalSearch.clearView();
     this.ChromeGlobals.empty();
     this.StackFrames.empty();
@@ -552,22 +617,23 @@ let DebuggerView = {
   StackFrames: null,
   Sources: null,
   Variables: null,
   WatchExpressions: null,
   EventListeners: null,
   editor: null,
   _editorSource: {},
   _loadingText: "",
+  _body: null,
+  _editorDeck: null,
   _sourcesPane: null,
   _instrumentsPane: null,
   _instrumentsPaneToggleButton: null,
   _collapsePaneString: "",
-  _expandPaneString: "",
-  _editorDeck: null,
+  _expandPaneString: ""
 };
 
 /**
  * A stacked list of items, compatible with WidgetMethods instances, used for
  * displaying views like the watch expressions, filtering or search results etc.
  *
  * You should never need to access these methods directly, use the wrapped
  * WidgetMethods instead.
--- a/browser/devtools/debugger/debugger.css
+++ b/browser/devtools/debugger/debugger.css
@@ -21,8 +21,36 @@
   overflow-y: auto;
 }
 
 /* Toolbar controls */
 
 .devtools-toolbarbutton:not([label]) > .toolbarbutton-text {
   display: none;
 }
+
+/* Horizontal vs. vertical layout */
+
+#body[layout=vertical] #debugger-widgets {
+  -moz-box-orient: vertical;
+}
+
+#body[layout=vertical] #sources-pane {
+  -moz-box-flex: 1;
+}
+
+#body[layout=vertical] #instruments-pane {
+  -moz-box-flex: 2;
+}
+
+#body[layout=vertical] #instruments-pane-toggle {
+  display: none;
+}
+
+#body[layout=vertical] #sources-and-editor-splitter,
+#body[layout=vertical] #editor-and-instruments-splitter {
+  display: none;
+}
+
+#body[layout=horizontal] #vertical-layout-splitter,
+#body[layout=horizontal] #vertical-layout-panes-container {
+  display: none;
+}
--- a/browser/devtools/debugger/debugger.xul
+++ b/browser/devtools/debugger/debugger.xul
@@ -278,18 +278,19 @@
          modifiers="accel shift"
          command="addWatchExpressionCommand"/>
     <key id="removeAllWatchExpressionsKey"
          key="&debuggerUI.removeAllWatch.key;"
          modifiers="accel alt"
          command="removeAllWatchExpressionsCommand"/>
   </keyset>
 
-  <vbox id="body" flex="1">
-    <toolbar class="devtools-toolbar">
+  <vbox id="body" layout="horizontal" flex="1">
+    <toolbar id="debugger-toolbar"
+             class="devtools-toolbar">
       <hbox id="debugger-controls">
         <toolbarbutton id="resume"
                        class="devtools-toolbarbutton"
                        tabindex="0"/>
         <toolbarbutton id="step-over"
                        class="devtools-toolbarbutton"
                        tabindex="0"/>
         <toolbarbutton id="step-in"
@@ -310,72 +311,78 @@
                      tooltiptext="&debuggerUI.panesButton.tooltip;"
                      tabindex="0"/>
       <toolbarbutton id="debugger-options"
                      class="devtools-option-toolbarbutton"
                      tooltiptext="&debuggerUI.optsButton.tooltip;"
                      popup="debuggerPrefsContextMenu"
                      tabindex="0"/>
     </toolbar>
-    <vbox flex="1">
-      <scrollbox id="globalsearch" orient="vertical" hidden="true"/>
-      <splitter class="devtools-horizontal-splitter" hidden="true"/>
-      <hbox flex="1">
-        <vbox id="sources-container">
-          <vbox id="sources-pane" flex="1">
-            <vbox id="sources" flex="1"/>
-          </vbox>
-          <toolbar id="sources-toolbar" class="devtools-toolbar">
-            <toolbarbutton id="pretty-print"
-                           label="{}"
-                           tooltiptext="&debuggerUI.sources.prettyPrint;"
-                           class="devtools-toolbarbutton devtools-monospace"
-                           command="prettyPrintCommand"
-                           hidden="true"/>
-          </toolbar>
+    <scrollbox id="globalsearch" orient="vertical" hidden="true"/>
+    <splitter class="devtools-horizontal-splitter" hidden="true"/>
+    <hbox id="debugger-widgets" flex="1">
+      <vbox id="sources-pane">
+        <vbox id="sources" flex="1"/>
+        <toolbar id="sources-toolbar" class="devtools-toolbar">
+          <toolbarbutton id="pretty-print"
+                         label="{}"
+                         tooltiptext="&debuggerUI.sources.prettyPrint;"
+                         class="devtools-toolbarbutton devtools-monospace"
+                         command="prettyPrintCommand"
+                         hidden="true"/>
+        </toolbar>
+      </vbox>
+      <splitter id="sources-and-editor-splitter"
+                class="devtools-side-splitter"/>
+      <deck id="editor-deck" flex="4">
+        <vbox id="editor"/>
+        <vbox id="black-boxed-message" align="center" pack="center">
+          <label id="black-boxed-message-label">
+            &debuggerUI.blackBoxMessage.label;
+          </label>
+          <button id="black-boxed-message-button"
+                  class="devtools-toolbarbutton"
+                  label="&debuggerUI.blackBoxMessage.unBlackBoxButton;"
+                  image="chrome://browser/skin/devtools/blackBoxMessageEye.png"
+                  command="unBlackBoxCommand"/>
         </vbox>
-        <splitter class="devtools-side-splitter"/>
-        <deck id="editor-deck" flex="1" selectedIndex="0">
-          <vbox id="editor"/>
-          <vbox id="black-boxed-message" align="center">
-            <label id="black-boxed-message-label">
-              &debuggerUI.blackBoxMessage.label;
-            </label>
-            <button id="black-boxed-message-button"
-                    class="devtools-toolbarbutton"
-                    label="&debuggerUI.blackBoxMessage.unBlackBoxButton;"
-                    image="chrome://browser/skin/devtools/blackBoxMessageEye.png"
-                    command="unBlackBoxCommand"/>
-          </vbox>
-          <vbox id="source-progress-container" align="center" pack="center">
-            <progressmeter id="source-progress"
-                           mode="undetermined"/>
-          </vbox>
-        </deck>
-        <splitter class="devtools-side-splitter"/>
-        <tabbox id="instruments-pane"
-                class="devtools-sidebar-tabs"
-                hidden="true">
-          <tabs>
-            <tab id="variables-tab" label="&debuggerUI.tabs.variables;"/>
-            <tab id="events-tab" label="&debuggerUI.tabs.events;"/>
-          </tabs>
-          <tabpanels flex="1">
-            <tabpanel id="variables-tabpanel">
-              <vbox id="expressions"/>
-              <splitter class="devtools-horizontal-splitter"/>
-              <vbox id="variables" flex="1"/>
-            </tabpanel>
-            <tabpanel id="events-tabpanel">
-              <vbox id="event-listeners" flex="1"/>
-            </tabpanel>
-          </tabpanels>
-        </tabbox>
+        <vbox id="source-progress-container" align="center" pack="center">
+          <progressmeter id="source-progress"
+                         mode="undetermined"/>
+        </vbox>
+      </deck>
+      <splitter id="editor-and-instruments-splitter"
+                class="devtools-side-splitter"/>
+      <tabbox id="instruments-pane"
+              class="devtools-sidebar-tabs"
+              hidden="true">
+        <tabs>
+          <tab id="variables-tab" label="&debuggerUI.tabs.variables;"/>
+          <tab id="events-tab" label="&debuggerUI.tabs.events;"/>
+        </tabs>
+        <tabpanels flex="1">
+          <tabpanel id="variables-tabpanel">
+            <vbox id="expressions"/>
+            <splitter class="devtools-horizontal-splitter"/>
+            <vbox id="variables" flex="1"/>
+          </tabpanel>
+          <tabpanel id="events-tabpanel">
+            <vbox id="event-listeners" flex="1"/>
+          </tabpanel>
+        </tabpanels>
+      </tabbox>
+      <splitter id="vertical-layout-splitter"
+                class="devtools-horizontal-splitter"/>
+      <hbox id="vertical-layout-panes-container">
+        <splitter id="sources-and-instruments-splitter"
+                  class="devtools-side-splitter"/>
+        <!-- The sources-pane and instruments-pane will be moved in this
+             container if the toolbox's host requires it. -->
       </hbox>
-    </vbox>
+    </hbox>
   </vbox>
 
   <panel id="searchbox-help-panel"
          level="top"
          type="arrow"
          position="before_start"
          noautofocus="true"
          consumeoutsideclicks="false">
--- a/browser/devtools/debugger/test/browser.ini
+++ b/browser/devtools/debugger/test/browser.ini
@@ -91,16 +91,17 @@ support-files =
 [browser_dbg_cmd-dbg.js]
 [browser_dbg_conditional-breakpoints-01.js]
 [browser_dbg_conditional-breakpoints-02.js]
 [browser_dbg_debugger-statement.js]
 [browser_dbg_editor-contextmenu.js]
 [browser_dbg_editor-mode.js]
 [browser_dbg_function-display-name.js]
 [browser_dbg_globalactor.js]
+[browser_dbg_host-layout.js]
 [browser_dbg_iframes.js]
 [browser_dbg_instruments-pane-collapse.js]
 [browser_dbg_listaddons.js]
 [browser_dbg_listtabs-01.js]
 [browser_dbg_listtabs-02.js]
 [browser_dbg_location-changes-01-simple.js]
 [browser_dbg_location-changes-02-blank.js]
 [browser_dbg_location-changes-03-new.js]
new file mode 100644
--- /dev/null
+++ b/browser/devtools/debugger/test/browser_dbg_host-layout.js
@@ -0,0 +1,104 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * This if the debugger's layout is correctly modified when the toolbox's
+ * host changes.
+ */
+
+let gDefaultHostType = Services.prefs.getCharPref("devtools.toolbox.host");
+
+function test() {
+  Task.spawn(function() {
+    yield testHosts(["bottom", "side", "window"], ["horizontal", "vertical", "horizontal"]);
+    yield testHosts(["side", "bottom", "side"], ["vertical", "horizontal", "vertical"]);
+    yield testHosts(["bottom", "side", "bottom"], ["horizontal", "vertical", "horizontal"]);
+    yield testHosts(["side", "window", "side"], ["vertical", "horizontal", "vertical"]);
+    yield testHosts(["window", "side", "window"], ["horizontal", "vertical", "horizontal"]);
+    finish();
+  });
+}
+
+function testHosts(aHostTypes, aLayoutTypes) {
+  let [firstHost, secondHost, thirdHost] = aHostTypes;
+  let [firstLayout, secondLayout, thirdLayout] = aLayoutTypes;
+
+  Services.prefs.setCharPref("devtools.toolbox.host", firstHost);
+
+  return Task.spawn(function() {
+    let [tab, debuggee, panel] = yield initDebugger("about:blank");
+    yield testHost(tab, debuggee, panel, firstHost, firstLayout);
+    yield switchAndTestHost(tab, debuggee, panel, secondHost, secondLayout);
+    yield switchAndTestHost(tab, debuggee, panel, thirdHost, thirdLayout);
+    yield teardown(panel);
+  });
+}
+
+function switchAndTestHost(aTab, aDebuggee, aPanel, aHostType, aLayoutType) {
+  let gToolbox = aPanel._toolbox;
+  let gDebugger = aPanel.panelWin;
+
+  return Task.spawn(function() {
+    let layoutChanged = once(gDebugger, gDebugger.EVENTS.LAYOUT_CHANGED);
+    let hostChanged = gToolbox.switchHost(aHostType);
+
+    yield hostChanged;
+    ok(true, "The toolbox's host has changed.");
+
+    yield layoutChanged;
+    ok(true, "The debugger's layout has changed.");
+
+    yield testHost(aTab, aDebuggee, aPanel, aHostType, aLayoutType);
+  });
+
+  function once(aTarget, aEvent) {
+    let deferred = promise.defer();
+    aTarget.once(aEvent, deferred.resolve);
+    return deferred.promise;
+  }
+}
+
+function testHost(aTab, aDebuggee, aPanel, aHostType, aLayoutType) {
+  let gDebugger = aPanel.panelWin;
+  let gView = gDebugger.DebuggerView;
+
+  is(gView._hostType, aHostType,
+    "The default host type should've been set on the panel window (1).");
+  is(gDebugger.gHostType, aHostType,
+    "The default host type should've been set on the panel window (2).");
+
+  is(gView._body.getAttribute("layout"), aLayoutType,
+    "The default host type is present as an attribute on the panel's body.");
+
+  if (aLayoutType == "horizontal") {
+    is(gView._sourcesPane.parentNode.id, "debugger-widgets",
+      "The sources pane's parent is correct for the horizontal layout.");
+    is(gView._instrumentsPane.parentNode.id, "debugger-widgets",
+      "The instruments pane's parent is correct for the horizontal layout.");
+  } else {
+    is(gView._sourcesPane.parentNode.id, "vertical-layout-panes-container",
+      "The sources pane's parent is correct for the vertical layout.");
+    is(gView._instrumentsPane.parentNode.id, "vertical-layout-panes-container",
+      "The instruments pane's parent is correct for the vertical layout.");
+  }
+
+  let widgets = gDebugger.document.getElementById("debugger-widgets").childNodes;
+  let panes = gDebugger.document.getElementById("vertical-layout-panes-container").childNodes;
+
+  if (aLayoutType == "horizontal") {
+    is(widgets.length, 7, // 2 panes, 1 editor, 3 splitters and a phantom box.
+      "Found the correct number of debugger widgets.");
+    is(panes.length, 1, // 1 lonely splitter in the phantom box.
+      "Found the correct number of debugger panes.");
+  } else {
+    is(widgets.length, 5, // 1 editor, 3 splitters and a phantom box.
+      "Found the correct number of debugger widgets.");
+    is(panes.length, 3, // 2 panes and 1 splitter in the phantom box.
+      "Found the correct number of debugger panes.");
+  }
+}
+
+registerCleanupFunction(function() {
+  Services.prefs.setCharPref("devtools.toolbox.host", gDefaultHostType);
+  gDefaultHostType = null;
+});
--- a/browser/devtools/framework/connect/connect.xhtml
+++ b/browser/devtools/framework/connect/connect.xhtml
@@ -40,11 +40,11 @@
       <p>&availableTabs;</p>
       <ul class="actors" id="tabActors"></ul>
       <p>&availableProcesses;</p>
       <ul class="actors" id="globalActors"></ul>
     </section>
     <section id="connecting">
       <p><img src="chrome://browser/skin/tabbrowser/loading.png"></img> &connecting;</p>
     </section>
-    <footer>&help2;</footer>
+    <footer>&remoteHelp;<a target='_' href='https://developer.mozilla.org/docs/Tools/Remote_Debugging'>&remoteDocumentation;</a>&remoteHelpSuffix;</footer>
   </body>
 </html>
--- a/browser/devtools/inspector/test/browser_inspector_changes.js
+++ b/browser/devtools/inspector/test/browser_inspector_changes.js
@@ -11,28 +11,16 @@ function test() {
 
   function createDocument()
   {
     doc.body.innerHTML = '<div id="testdiv">Test div!</div>';
     doc.title = "Inspector Change Test";
     openInspector(runInspectorTests);
   }
 
-
-  function getInspectorComputedProp(aName)
-  {
-    let computedview = inspector.sidebar.getWindowForTab("computedview").computedview.view;
-    for each (let view in computedview.propertyViews) {
-      if (view.name == aName) {
-        return view;
-      }
-    }
-    return null;
-  }
-
   function getInspectorRuleProp(aName)
   {
     let ruleview = inspector.sidebar.getWindowForTab("ruleview").ruleview.view;
     let inlineStyles = ruleview._elementStyle.rules[0];
 
     for each (let prop in inlineStyles.textProps) {
       if (prop.name == aName) {
         return prop;
@@ -59,34 +47,34 @@ function test() {
     });
   }
 
   function computedStylePanelTests()
   {
     let computedview = inspector.sidebar.getWindowForTab("computedview").computedview;
     ok(computedview, "Style Panel has a cssHtmlTree");
 
-    let propView = getInspectorComputedProp("font-size");
-    is(propView.value, "10px", "Style inspector should be showing the correct font size.");
+    let fontSize = getComputedPropertyValue("font-size");
+    is(fontSize, "10px", "Style inspector should be showing the correct font size.");
 
     testDiv.style.cssText = "font-size: 15px; color: red;";
 
     // Wait until layout-change fires from mutation to skip earlier refresh event
     inspector.once("layout-change", () => {
       inspector.once("computed-view-refreshed", computedStylePanelAfterChange);
     });
   }
 
   function computedStylePanelAfterChange()
   {
-    let propView = getInspectorComputedProp("font-size");
-    is(propView.value, "15px", "Style inspector should be showing the new font size.");
+    let fontSize = getComputedPropertyValue("font-size");
+    is(fontSize, "15px", "Style inspector should be showing the new font size.");
 
-    let propView = getInspectorComputedProp("color");
-    is(propView.value, "#F00", "Style inspector should be showing the new color.");
+    let color = getComputedPropertyValue("color");
+    is(color, "#F00", "Style inspector should be showing the new color.");
 
     computedStylePanelNotActive();
   }
 
   function computedStylePanelNotActive()
   {
     // Tests changes made while the style panel is not active.
     inspector.sidebar.select("ruleview");
@@ -96,24 +84,24 @@ function test() {
     testDiv.style.textAlign = "center";
 
     inspector.once("computed-view-refreshed", computedStylePanelAfterSwitch);
     inspector.sidebar.select("computedview");
   }
 
   function computedStylePanelAfterSwitch()
   {
-    let propView = getInspectorComputedProp("font-size");
-    is(propView.value, "20px", "Style inspector should be showing the new font size.");
+    let fontSize = getComputedPropertyValue("font-size");
+    is(fontSize, "20px", "Style inspector should be showing the new font size.");
 
-    let propView = getInspectorComputedProp("color");
-    is(propView.value, "#00F", "Style inspector should be showing the new color.");
+    let color = getComputedPropertyValue("color");
+    is(color, "#00F", "Style inspector should be showing the new color.");
 
-    let propView = getInspectorComputedProp("text-align");
-    is(propView.value, "center", "Style inspector should be showing the new text align.");
+    let textAlign = getComputedPropertyValue("text-align");
+    is(textAlign, "center", "Style inspector should be showing the new text align.");
 
     rulePanelTests();
   }
 
   function rulePanelTests()
   {
     inspector.sidebar.select("ruleview");
     let ruleview = inspector.sidebar.getWindowForTab("ruleview").ruleview;
@@ -132,17 +120,17 @@ function test() {
   }
 
   function rulePanelAfterChange()
   {
     let propView = getInspectorRuleProp("text-align");
     is(propView.value, "right", "Style inspector should be showing the new text align.");
 
     let propView = getInspectorRuleProp("color");
-    is(propView.value, "#FAFAD2", "Style inspector should be showing the new color.")
+    is(propView.value, "lightgoldenrodyellow", "Style inspector should be showing the new color.")
 
     let propView = getInspectorRuleProp("font-size");
     is(propView.value, "3em", "Style inspector should be showing the new font size.");
 
     let propView = getInspectorRuleProp("text-transform");
     is(propView.value, "uppercase", "Style inspector should be showing the new text transform.");
 
     finishTest();
--- a/browser/devtools/inspector/test/head.js
+++ b/browser/devtools/inspector/test/head.js
@@ -105,16 +105,21 @@ function computedViewTree()
 
 function ruleView()
 {
   let sidebar = getActiveInspector().sidebar;
   let iframe = sidebar.tabbox.querySelector(".iframe-ruleview");
   return iframe.contentWindow.ruleView;
 }
 
+function getComputedView() {
+  let inspector = getActiveInspector();
+  return inspector.sidebar.getWindowForTab("computedview").computedview.view;
+}
+
 function synthesizeKeyFromKeyTag(aKeyId) {
   let key = document.getElementById(aKeyId);
   isnot(key, null, "Successfully retrieved the <key> node");
 
   let modifiersAttr = key.getAttribute("modifiers");
 
   let name = null;
 
@@ -164,8 +169,22 @@ function focusSearchBoxUsingShortcut(pan
   let searchBox = panelWin.document.getElementById("inspector-searchbox");
   searchBox.addEventListener("focus", function onFocus() {
     searchBox.removeEventListener("focus", onFocus, false);
     callback && callback();
   }, false);
   EventUtils.synthesizeKey(name, modifiers);
 }
 
+function getComputedPropertyValue(aName)
+{
+  let computedview = getComputedView();
+  let props = computedview.styleDocument.querySelectorAll(".property-view");
+
+  for (let prop of props) {
+    let name = prop.querySelector(".property-name");
+
+    if (name.textContent === aName) {
+      let value = prop.querySelector(".property-value");
+      return value.textContent;
+    }
+  }
+}
--- a/browser/devtools/markupview/markup-view.js
+++ b/browser/devtools/markupview/markup-view.js
@@ -13,16 +13,17 @@ const DEFAULT_MAX_CHILDREN = 100;
 const COLLAPSE_ATTRIBUTE_LENGTH = 120;
 const COLLAPSE_DATA_URL_REGEX = /^data.+base64/;
 const COLLAPSE_DATA_URL_LENGTH = 60;
 const CONTAINER_FLASHING_DURATION = 500;
 
 const {UndoStack} = require("devtools/shared/undo");
 const {editableField, InplaceEditor} = require("devtools/shared/inplace-editor");
 const {gDevTools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
+const {OutputParser} = require("devtools/output-parser");
 const promise = require("sdk/core/promise");
 
 Cu.import("resource://gre/modules/devtools/LayoutHelpers.jsm");
 Cu.import("resource://gre/modules/devtools/Templater.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
 loader.lazyGetter(this, "DOMParser", function() {
  return Cc["@mozilla.org/xmlextras/domparser;1"].createInstance(Ci.nsIDOMParser);
@@ -50,16 +51,17 @@ loader.lazyGetter(this, "AutocompletePop
  *        An iframe in which the caller has kindly loaded markup-view.xhtml.
  */
 function MarkupView(aInspector, aFrame, aControllerWindow) {
   this._inspector = aInspector;
   this.walker = this._inspector.walker;
   this._frame = aFrame;
   this.doc = this._frame.contentDocument;
   this._elt = this.doc.querySelector("#root");
+  this._outputParser = new OutputParser();
 
   this.layoutHelpers = new LayoutHelpers(this.doc.defaultView);
 
   try {
     this.maxChildren = Services.prefs.getIntPref("devtools.markup.pagesize");
   } catch(ex) {
     this.maxChildren = DEFAULT_MAX_CHILDREN;
   }
@@ -781,16 +783,18 @@ MarkupView.prototype = {
     delete this.undo;
 
     this.popup.destroy();
     delete this.popup;
 
     this._frame.removeEventListener("focus", this._boundFocus, false);
     delete this._boundFocus;
 
+    delete this._outputParser;
+
     if (this._boundUpdatePreview) {
       this._frame.contentWindow.removeEventListener("scroll",
         this._boundUpdatePreview, true);
       delete this._boundUpdatePreview;
     }
 
     if (this._boundResizePreview) {
       this._frame.contentWindow.removeEventListener("resize",
@@ -1532,28 +1536,98 @@ ElementEditor.prototype = {
     // Remove the old version of this attribute from the DOM.
     let oldAttr = this.attrs[aAttr.name];
     if (oldAttr && oldAttr.parentNode) {
       oldAttr.parentNode.removeChild(oldAttr);
     }
 
     this.attrs[aAttr.name] = attr;
 
-    let collapsedValue;
-    if (aAttr.value.match(COLLAPSE_DATA_URL_REGEX)) {
-      collapsedValue = truncateString(aAttr.value, COLLAPSE_DATA_URL_LENGTH);
+    name.textContent = aAttr.name;
+
+    if (typeof aAttr.value !== "undefined") {
+      let outputParser = this.markup._outputParser;
+      let frag = outputParser.parseHTMLAttribute(aAttr.value);
+      frag = this._truncateFrag(frag);
+      val.appendChild(frag);
     }
-    else {
-      collapsedValue = truncateString(aAttr.value, COLLAPSE_ATTRIBUTE_LENGTH);
+
+    return attr;
+  },
+
+  /**
+   * We truncate HTML attributes to a text length defined by
+   * COLLAPSE_DATA_URL_LENGTH and COLLAPSE_ATTRIBUTE_LENGTH. Because we parse
+   * text into document fragments we need to process each fragment and truncate
+   * according to the fragment's textContent length.
+   *
+   * @param  {DocumentFragment} frag
+   *         The fragment to truncate.
+   * @return {[DocumentFragment]}
+   *         Truncated fragment.
+   */
+  _truncateFrag: function(frag) {
+    let chars = 0;
+    let text = frag.textContent;
+    let maxWidth = text.match(COLLAPSE_DATA_URL_REGEX) ?
+                            COLLAPSE_DATA_URL_LENGTH : COLLAPSE_ATTRIBUTE_LENGTH;
+    let overBy = text.length - maxWidth;
+    let children = frag.childNodes;
+    let croppedNode = null;
+
+    if (overBy <= 0) {
+      return frag;
     }
 
-    name.textContent = aAttr.name;
-    val.textContent = collapsedValue;
+    // For fragments containing only one single node we just need to truncate
+    // frag.textContent.
+    if (children.length === 1) {
+      let length = text.length;
+      let start = text.substr(0, maxWidth / 2);
+      let end = text.substr(length - maxWidth / 2, length - 1);
+
+      frag.textContent = start + "…" + end;
+      return frag;
+    }
+
+    // First maxWidth / 2 chars plus &hellip;
+    for (let i = 0; i < children.length; i++) {
+      let node = children[i];
+      let text = node.textContent;
 
-    return attr;
+      let numChars = text.length;
+      if (chars + numChars > maxWidth / 2) {
+        node.textContent = text.substr(0, chars + numChars - maxWidth / 2) + "…";
+        croppedNode = node;
+        break;
+      } else {
+        chars += numChars;
+      }
+    }
+
+    // Last maxWidth / two chars.
+    chars = 0;
+    for (let i = children.length - 1; i >= 0; i--) {
+      let node = children[i];
+      let text = node.textContent;
+
+      let numChars = text.length;
+      if (chars + numChars > maxWidth / 2) {
+        if (node !== croppedNode) {
+          node.parentNode.removeChild(node);
+          chars += numChars;
+        } else {
+          break;
+        }
+      } else {
+        chars += numChars;
+      }
+    }
+
+    return frag;
   },
 
   /**
    * Parse a user-entered attribute string and apply the resulting
    * attributes to the node.  This operation is undoable.
    *
    * @param string aValue the user-entered value.
    * @param Element aAttrNode the attribute editor that created this
--- a/browser/devtools/shared/test/browser_css_color.js
+++ b/browser/devtools/shared/test/browser_css_color.js
@@ -134,17 +134,17 @@ function testProcessCSSString() {
                  "background-color: transparent; " +
                  "border-top-color: rgba(0, 0, 255, 0.5);";
   let after = colorUtils.processCSSString(before);
 
   is(after, expected, "CSS string processed correctly");
 }
 
 function finishUp() {
-  Services = colorUtils.CssColor = Loader = null;
+  Services = colorUtils = Loader = null;
   gBrowser.removeCurrentTab();
   finish();
 }
 
 function getTestData() {
   return [
     {authored: "aliceblue", name: "aliceblue", hex: "#F0F8FF", hsl: "hsl(208, 100%, 97%)", rgb: "rgb(240, 248, 255)"},
     {authored: "antiquewhite", name: "antiquewhite", hex: "#FAEBD7", hsl: "hsl(34.286, 78%, 91%)", rgb: "rgb(250, 235, 215)"},
--- a/browser/devtools/shared/widgets/SideMenuWidget.jsm
+++ b/browser/devtools/shared/widgets/SideMenuWidget.jsm
@@ -56,17 +56,16 @@ this.SideMenuWidget = function SideMenuW
   this._list.setAttribute("theme", this._theme);
   this._list.setAttribute("with-arrows", this._showArrows);
   this._list.setAttribute("with-item-checkboxes", this._showItemCheckboxes);
   this._list.setAttribute("with-group-checkboxes", this._showGroupCheckboxes);
   this._list.setAttribute("tabindex", "0");
   this._list.addEventListener("keypress", e => this.emit("keyPress", e), false);
   this._list.addEventListener("mousedown", e => this.emit("mousePress", e), false);
   this._parent.appendChild(this._list);
-  this._boxObject = this._list.boxObject.QueryInterface(Ci.nsIScrollBoxObject);
 
   // Menu items can optionally be grouped.
   this._groupsByName = new Map(); // Can't use a WeakMap because keys are strings.
   this._orderedGroupElementsArray = [];
   this._orderedMenuElementsArray = [];
   this._itemsByElement = new Map();
 
   // This widget emits events that can be handled in a MenuContainer.
@@ -240,18 +239,19 @@ SideMenuWidget.prototype = {
    *        The element to make visible.
    */
   ensureElementIsVisible: function(aElement) {
     if (!aElement) {
       return;
     }
 
     // Ensure the element is visible but not scrolled horizontally.
-    this._boxObject.ensureElementIsVisible(aElement);
-    this._boxObject.scrollBy(-aElement.clientWidth, 0);
+    let boxObject = this._list.boxObject.QueryInterface(Ci.nsIScrollBoxObject);
+    boxObject.ensureElementIsVisible(aElement);
+    boxObject.scrollBy(-aElement.clientWidth, 0);
   },
 
   /**
    * Shows all the groups, even the ones with no visible children.
    */
   showEmptyGroups: function() {
     for (let group of this._orderedGroupElementsArray) {
       group.hidden = false;
@@ -427,17 +427,16 @@ SideMenuWidget.prototype = {
   window: null,
   document: null,
   _theme: "",
   _showArrows: false,
   _showItemCheckboxes: false,
   _showGroupCheckboxes: false,
   _parent: null,
   _list: null,
-  _boxObject: null,
   _selectedItem: null,
   _groupsByName: null,
   _orderedGroupElementsArray: null,
   _orderedMenuElementsArray: null,
   _itemsByElement: null,
   _ensureVisibleTimeout: null,
   _noticeTextContainer: null,
   _noticeTextNode: null,
--- a/browser/devtools/styleinspector/computed-view.js
+++ b/browser/devtools/styleinspector/computed-view.js
@@ -6,17 +6,18 @@
 
 const {Cc, Ci, Cu} = require("chrome");
 
 let ToolDefinitions = require("main").Tools;
 let {CssLogic} = require("devtools/styleinspector/css-logic");
 let {ELEMENT_STYLE} = require("devtools/server/actors/styles");
 let promise = require("sdk/core/promise");
 let {EventEmitter} = require("devtools/shared/event-emitter");
-let {colorUtils} = require("devtools/css-color");
+
+const {OutputParser} = require("devtools/output-parser");
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/PluralForm.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/devtools/Templater.jsm");
 
 let {gDevTools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
 
@@ -129,16 +130,18 @@ UpdateProcess.prototype = {
 function CssHtmlTree(aStyleInspector, aPageStyle)
 {
   this.styleWindow = aStyleInspector.window;
   this.styleDocument = aStyleInspector.window.document;
   this.styleInspector = aStyleInspector;
   this.pageStyle = aPageStyle;
   this.propertyViews = [];
 
+  this._outputParser = new OutputParser();
+
   let chromeReg = Cc["@mozilla.org/chrome/chrome-registry;1"].
     getService(Ci.nsIXULChromeRegistry);
   this.getRTLAttr = chromeReg.isLocaleRTL("global") ? "rtl" : "ltr";
 
   // Create bound methods.
   this.focusWindow = this.focusWindow.bind(this);
   this._onContextMenu = this._onContextMenu.bind(this);
   this._contextMenuUpdate = this._contextMenuUpdate.bind(this);
@@ -608,16 +611,18 @@ CssHtmlTree.prototype = {
 
   /**
    * Destructor for CssHtmlTree.
    */
   destroy: function CssHtmlTree_destroy()
   {
     delete this.viewedElement;
 
+    delete this._outputParser;
+
     // Remove event listeners
     this.includeBrowserStylesCheckbox.removeEventListener("command",
       this.includeBrowserStylesChanged);
     this.searchField.removeEventListener("command", this.filterChanged);
     gDevTools.off("pref-changed", this._handlePrefChange);
 
     // Cancel tree construction
     if (this._createViewsProcess) {
@@ -671,17 +676,17 @@ CssHtmlTree.prototype = {
 function PropertyInfo(aTree, aName) {
   this.tree = aTree;
   this.name = aName;
 }
 PropertyInfo.prototype = {
   get value() {
     if (this.tree._computed) {
       let value = this.tree._computed[this.name].value;
-      return colorUtils.processCSSString(value);
+      return value;
     }
   }
 };
 
 function createMenuItem(aMenu, aAttributes)
 {
   let item = aMenu.ownerDocument.createElementNS(XUL_NS, "menuitem");
 
@@ -867,17 +872,16 @@ PropertyView.prototype = {
 
     // Build the style value element
     this.valueNode = doc.createElementNS(HTML_NS, "div");
     this.valueNode.setAttribute("class", "property-value theme-fg-color1");
     // Reset its tabindex attribute otherwise, if an ellipsis is applied
     // it will be reachable via TABing
     this.valueNode.setAttribute("tabindex", "");
     this.valueNode.setAttribute("dir", "ltr");
-    this.valueNode.textContent = this.valueNode.title = this.value;
     // Make it hand over the focus to the container
     this.valueNode.addEventListener("click", this.onFocus, false);
     this.element.appendChild(this.valueNode);
 
     return this.element;
   },
 
   buildSelectorContainer: function PropertyView_buildSelectorContainer()
@@ -909,17 +913,26 @@ PropertyView.prototype = {
       this.valueNode.textContent = this.valueNode.title = "";
       this.matchedSelectorsContainer.parentNode.hidden = true;
       this.matchedSelectorsContainer.textContent = "";
       this.matchedExpander.removeAttribute("open");
       return;
     }
 
     this.tree.numVisibleProperties++;
-    this.valueNode.textContent = this.valueNode.title = this.propertyInfo.value;
+
+    let outputParser = this.tree._outputParser;
+    let frag = outputParser.parseCssProperty(this.propertyInfo.name,
+      this.propertyInfo.value,
+      {
+        colorSwatchClass: "computedview-colorswatch"
+      });
+    this.valueNode.innerHTML = "";
+    this.valueNode.appendChild(frag);
+
     this.refreshMatchedSelectors();
   },
 
   /**
    * Refresh the panel matched rules.
    */
   refreshMatchedSelectors: function PropertyView_refreshMatchedSelectors()
   {
@@ -1109,18 +1122,28 @@ SelectorView.prototype = {
   get sourceText()
   {
     return this.selectorInfo.sourceText;
   },
 
 
   get value()
   {
-    let val = this.selectorInfo.value;
-    return colorUtils.processCSSString(val);
+    return this.selectorInfo.value;
+  },
+
+  get outputFragment()
+  {
+    let outputParser = this.tree._outputParser;
+    let frag = outputParser.parseCssProperty(
+      this.selectorInfo.name,
+      this.selectorInfo.value, {
+      colorSwatchClass: "computedview-colorswatch"
+    });
+    return frag;
   },
 
   maybeOpenStyleEditor: function(aEvent)
   {
     let keyEvent = Ci.nsIDOMKeyEvent;
     if (aEvent.keyCode == keyEvent.DOM_VK_RETURN) {
       this.openStyleEditor();
     }
--- a/browser/devtools/styleinspector/computedview.xhtml
+++ b/browser/devtools/styleinspector/computedview.xhtml
@@ -98,17 +98,17 @@
               <a target="_blank" class="link theme-link"
                   onclick="${selector.openStyleEditor}"
                   onkeydown="${selector.maybeOpenStyleEditor}"
                   title="${selector.href}"
                   tabindex="0">${selector.source}</a>
             </span>
             <span dir="ltr" class="rule-text ${selector.statusClass} theme-fg-color3" title="${selector.statusText}">
               ${selector.sourceText}
-              <span class="other-property-value theme-fg-color1">${selector.value}</span>
+              <span class="other-property-value theme-fg-color1">${selector.outputFragment}</span>
             </span>
           </p>
         </loop>
       </div>
     </div>
 
   </body>
 </html>
--- a/browser/devtools/styleinspector/rule-view.js
+++ b/browser/devtools/styleinspector/rule-view.js
@@ -7,19 +7,20 @@
 "use strict";
 
 const {Cc, Ci, Cu} = require("chrome");
 const promise = require("sdk/core/promise");
 
 let {CssLogic} = require("devtools/styleinspector/css-logic");
 let {InplaceEditor, editableField, editableItem} = require("devtools/shared/inplace-editor");
 let {ELEMENT_STYLE, PSEUDO_ELEMENTS} = require("devtools/server/actors/styles");
-let {colorUtils} = require("devtools/css-color");
 let {gDevTools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
 
+const {OutputParser} = require("devtools/output-parser");
+
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
 const HTML_NS = "http://www.w3.org/1999/xhtml";
 const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
 
 /**
  * These regular expressions are adapted from firebug's css.js, and are
@@ -907,17 +908,17 @@ Rule.prototype = {
  * @param {string} aPriority
  *        The property's priority (either "important" or an empty string).
  *
  */
 function TextProperty(aRule, aName, aValue, aPriority)
 {
   this.rule = aRule;
   this.name = aName;
-  this.value = colorUtils.processCSSString(aValue);
+  this.value = aValue;
   this.priority = aPriority;
   this.enabled = true;
   this.updateComputed();
 }
 
 TextProperty.prototype = {
   /**
    * Update the editor associated with this text property,
@@ -1042,16 +1043,18 @@ function CssRuleView(aDoc, aStore, aPage
 {
   this.doc = aDoc;
   this.store = aStore || {};
   this.pageStyle = aPageStyle;
   this.element = this.doc.createElementNS(HTML_NS, "div");
   this.element.className = "ruleview devtools-monospace";
   this.element.flex = 1;
 
+  this._outputParser = new OutputParser();
+
   this._buildContextMenu = this._buildContextMenu.bind(this);
   this._contextMenuUpdate = this._contextMenuUpdate.bind(this);
   this._onSelectAll = this._onSelectAll.bind(this);
   this._onCopy = this._onCopy.bind(this);
 
   this.element.addEventListener("copy", this._onCopy);
 
   this._handlePrefChange = this._handlePrefChange.bind(this);
@@ -1163,17 +1166,19 @@ CssRuleView.prototype = {
 
       if (target.nodeName == "input") {
         let start = Math.min(target.selectionStart, target.selectionEnd);
         let end = Math.max(target.selectionStart, target.selectionEnd);
         let count = end - start;
         text = target.value.substr(start, count);
       } else {
         let win = this.doc.defaultView;
-        text = win.getSelection().toString();
+        let selection = win.getSelection();
+        debugger;
+        text = selection.toString();
 
         // Remove any double newlines.
         text = text.replace(/(\r?\n)\r?\n/g, "$1");
 
         // Remove "inline"
         let inline = _strings.GetStringFromName("rule.sourceInline");
         let rx = new RegExp("^" + inline + "\\r?\\n?", "g");
         text = text.replace(rx, "");
@@ -1209,16 +1214,18 @@ CssRuleView.prototype = {
   {
     this.clear();
 
     gDevTools.off("pref-changed", this._handlePrefChange);
 
     this.element.removeEventListener("copy", this._onCopy);
     delete this._onCopy;
 
+    delete this._outputParser;
+
     // Remove context menu
     if (this._contextmenu) {
       // Destroy the Select All menuitem.
       this.menuitemSelectAll.removeEventListener("command", this._onSelectAll);
       this.menuitemSelectAll = null;
 
       // Destroy the Copy menuitem.
       this.menuitemCopy.removeEventListener("command", this._onCopy);
@@ -1934,16 +1941,25 @@ TextPropertyEditor.prototype = {
     this.nameSpan.textContent = name;
 
     // Combine the property's value and priority into one string for
     // the value.
     let val = this.prop.value;
     if (this.prop.priority) {
       val += " !" + this.prop.priority;
     }
+
+    let store = this.prop.rule.elementStyle.store;
+    let propDirty = store.userProperties.contains(this.prop.rule.style, name);
+    if (propDirty) {
+      this.element.setAttribute("dirty", "");
+    } else {
+      this.element.removeAttribute("dirty");
+    }
+
     // Treat URLs differently than other properties.
     // Allow the user to click a link to the resource and open it.
     let resourceURI = this.getResourceURI();
     if (resourceURI) {
       this.valueSpan.textContent = "";
 
       appendText(this.valueSpan, val.split(resourceURI)[0]);
 
@@ -1961,25 +1977,23 @@ TextPropertyEditor.prototype = {
         aEvent.preventDefault();
 
         this.browserWindow.openUILinkIn(aEvent.target.href, "tab");
 
       }, false);
 
       appendText(this.valueSpan, val.split(resourceURI)[1]);
     } else {
-      this.valueSpan.textContent = val;
-    }
-
-    let store = this.prop.rule.elementStyle.store;
-    let propDirty = store.userProperties.contains(this.prop.rule.style, name);
-    if (propDirty) {
-      this.element.setAttribute("dirty", "");
-    } else {
-      this.element.removeAttribute("dirty");
+      let outputParser = this.ruleEditor.ruleView._outputParser;
+      let frag = outputParser.parseCssProperty(name, val, {
+        colorSwatchClass: "ruleview-colorswatch",
+        defaultColorType: !propDirty
+      });
+      this.valueSpan.innerHTML = "";
+      this.valueSpan.appendChild(frag);
     }
 
     // Populate the computed styles.
     this._updateComputed();
   },
 
   _onStartEditing: function TextPropertyEditor_onStartEditing()
   {
@@ -2016,20 +2030,28 @@ TextPropertyEditor.prototype = {
       }
 
       createChild(li, "span", {
         class: "ruleview-propertyname theme-fg-color5",
         textContent: computed.name
       });
       appendText(li, ": ");
 
+      let outputParser = this.ruleEditor.ruleView._outputParser;
+      let frag = outputParser.parseCssProperty(
+        computed.name, computed.value, {
+          colorSwatchClass: "ruleview-colorswatch"
+        }
+      );
+
       createChild(li, "span", {
         class: "ruleview-propertyvalue theme-fg-color1",
-        textContent: computed.value
+        child: frag
       });
+
       appendText(li, ";");
     }
 
     // Show or hide the expander as needed.
     if (showExpander) {
       this.expander.style.visibility = "visible";
     } else {
       this.expander.style.visibility = "hidden";
@@ -2296,16 +2318,18 @@ UserProperties.prototype = {
  */
 function createChild(aParent, aTag, aAttributes)
 {
   let elt = aParent.ownerDocument.createElementNS(HTML_NS, aTag);
   for (let attr in aAttributes) {
     if (aAttributes.hasOwnProperty(attr)) {
       if (attr === "textContent") {
         elt.textContent = aAttributes[attr];
+      } else if(attr === "child") {
+        elt.appendChild(aAttributes[attr]);
       } else {
         elt.setAttribute(attr, aAttributes[attr]);
       }
     }
   }
   aParent.appendChild(elt);
   return elt;
 }
--- a/browser/devtools/styleinspector/ruleview.css
+++ b/browser/devtools/styleinspector/ruleview.css
@@ -53,8 +53,12 @@
   vertical-align: middle;
   height: 1.5em;
   line-height: 1.5em;
 }
 
 .ruleview-header.ruleview-expandable-header {
   cursor: pointer;
 }
+
+.ruleview-colorswatch {
+  display: inline-block;
+}
--- a/browser/devtools/styleinspector/test/browser_bug589375_keybindings.js
+++ b/browser/devtools/styleinspector/test/browser_bug589375_keybindings.js
@@ -28,17 +28,17 @@ function openComputedView(aInspector)
   Services.obs.addObserver(runTests, "StyleInspector-populated", false);
 
   inspector.sidebar.select("computedview");
 }
 
 function runTests()
 {
   Services.obs.removeObserver(runTests, "StyleInspector-populated");
-  computedView = getComputedView(inspector);
+  computedView = getComputedView();
 
   var span = doc.querySelector(".matches");
   ok(span, "captain, we have the matches span");
 
   inspector.selection.setNode(span);
 
   is(span, computedView.viewedElement,
     "style inspector node matches the selected node");
--- a/browser/devtools/styleinspector/test/browser_ruleview_bug_902966_revert_value_on_ESC.js
+++ b/browser/devtools/styleinspector/test/browser_ruleview_bug_902966_revert_value_on_ESC.js
@@ -15,18 +15,18 @@ let originalValue = "#00F";
 // {
 //  value: what char sequence to type,
 //  commitKey: what key to type to "commit" the change,
 //  modifiers: commitKey modifiers,
 //  expected: what value is expected as a result
 // }
 let testData = [
   {value: "red", commitKey: "VK_ESCAPE", modifiers: {}, expected: originalValue},
-  {value: "red", commitKey: "VK_RETURN", modifiers: {}, expected: "red"},
-  {value: "blue", commitKey: "VK_TAB", modifiers: {shiftKey: true}, expected: "blue"}
+  {value: "red", commitKey: "VK_RETURN", modifiers: {}, expected: "#F00"},
+  {value: "blue", commitKey: "VK_TAB", modifiers: {shiftKey: true}, expected: "#00F"}
 ];
 
 function startTests()
 {
   let style = '' +
     '#testid {' +
     '  color: ' + originalValue + ';' +
     '}';
@@ -56,17 +56,17 @@ function runTestData(index)
   waitForEditorFocus(propEditor.element, function(aEditor) {
     is(inplaceEditor(propEditor.valueSpan), aEditor, "Focused editor should be the value span.");
 
     for (let ch of testData[index].value) {
       EventUtils.sendChar(ch, ruleWindow);
     }
     EventUtils.synthesizeKey(testData[index].commitKey, testData[index].modifiers);
 
-    is(propEditor.valueSpan.innerHTML, testData[index].expected);
+    is(propEditor.valueSpan.textContent, testData[index].expected);
 
     runTestData(index + 1);
   });
 
   EventUtils.synthesizeMouse(propEditor.valueSpan, 1, 1, {}, ruleWindow);
 }
 
 function finishTest()
--- a/browser/devtools/styleinspector/test/browser_ruleview_manipulation.js
+++ b/browser/devtools/styleinspector/test/browser_ruleview_manipulation.js
@@ -15,57 +15,57 @@ function simpleOverride(aInspector, aRul
 
     let elementRule = elementStyle.rules[0];
     let firstProp = elementRule.createProperty("background-color", "green", "");
     let secondProp = elementRule.createProperty("background-color", "blue", "");
     is(elementRule.textProps[0], firstProp, "Rules should be in addition order.");
     is(elementRule.textProps[1], secondProp, "Rules should be in addition order.");
 
     promiseDone(elementRule._applyingModifications.then(() => {
-      is(element.style.getPropertyValue("background-color"), "rgb(0, 0, 255)", "Second property should have been used.");
+      is(element.style.getPropertyValue("background-color"), "blue", "Second property should have been used.");
 
       secondProp.remove();
       return elementRule._applyingModifications;
     }).then(() => {
-      is(element.style.getPropertyValue("background-color"), "rgb(0, 128, 0)", "After deleting second property, first should be used.");
+      is(element.style.getPropertyValue("background-color"), "green", "After deleting second property, first should be used.");
 
       secondProp = elementRule.createProperty("background-color", "blue", "");
       return elementRule._applyingModifications;
     }).then(() => {
-      is(element.style.getPropertyValue("background-color"), "rgb(0, 0, 255)", "New property should be used.");
+      is(element.style.getPropertyValue("background-color"), "blue", "New property should be used.");
 
       is(elementRule.textProps[0], firstProp, "Rules shouldn't have switched places.");
       is(elementRule.textProps[1], secondProp, "Rules shouldn't have switched places.");
 
       secondProp.setEnabled(false);
       return elementRule._applyingModifications;
     }).then(() => {
-      is(element.style.getPropertyValue("background-color"), "rgb(0, 128, 0)", "After disabling second property, first value should be used");
+      is(element.style.getPropertyValue("background-color"), "green", "After disabling second property, first value should be used");
 
       firstProp.setEnabled(false);
       return elementRule._applyingModifications;
     }).then(() => {
       is(element.style.getPropertyValue("background-color"), "", "After disabling both properties, value should be empty.");
 
       secondProp.setEnabled(true);
       return elementRule._applyingModifications;
     }).then(() => {
-      is(element.style.getPropertyValue("background-color"), "rgb(0, 0, 255)", "Value should be set correctly after re-enabling");
+      is(element.style.getPropertyValue("background-color"), "blue", "Value should be set correctly after re-enabling");
 
       firstProp.setEnabled(true);
       return elementRule._applyingModifications;
     }).then(() => {
-      is(element.style.getPropertyValue("background-color"), "rgb(0, 0, 255)", "Re-enabling an earlier property shouldn't make it override a later property.");
+      is(element.style.getPropertyValue("background-color"), "blue", "Re-enabling an earlier property shouldn't make it override a later property.");
       is(elementRule.textProps[0], firstProp, "Rules shouldn't have switched places.");
       is(elementRule.textProps[1], secondProp, "Rules shouldn't have switched places.");
 
       firstProp.setValue("purple", "");
       return elementRule._applyingModifications;
     }).then(() => {
-      is(element.style.getPropertyValue("background-color"), "rgb(0, 0, 255)", "Modifying an earlier property shouldn't override a later property.");
+      is(element.style.getPropertyValue("background-color"), "blue", "Modifying an earlier property shouldn't override a later property.");
       finishTest();
     }));
   });
 }
 
 function finishTest()
 {
   doc = null;
--- a/browser/devtools/styleinspector/test/browser_ruleview_pseudoelement.js
+++ b/browser/devtools/styleinspector/test/browser_ruleview_pseudoelement.js
@@ -62,17 +62,17 @@ function testTopLeft()
     let elementAfterRule = afterRules[0];
     let elementAfterRuleView = [].filter.call(view.element.children, (e) => {
       return e._ruleEditor && e._ruleEditor.rule === elementAfterRule;
     })[0]._ruleEditor;
 
     is
     (
       convertTextPropsToString(elementAfterRule.textProps),
-      "background: none repeat scroll 0% 0% #F00; content: \" \"; position: absolute; " +
+      "background: none repeat scroll 0% 0% red; content: \" \"; position: absolute; " +
       "border-radius: 50%; height: 32px; width: 32px; top: 50%; left: 50%; margin-top: -16px; margin-left: -16px",
       "TopLeft after properties are correct"
     );
 
     let elementBeforeRule = beforeRules[0];
     let elementBeforeRuleView = [].filter.call(view.element.children, (e) => {
       return e._ruleEditor && e._ruleEditor.rule === elementBeforeRule;
     })[0]._ruleEditor;
@@ -237,41 +237,41 @@ function testParagraph()
     let elementFirstLineRule = firstLineRules[0];
     let elementFirstLineRuleView = [].filter.call(view.element.children, (e) => {
       return e._ruleEditor && e._ruleEditor.rule === elementFirstLineRule;
     })[0]._ruleEditor;
 
     is
     (
       convertTextPropsToString(elementFirstLineRule.textProps),
-      "background: none repeat scroll 0% 0% #00F",
+      "background: none repeat scroll 0% 0% blue",
       "Paragraph first-line properties are correct"
     );
 
     let elementFirstLetterRule = firstLetterRules[0];
     let elementFirstLetterRuleView = [].filter.call(view.element.children, (e) => {
       return e._ruleEditor && e._ruleEditor.rule === elementFirstLetterRule;
     })[0]._ruleEditor;
 
     is
     (
       convertTextPropsToString(elementFirstLetterRule.textProps),
-      "color: #F00; font-size: 130%",
+      "color: red; font-size: 130%",
       "Paragraph first-letter properties are correct"
     );
 
     let elementSelectionRule = selectionRules[0];
     let elementSelectionRuleView = [].filter.call(view.element.children, (e) => {
       return e._ruleEditor && e._ruleEditor.rule === elementSelectionRule;
     })[0]._ruleEditor;
 
     is
     (
       convertTextPropsToString(elementSelectionRule.textProps),
-      "color: #FFF; background: none repeat scroll 0% 0% #000",
+      "color: white; background: none repeat scroll 0% 0% black",
       "Paragraph first-letter properties are correct"
     );
 
     testBody();
   });
 }
 
 function testBody() {
--- a/browser/devtools/styleinspector/test/head.js
+++ b/browser/devtools/styleinspector/test/head.js
@@ -43,16 +43,22 @@ function addTab(aURL)
 function openInspector(callback)
 {
   let target = TargetFactory.forTab(gBrowser.selectedTab);
   gDevTools.showToolbox(target, "inspector").then(function(toolbox) {
     callback(toolbox.getCurrentPanel());
   });
 }
 
+function getActiveInspector()
+{
+  let target = TargetFactory.forTab(gBrowser.selectedTab);
+  return gDevTools.getToolbox(target).getPanel("inspector");
+}
+
 function openRuleView(callback)
 {
   openInspector(inspector => {
     inspector.sidebar.once("ruleview-ready", () => {
       inspector.sidebar.select("ruleview");
       let ruleView = inspector.sidebar.getWindowForTab("ruleview").ruleview.view;
       callback(inspector, ruleView);
     })
@@ -94,22 +100,24 @@ function tearDown()
     dump(ex);
   }
   while (gBrowser.tabs.length > 1) {
     gBrowser.removeCurrentTab();
   }
   browser = hudId = hud = filterBox = outputNode = cs = null;
 }
 
-function getComputedView(inspector) {
+function getComputedView() {
+  let inspector = getActiveInspector();
   return inspector.sidebar.getWindowForTab("computedview").computedview.view;
 }
 
 function ruleView()
 {
+  let inspector = getActiveInspector();
   return inspector.sidebar.getWindowForTab("ruleview").ruleview.view;
 }
 
 function waitForEditorFocus(aParent, aCallback)
 {
   aParent.addEventListener("focus", function onFocus(evt) {
     if (inplaceEditor(evt.target) && evt.target.tagName == "input") {
       aParent.removeEventListener("focus", onFocus, true);
@@ -159,13 +167,27 @@ function promiseDone(promise) {
     ok(false, "Promise failed: " + err);
     if (err.stack) {
       dump(err.stack);
     }
     SimpleTest.finish();
   });
 }
 
+function getComputedPropertyValue(aName)
+{
+  let computedview = getComputedView();
+  let props = computedview.styleDocument.querySelectorAll(".property-view");
+
+  for (let prop of props) {
+    let name = prop.querySelector(".property-name");
+
+    if (name.textContent === aName) {
+      let value = prop.querySelector(".property-value");
+      return value.textContent;
+    }
+  }
+}
 
 registerCleanupFunction(tearDown);
 
 waitForExplicitFinish();
 
--- a/browser/extensions/shumway/chrome.manifest
+++ b/browser/extensions/shumway/chrome.manifest
@@ -1,2 +1,1 @@
 resource shumway content/
-resource shumway.components components/
rename from browser/extensions/shumway/components/FlashStreamConverter.js
rename to browser/extensions/shumway/content/ShumwayStreamConverter.jsm
--- a/browser/extensions/shumway/components/FlashStreamConverter.js
+++ b/browser/extensions/shumway/content/ShumwayStreamConverter.jsm
@@ -13,24 +13,23 @@
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 'use strict';
 
-var EXPORTED_SYMBOLS = ['FlashStreamConverter1', 'FlashStreamConverter2'];
+var EXPORTED_SYMBOLS = ['ShumwayStreamConverter', 'ShumwayStreamOverlayConverter'];
 
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cr = Components.results;
 const Cu = Components.utils;
 
-// True only if this is the version of pdf.js that is included with firefox.
 const SHUMWAY_CONTENT_TYPE = 'application/x-shockwave-flash';
 const EXPECTED_PLAYPREVIEW_URI_PREFIX = 'data:application/x-moz-playpreview;,' +
                                         SHUMWAY_CONTENT_TYPE;
 
 const FIREFOX_ID = '{ec8030f7-c20a-464f-9b0e-13a3a9e97384}';
 const SEAMONKEY_ID = '{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}';
 
 const MAX_CLIPBOARD_DATA_SIZE = 8000;
@@ -61,17 +60,17 @@ function getStringPref(pref, def) {
   try {
     return Services.prefs.getComplexValue(pref, Ci.nsISupportsString).data;
   } catch (ex) {
     return def;
   }
 }
 
 function log(aMsg) {
-  let msg = 'FlashStreamConverter.js: ' + (aMsg.join ? aMsg.join('') : aMsg);
+  let msg = 'ShumwayStreamConverter.js: ' + (aMsg.join ? aMsg.join('') : aMsg);
   Services.console.logStringMessage(msg);
   dump(msg + '\n');
 }
 
 function getDOMWindow(aChannel) {
   var requestor = aChannel.notificationCallbacks;
   var win = requestor.getInterface(Components.interfaces.nsIDOMWindow);
   return win;
@@ -631,20 +630,20 @@ function initExternalCom(wrappedWindow, 
     };
   };
   wrappedObject.__flash__unregisterCallback = function (functionName) {
     wrappedWindow.console.log('__flash__unregisterCallback: ' + functionName);
     delete this[functionName];
   };
 }
 
-function FlashStreamConverterBase() {
+function ShumwayStreamConverterBase() {
 }
 
-FlashStreamConverterBase.prototype = {
+ShumwayStreamConverterBase.prototype = {
   QueryInterface: XPCOMUtils.generateQI([
       Ci.nsISupports,
       Ci.nsIStreamConverter,
       Ci.nsIStreamListener,
       Ci.nsIRequestObserver
   ]),
 
   /*
@@ -847,40 +846,37 @@ FlashStreamConverterBase.prototype = {
 
 // properties required for XPCOM registration:
 function copyProperties(obj, template) {
   for (var prop in template) {
     obj[prop] = template[prop];
   }
 }
 
-function FlashStreamConverter1() {}
-FlashStreamConverter1.prototype = new FlashStreamConverterBase();
-copyProperties(FlashStreamConverter1.prototype, {
+function ShumwayStreamConverter() {}
+ShumwayStreamConverter.prototype = new ShumwayStreamConverterBase();
+copyProperties(ShumwayStreamConverter.prototype, {
   classID: Components.ID('{4c6030f7-e20a-264f-5b0e-ada3a9e97384}'),
   classDescription: 'Shumway Content Converter Component',
   contractID: '@mozilla.org/streamconv;1?from=application/x-shockwave-flash&to=*/*'
 });
 
-function FlashStreamConverter2() {}
-FlashStreamConverter2.prototype = new FlashStreamConverterBase();
-copyProperties(FlashStreamConverter2.prototype, {
+function ShumwayStreamOverlayConverter() {}
+ShumwayStreamOverlayConverter.prototype = new ShumwayStreamConverterBase();
+copyProperties(ShumwayStreamOverlayConverter.prototype, {
   classID: Components.ID('{4c6030f7-e20a-264f-5f9b-ada3a9e97384}'),
   classDescription: 'Shumway PlayPreview Component',
   contractID: '@mozilla.org/streamconv;1?from=application/x-moz-playpreview&to=*/*'
 });
-FlashStreamConverter2.prototype.isValidRequest =
+ShumwayStreamOverlayConverter.prototype.isValidRequest =
   (function(aCtxt) {
     try {
       var request = aCtxt;
       request.QueryInterface(Ci.nsIChannel);
       var spec = request.URI.spec;
       return spec.indexOf(EXPECTED_PLAYPREVIEW_URI_PREFIX) === 0;
     } catch (e) {
       return false;
     }
   });
-FlashStreamConverter2.prototype.getUrlHint = function (requestUrl) {
+ShumwayStreamOverlayConverter.prototype.getUrlHint = function (requestUrl) {
   return '';
 };
-
-var NSGetFactory1 = XPCOMUtils.generateNSGetFactory([FlashStreamConverter1]);
-var NSGetFactory2 = XPCOMUtils.generateNSGetFactory([FlashStreamConverter2]);
--- a/browser/extensions/shumway/content/ShumwayUtils.jsm
+++ b/browser/extensions/shumway/content/ShumwayUtils.jsm
@@ -24,17 +24,17 @@ const PREF_IGNORE_CTP = PREF_PREFIX + 'i
 
 let Cc = Components.classes;
 let Ci = Components.interfaces;
 let Cm = Components.manager;
 let Cu = Components.utils;
 
 Cu.import('resource://gre/modules/XPCOMUtils.jsm');
 Cu.import('resource://gre/modules/Services.jsm');
-Cu.import('resource://shumway.components/FlashStreamConverter.js');
+Cu.import('resource://shumway/ShumwayStreamConverter.jsm');
 
 let Svc = {};
 XPCOMUtils.defineLazyServiceGetter(Svc, 'mime',
                                    '@mozilla.org/mime;1',
                                    'nsIMIMEService');
 XPCOMUtils.defineLazyServiceGetter(Svc, 'pluginHost',
                                    '@mozilla.org/plugin/host;1',
                                    'nsIPluginHost');
@@ -46,54 +46,40 @@ function getBoolPref(pref, def) {
     return def;
   }
 }
 
 function log(str) {
   dump(str + '\n');
 }
 
-// Register/unregister a constructor as a component.
+// Register/unregister a constructor as a factory.
 function Factory() {}
-
 Factory.prototype = {
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory]),
-  _targetConstructor: null,
+  register: function register(targetConstructor) {
+    var proto = targetConstructor.prototype;
+    this._classID = proto.classID;
 
-  register: function register(targetConstructor) {
-    this._targetConstructor = targetConstructor;
-    var proto = targetConstructor.prototype;
+    var factory = XPCOMUtils._getFactory(targetConstructor);
+    this._factory = factory;
+
     var registrar = Cm.QueryInterface(Ci.nsIComponentRegistrar);
     registrar.registerFactory(proto.classID, proto.classDescription,
-                              proto.contractID, this);
+                              proto.contractID, factory);
   },
 
   unregister: function unregister() {
-    var proto = this._targetConstructor.prototype;
     var registrar = Cm.QueryInterface(Ci.nsIComponentRegistrar);
-    registrar.unregisterFactory(proto.classID, this);
-    this._targetConstructor = null;
-  },
-
-  // nsIFactory
-  createInstance: function createInstance(aOuter, iid) {
-    if (aOuter !== null)
-      throw Cr.NS_ERROR_NO_AGGREGATION;
-    return (new (this._targetConstructor)).QueryInterface(iid);
-  },
-
-  // nsIFactory
-  lockFactory: function lockFactory(lock) {
-    // No longer used as of gecko 1.7.
-    throw Cr.NS_ERROR_NOT_IMPLEMENTED;
+    registrar.unregisterFactory(this._classID, this._factory);
+    this._factory = null;
   }
 };
 
-let factory1 = new Factory();
-let factory2 = new Factory();
+let converterFactory = new Factory();
+let overlayConverterFactory = new Factory();
 
 let ShumwayUtils = {
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]),
   _registered: false,
 
   init: function init() {
     if (this.enabled)
       this._ensureRegistered();
@@ -108,48 +94,47 @@ let ShumwayUtils = {
   observe: function observe(aSubject, aTopic, aData) {
     if (this.enabled)
       this._ensureRegistered();
     else
       this._ensureUnregistered();
   },
   
   /**
-   * shumway is only enabled if it is both selected as the pdf viewer and if the 
-   * global switch enabling it is true.
+   * shumway is only enabled if the global switch enabling is true.
    * @return {boolean} Wether or not it's enabled.
    */
   get enabled() {
     return !getBoolPref(PREF_DISABLED, true);
   },
 
   _ensureRegistered: function _ensureRegistered() {
     if (this._registered)
       return;
 
     // Load the component and register it.
-    factory1.register(FlashStreamConverter1);
-    factory2.register(FlashStreamConverter2);
+    converterFactory.register(ShumwayStreamConverter);
+    overlayConverterFactory.register(ShumwayStreamOverlayConverter);
 
     var ignoreCTP = getBoolPref(PREF_IGNORE_CTP, true);
 
     Svc.pluginHost.registerPlayPreviewMimeType(SWF_CONTENT_TYPE, ignoreCTP);
 
     this._registered = true;
 
     log('Shumway is registered');
   },
 
   _ensureUnregistered: function _ensureUnregistered() {
     if (!this._registered)
       return;
 
     // Remove the contract/component.
-    factory1.unregister();
-    factory2.unregister();
+    converterFactory.unregister();
+    overlayConverterFactory.unregister();
 
     Svc.pluginHost.unregisterPlayPreviewMimeType(SWF_CONTENT_TYPE);
 
     this._registered = false;
 
     log('Shumway is unregistered');
   }
 };
--- a/browser/extensions/shumway/content/version.txt
+++ b/browser/extensions/shumway/content/version.txt
@@ -1,1 +1,1 @@
-0.7.351
+0.7.352
--- a/browser/extensions/shumway/content/web/avm-sandbox.js
+++ b/browser/extensions/shumway/content/web/avm-sandbox.js
@@ -11,17 +11,17 @@
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
-// Extension communication object... as it used in pdf.js
+// Extension communication object
 var FirefoxCom = (function FirefoxComClosure() {
   return {
     /**
      * Creates an event that the extension is listening for and will
      * synchronously respond to.
      * NOTE: It is reccomended to use request() instead since one day we may not
      * be able to synchronously reply.
      * @param {String} action The action to trigger.
--- a/browser/extensions/shumway/content/web/preview.js
+++ b/browser/extensions/shumway/content/web/preview.js
@@ -12,17 +12,17 @@
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 
-// Extenstion communication object... as it used in pdf.js
+// Extenstion communication object
 var FirefoxCom = (function FirefoxComClosure() {
   return {
     /**
      * Creates an event that the extension is listening for and will
      * synchronously respond to.
      * NOTE: It is reccomended to use request() instead since one day we may not
      * be able to synchronously reply.
      * @param {String} action The action to trigger.
--- a/browser/locales/en-US/chrome/browser/devtools/app-manager.properties
+++ b/browser/locales/en-US/chrome/browser/devtools/app-manager.properties
@@ -28,8 +28,14 @@ validator.invalidProjectType=Unknown pro
 # LOCALIZATION NOTE (validator.missNameManifestProperty, validator.missIconsManifestProperty):
 # don't translate 'icons' and 'name'.
 validator.missNameManifestProperty=Missing mandatory 'name' in Manifest.
 validator.missIconsManifestProperty=Missing 'icons' in Manifest.
 validator.missIconMarketplace=app submission to the Marketplace needs at least a 128px icon
 validator.invalidAppType=Unknown app type: '%S'.
 validator.invalidHostedPriviledges=Hosted App can't be type '%S'.
 validator.noCertifiedSupport='certified' apps are not fully supported on the App manager.
+validator.nonAbsoluteLaunchPath=Launch path has to be an absolute path starting with '/': '%S'
+validator.invalidLaunchPath=Unable to access to app starting document '%S'
+# LOCALIZATION NOTE (validator.invalidLaunchPathBadHttpCode): %1$S is the URI of
+# the launch document, %2$S is the http error code.
+validator.invalidLaunchPathBadHttpCode=Unable to access to app starting document '%1$S', got HTTP code %2$S
+
--- a/browser/locales/en-US/chrome/browser/devtools/connection-screen.dtd
+++ b/browser/locales/en-US/chrome/browser/devtools/connection-screen.dtd
@@ -14,9 +14,16 @@
 <!ENTITY connect    "Connect">
 <!ENTITY connecting "Connecting…">
 <!ENTITY availableTabs "Available remote tabs:">
 <!ENTITY availableProcesses "Available remote processes:">
 <!ENTITY connectionError "Error:">
 <!ENTITY errorTimeout "Error: connection timeout.">
 <!ENTITY errorRefused "Error: connection refused.">
 <!ENTITY errorUnexpected "Unexpected error.">
-<!ENTITY help2 "Firefox Developer Tools can debug remote devices (Firefox for Android and Firefox OS, for example). Make sure that you have turned on the 'Remote debugging' option in the remote device. See the <a target='_' href='https://developer.mozilla.org/docs/Tools/Remote_Debugging'>documentation</a> for more.">
+
+<!-- LOCALIZATION NOTE (remoteHelp, remoteDocumentation, remoteHelpSuffix):
+these strings will be concatenated in a single label, remoteDocumentation will
+be used as text for a link to MDN. -->
+<!ENTITY remoteHelp "Firefox Developer Tools can debug remote devices (Firefox for Android and Firefox OS, for example). Make sure that you have turned on the 'Remote debugging' option in the remote device. For more, see the">
+<!ENTITY remoteDocumentation "documentation">
+<!ENTITY remoteHelpSuffix ".">
+
--- a/browser/themes/linux/devtools/computedview.css
+++ b/browser/themes/linux/devtools/computedview.css
@@ -142,8 +142,17 @@ body {
   width: 100%;
 }
 
 .link {
   padding: 0 3px;
   cursor: pointer;
   float: right;
 }
+
+.computedview-colorswatch {
+  display: inline-block;
+  border-radius: 50%;
+  width: 1em;
+  height: 1em;
+  vertical-align: text-top;
+  -moz-margin-end: 5px;
+}
--- a/browser/themes/linux/devtools/debugger.css
+++ b/browser/themes/linux/devtools/debugger.css
@@ -8,17 +8,17 @@
 }
 
 /* Sources and breakpoints pane */
 
 #sources-pane {
   min-width: 50px;
 }
 
-#sources-container + .devtools-side-splitter {
+#sources-and-editor-splitter {
   -moz-border-start-color: transparent;
 }
 
 #pretty-print {
   min-width: 0;
   font-weight: bold;
 }
 
@@ -78,17 +78,16 @@
 
 /* Black box message and source progress meter */
 
 #black-boxed-message,
 #source-progress-container {
   background: url(background-noise-toolbar.png) rgb(61,69,76);
   /* Prevent the container deck from aquiring the height from this message. */
   min-height: 1px;
-  padding: 25vh 0;
   color: white;
 }
 
 #source-progress {
   min-height: 2em;
   min-width: 40em;
 }
 
@@ -165,17 +164,17 @@
   width: 16px;
   height: 16px;
   margin: 2px;
 }
 
 /* Instruments pane (watch expressions, variables, event listeners...) */
 
 #instruments-pane > tabs > tab {
-  min-height: 2em !important;
+  min-height: 25px !important;
   padding: 0 !important;
 }
 
 #instruments-pane > tabpanels > tabpanel {
   background: #fff;
 }
 
 /* Watch expressions view */
@@ -435,8 +434,28 @@
 
 #instruments-pane-toggle[pane-collapsed] {
   list-style-image: url("chrome://browser/skin/devtools/debugger-expand.png");
 }
 
 #instruments-pane-toggle:active {
   -moz-image-region: rect(0px,32px,16px,16px);
 }
+
+/* Horizontal vs. vertical layout */
+
+#vertical-layout-panes-container {
+  min-height: 35vh;
+  max-height: 80vh;
+}
+
+#body[layout=vertical] #instruments-pane {
+  margin: 0 !important;
+  /* To prevent all the margin hacks to hide the sidebar. */
+}
+
+#body[layout=vertical] .side-menu-widget-container {
+  box-shadow: none !important;
+}
+
+#body[layout=vertical] .side-menu-widget-item-arrow {
+  background-image: none !important;
+}
--- a/browser/themes/linux/devtools/ruleview.css
+++ b/browser/themes/linux/devtools/ruleview.css
@@ -91,16 +91,24 @@
   list-style: none;
   padding: 0;
 }
 
 .ruleview-computed {
   -moz-margin-start: 35px;
 }
 
+.ruleview-colorswatch {
+  border-radius: 50%;
+  width: 1em;
+  height: 1em;
+  vertical-align: text-top;
+  -moz-margin-end: 5px;
+}
+
 .ruleview-overridden {
   text-decoration: line-through;
 }
 
 .styleinspector-propertyeditor {
   border: 1px solid #CCC;
   padding: 0;
 }
--- a/browser/themes/osx/devtools/computedview.css
+++ b/browser/themes/osx/devtools/computedview.css
@@ -160,8 +160,17 @@ body {
   width: 100%;
 }
 
 .link {
   padding: 0 3px;
   cursor: pointer;
   float: right;
 }
+
+.computedview-colorswatch {
+  display: inline-block;
+  border-radius: 50%;
+  width: 1em;
+  height: 1em;
+  vertical-align: text-top;
+  -moz-margin-end: 5px;
+}
--- a/browser/themes/osx/devtools/debugger.css
+++ b/browser/themes/osx/devtools/debugger.css
@@ -10,17 +10,17 @@
 }
 
 /* Sources and breakpoints pane */
 
 #sources-pane {
   min-width: 50px;
 }
 
-#sources-container + .devtools-side-splitter {
+#sources-and-editor-splitter {
   -moz-border-start-color: transparent;
 }
 
 #pretty-print {
   min-width: 0;
   font-weight: bold;
 }
 
@@ -76,17 +76,16 @@
 
 /* Black box message and source progress meter */
 
 #black-boxed-message,
 #source-progress-container {
   background: url(background-noise-toolbar.png) rgb(61,69,76);
   /* Prevent the container deck from aquiring the height from this message. */
   min-height: 1px;
-  padding: 25vh 0;
   color: white;
 }
 
 #source-progress {
   min-height: 2em;
   min-width: 40em;
 }
 
@@ -163,17 +162,17 @@
   width: 16px;
   height: 16px;
   margin: 2px;
 }
 
 /* Instruments pane (watch expressions, variables, event listeners...) */
 
 #instruments-pane > tabs > tab {
-  min-height: 2em !important;
+  min-height: 1em !important;
   padding: 0 !important;
 }
 
 #instruments-pane > tabpanels > tabpanel {
   background: #fff;
 }
 
 /* Watch expressions view */
@@ -433,8 +432,28 @@
 
 #instruments-pane-toggle[pane-collapsed] {
   list-style-image: url("chrome://browser/skin/devtools/debugger-expand.png");
 }
 
 #instruments-pane-toggle:active {
   -moz-image-region: rect(0px,32px,16px,16px);
 }
+
+/* Horizontal vs. vertical layout */
+
+#vertical-layout-panes-container {
+  min-height: 35vh;
+  max-height: 80vh;
+}
+
+#body[layout=vertical] #instruments-pane {
+  margin: 0 !important;
+  /* To prevent all the margin hacks to hide the sidebar. */
+}
+
+#body[layout=vertical] .side-menu-widget-container {
+  box-shadow: none !important;
+}
+
+#body[layout=vertical] .side-menu-widget-item-arrow {
+  background-image: none !important;
+}
--- a/browser/themes/osx/devtools/ruleview.css
+++ b/browser/themes/osx/devtools/ruleview.css
@@ -95,16 +95,24 @@
   list-style: none;
   padding: 0;
 }
 
 .ruleview-computed {
   -moz-margin-start: 35px;
 }
 
+.ruleview-colorswatch {
+  border-radius: 50%;
+  width: 1em;
+  height: 1em;
+  vertical-align: text-top;
+  -moz-margin-end: 5px;
+}
+
 .ruleview-overridden {
   text-decoration: line-through;
 }
 
 .styleinspector-propertyeditor {
   border: 1px solid #CCC;
   padding: 0;
 }
--- a/browser/themes/shared/devtools/dark-theme.css
+++ b/browser/themes/shared/devtools/dark-theme.css
@@ -99,8 +99,14 @@
 
 .theme-fg-color7 { /* Red */
   color: #bf5656;
 }
 
 .theme-fg-contrast { /* To be used for text on theme-bg-contrast */
   color: black;
 }
+
+.ruleview-colorswatch,
+.computedview-colorswatch,
+.markupview-colorswatch {
+  box-shadow: 0 0 0 1px rgba(0,0,0,0.5);
+}
--- a/browser/themes/shared/devtools/light-theme.css
+++ b/browser/themes/shared/devtools/light-theme.css
@@ -99,8 +99,14 @@
 
 .theme-fg-color7 { /* Red */
   color: #bf5656;
 }
 
 .theme-fg-contrast { /* To be used for text on theme-bg-contrast */
   color: black;
 }
+
+.ruleview-colorswatch,
+.computedview-colorswatch,
+.markupview-colorswatch {
+  box-shadow: 0 0 0 1px #EFEFEF;
+}
--- a/browser/themes/windows/devtools/computedview.css
+++ b/browser/themes/windows/devtools/computedview.css
@@ -160,8 +160,17 @@ body {
   width: 100%;
 }
 
 .link {
   padding: 0 3px;
   cursor: pointer;
   float: right;
 }
+
+.computedview-colorswatch {
+  display: inline-block;
+  border-radius: 50%;
+  width: 1em;
+  height: 1em;
+  vertical-align: text-top;
+  -moz-margin-end: 5px;
+}
--- a/browser/themes/windows/devtools/debugger.css
+++ b/browser/themes/windows/devtools/debugger.css
@@ -8,17 +8,17 @@
 }
 
 /* Sources and breakpoints pane */
 
 #sources-pane {
   min-width: 50px;
 }
 
-#sources-container + .devtools-side-splitter {
+#sources-and-editor-splitter {
   -moz-border-start-color: transparent;
 }
 
 #pretty-print {
   min-width: 0;
   font-weight: bold;
 }
 
@@ -76,17 +76,16 @@
 
 /* Black box message and source progress meter */
 
 #black-boxed-message,
 #source-progress-container {
   background: url(background-noise-toolbar.png) rgb(61,69,76);
   /* Prevent the container deck from aquiring the height from this message. */
   min-height: 1px;
-  padding: 25vh 0;
   color: white;
 }
 
 #source-progress {
   min-height: 2em;
   min-width: 40em;
 }
 
@@ -163,17 +162,17 @@
   width: 16px;
   height: 16px;
   margin: 2px;
 }
 
 /* Instruments pane (watch expressions, variables, event listeners...) */
 
 #instruments-pane > tabs > tab {
-  min-height: 2em !important;
+  min-height: 25px !important;
   padding: 0 !important;
 }
 
 #instruments-pane > tabpanels > tabpanel {
   background: #fff;
 }
 
 /* Watch expressions view */
@@ -438,8 +437,28 @@
 
 #instruments-pane-toggle:hover {
   -moz-image-region: rect(0px,32px,16px,16px);
 }
 
 #instruments-pane-toggle:hover:active {
   -moz-image-region: rect(0px,48px,16px,32px);
 }
+
+/* Horizontal vs. vertical layout */
+
+#vertical-layout-panes-container {
+  min-height: 35vh;
+  max-height: 80vh;
+}
+
+#body[layout=vertical] #instruments-pane {
+  margin: 0 !important;
+  /* To prevent all the margin hacks to hide the sidebar. */
+}
+
+#body[layout=vertical] .side-menu-widget-container {
+  box-shadow: none !important;
+}
+
+#body[layout=vertical] .side-menu-widget-item-arrow {
+  background-image: none !important;
+}
--- a/browser/themes/windows/devtools/ruleview.css
+++ b/browser/themes/windows/devtools/ruleview.css
@@ -91,16 +91,24 @@
   list-style: none;
   padding: 0;
 }
 
 .ruleview-computed {
   -moz-margin-start: 35px;
 }
 
+.ruleview-colorswatch {
+  border-radius: 50%;
+  width: 1em;
+  height: 1em;
+  vertical-align: text-top;
+  -moz-margin-end: 5px;
+}
+
 .ruleview-overridden {
   text-decoration: line-through;
 }
 
 .styleinspector-propertyeditor {
   border: 1px solid #CCC;
   padding: 0;
 }
--- a/mobile/android/base/BrowserApp.java
+++ b/mobile/android/base/BrowserApp.java
@@ -48,16 +48,17 @@ import android.graphics.drawable.BitmapD
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.nfc.NdefMessage;
 import android.nfc.NdefRecord;
 import android.nfc.NfcAdapter;
 import android.nfc.NfcEvent;
 import android.os.Build;
 import android.os.Bundle;
+import android.support.v4.app.FragmentManager;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.InputDevice;
 import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.MotionEvent;
@@ -1598,18 +1599,26 @@ abstract public class BrowserApp extends
 
     private void showBrowserSearch() {
         if (mBrowserSearch.getUserVisibleHint()) {
             return;
         }
 
         mBrowserSearchContainer.setVisibility(View.VISIBLE);
 
-        getSupportFragmentManager().beginTransaction()
-                .add(R.id.search_container, mBrowserSearch, BROWSER_SEARCH_TAG).commitAllowingStateLoss();
+        final FragmentManager fm = getSupportFragmentManager();
+
+        // In certain situations, showBrowserSearch() can be called immediately after hideBrowserSearch()
+        // (see bug 925012). Because of an Android bug (http://code.google.com/p/android/issues/detail?id=61179),
+        // calling FragmentTransaction#add immediately after FragmentTransaction#remove won't add the fragment's
+        // view to the layout. Calling FragmentManager#executePendingTransactions before re-adding the fragment
+        // prevents this issue.
+        fm.executePendingTransactions();
+
+        fm.beginTransaction().add(R.id.search_container, mBrowserSearch, BROWSER_SEARCH_TAG).commitAllowingStateLoss();
         mBrowserSearch.setUserVisibleHint(true);
     }
 
     private void hideBrowserSearch() {
         if (!mBrowserSearch.getUserVisibleHint()) {
             return;
         }
 
--- a/mobile/android/base/Makefile.in
+++ b/mobile/android/base/Makefile.in
@@ -160,19 +160,16 @@ FENNEC_JAVA_FILES = \
   TextSelection.java \
   TextSelectionHandle.java \
   ThumbnailHelper.java \
   TouchEventInterceptor.java \
   VideoPlayer.java \
   WebAppAllocator.java \
   WebAppImpl.java \
   ZoomConstraints.java \
-  braille/com/googlecode/eyesfree/braille/selfbraille/ISelfBrailleService.java \
-  braille/com/googlecode/eyesfree/braille/selfbraille/SelfBrailleClient.java \
-  braille/com/googlecode/eyesfree/braille/selfbraille/WriteData.java \
   db/BrowserContract.java \
   db/BrowserProvider.java \
   db/FormHistoryProvider.java \
   db/PerProfileContentProvider.java \
   db/PasswordsProvider.java \
   db/TabsProvider.java \
   gfx/Axis.java \
   gfx/BitmapUtils.java \
@@ -271,19 +268,25 @@ FENNEC_JAVA_FILES = \
   widget/ThumbnailView.java \
   widget/TwoWayView.java \
   GeckoNetworkManager.java \
   GeckoScreenOrientationListener.java \
   GeckoUpdateReceiver.java \
   ReferrerReceiver.java \
   $(NULL)
 
+BRAILLE_JAVA_FILES := \
+  com/googlecode/eyesfree/braille/selfbraille/ISelfBrailleService.java \
+  com/googlecode/eyesfree/braille/selfbraille/SelfBrailleClient.java \
+  com/googlecode/eyesfree/braille/selfbraille/WriteData.java \
+  $(NULL)
+
 WEBSOCKETS_JAVA_FILES := \
-  websockets/HybiParser.java \
-  websockets/WebSocketClient.java \
+  com/codebutler/android_websockets/HybiParser.java \
+  com/codebutler/android_websockets/WebSocketClient.java \
   $(NULL)
 
 ifdef MOZ_WEBRTC
 WEBRTC_VIDEO_CAPTURE_JAVA_FILES = \
   CaptureCapabilityAndroid.java \
   VideoCaptureAndroid.java \
   VideoCaptureDeviceInfoAndroid.java \
   $(NULL)
@@ -429,27 +432,30 @@ ALL_JARS = \
   jars/sync-thirdparty.jar \
   jars/websockets.jar \
   $(NULL)
 
 ifdef MOZ_WEBRTC
 ALL_JARS += jars/webrtc.jar
 endif
 
+thirdparty_source_dir = $(topsrcdir)/mobile/android/thirdparty
+
 JAVA_JAR_TARGETS += websockets
 websockets_DEST := jars/websockets.jar
 websockets_JAVAFILES := \
-  $(WEBSOCKETS_JAVA_FILES) \
+  $(addprefix $(thirdparty_source_dir)/,$(WEBSOCKETS_JAVA_FILES)) \
   $(NULL)
 websockets_JAVAC_FLAGS := -Xlint:all,-serial
 
 JAVA_JAR_TARGETS += gecko-browser
 gecko-browser_DEST := jars/gecko-browser.jar
 gecko-browser_JAVAFILES := \
   $(FENNEC_JAVA_FILES) \
+  $(addprefix $(thirdparty_source_dir)/,$(BRAILLE_JAVA_FILES)) \
   $(SYNC_JAVA_FILES) \
   $(NULL)
 gecko-browser_PP_JAVAFILES := \
   $(FENNEC_PP_JAVA_FILES) \
   $(SYNC_PP_JAVA_FILES) \
   R.java \
   $(NULL)
 gecko-browser_EXTRA_JARS := \
@@ -478,17 +484,17 @@ gecko-util_JAVAFILES := \
 gecko-util_EXTRA_JARS := \
   jars/gecko-mozglue.jar \
   $(NULL)
 gecko-util_JAVAC_FLAGS := -Xlint:all,-deprecation
 
 JAVA_JAR_TARGETS += sync-thirdparty
 sync-thirdparty_DEST := jars/sync-thirdparty.jar
 sync-thirdparty_JAVAFILES := \
-  $(SYNC_THIRDPARTY_JAVA_FILES) \
+  $(addprefix $(thirdparty_source_dir)/,$(SYNC_THIRDPARTY_JAVA_FILES)) \
   $(NULL)
 sync-thirdparty_JAVAC_FLAGS := -Xlint:none
 
 ifdef MOZ_WEBRTC
 JAVA_JAR_TARGETS += webrtc
 webrtc_DEST := jars/webrtc.jar
 webrtc_JAVAFILES := \
   $(WEBRTC_JAVA_FILES) \
--- a/mobile/android/base/android-services-files.mk
+++ b/mobile/android/base/android-services-files.mk
@@ -298,474 +298,474 @@ SYNC_JAVA_FILES := \
   sync/SynchronizerConfiguration.java \
   sync/ThreadPool.java \
   sync/UnexpectedJSONException.java \
   sync/UnknownSynchronizerConfigurationVersionException.java \
   sync/Utils.java \
   $(NULL)
 
 SYNC_THIRDPARTY_JAVA_FILES := \
-  httpclientandroidlib/androidextra/HttpClientAndroidLog.java \
-  httpclientandroidlib/annotation/GuardedBy.java \
-  httpclientandroidlib/annotation/Immutable.java \
-  httpclientandroidlib/annotation/NotThreadSafe.java \
-  httpclientandroidlib/annotation/ThreadSafe.java \
-  httpclientandroidlib/auth/AUTH.java \
-  httpclientandroidlib/auth/AuthenticationException.java \
-  httpclientandroidlib/auth/AuthScheme.java \
-  httpclientandroidlib/auth/AuthSchemeFactory.java \
-  httpclientandroidlib/auth/AuthSchemeRegistry.java \
-  httpclientandroidlib/auth/AuthScope.java \
-  httpclientandroidlib/auth/AuthState.java \
-  httpclientandroidlib/auth/BasicUserPrincipal.java \
-  httpclientandroidlib/auth/ContextAwareAuthScheme.java \
-  httpclientandroidlib/auth/Credentials.java \
-  httpclientandroidlib/auth/InvalidCredentialsException.java \
-  httpclientandroidlib/auth/MalformedChallengeException.java \
-  httpclientandroidlib/auth/NTCredentials.java \
-  httpclientandroidlib/auth/NTUserPrincipal.java \
-  httpclientandroidlib/auth/params/AuthParamBean.java \
-  httpclientandroidlib/auth/params/AuthParams.java \
-  httpclientandroidlib/auth/params/AuthPNames.java \
-  httpclientandroidlib/auth/UsernamePasswordCredentials.java \
-  httpclientandroidlib/client/AuthCache.java \
-  httpclientandroidlib/client/AuthenticationHandler.java \
-  httpclientandroidlib/client/CircularRedirectException.java \
-  httpclientandroidlib/client/ClientProtocolException.java \
-  httpclientandroidlib/client/CookieStore.java \
-  httpclientandroidlib/client/CredentialsProvider.java \
-  httpclientandroidlib/client/entity/DecompressingEntity.java \
-  httpclientandroidlib/client/entity/DeflateDecompressingEntity.java \
-  httpclientandroidlib/client/entity/GzipDecompressingEntity.java \
-  httpclientandroidlib/client/entity/UrlEncodedFormEntity.java \
-  httpclientandroidlib/client/HttpClient.java \
-  httpclientandroidlib/client/HttpRequestRetryHandler.java \
-  httpclientandroidlib/client/HttpResponseException.java \
-  httpclientandroidlib/client/methods/AbortableHttpRequest.java \
-  httpclientandroidlib/client/methods/HttpDelete.java \
-  httpclientandroidlib/client/methods/HttpEntityEnclosingRequestBase.java \
-  httpclientandroidlib/client/methods/HttpGet.java \
-  httpclientandroidlib/client/methods/HttpHead.java \
-  httpclientandroidlib/client/methods/HttpOptions.java \
-  httpclientandroidlib/client/methods/HttpPost.java \
-  httpclientandroidlib/client/methods/HttpPut.java \
-  httpclientandroidlib/client/methods/HttpRequestBase.java \
-  httpclientandroidlib/client/methods/HttpTrace.java \
-  httpclientandroidlib/client/methods/HttpUriRequest.java \
-  httpclientandroidlib/client/NonRepeatableRequestException.java \
-  httpclientandroidlib/client/params/AllClientPNames.java \
-  httpclientandroidlib/client/params/AuthPolicy.java \
-  httpclientandroidlib/client/params/ClientParamBean.java \
-  httpclientandroidlib/client/params/ClientPNames.java \
-  httpclientandroidlib/client/params/CookiePolicy.java \
-  httpclientandroidlib/client/params/HttpClientParams.java \
-  httpclientandroidlib/client/protocol/ClientContext.java \
-  httpclientandroidlib/client/protocol/ClientContextConfigurer.java \
-  httpclientandroidlib/client/protocol/RequestAcceptEncoding.java \
-  httpclientandroidlib/client/protocol/RequestAddCookies.java \
-  httpclientandroidlib/client/protocol/RequestAuthCache.java \
-  httpclientandroidlib/client/protocol/RequestClientConnControl.java \
-  httpclientandroidlib/client/protocol/RequestDefaultHeaders.java \
-  httpclientandroidlib/client/protocol/RequestProxyAuthentication.java \
-  httpclientandroidlib/client/protocol/RequestTargetAuthentication.java \
-  httpclientandroidlib/client/protocol/ResponseAuthCache.java \
-  httpclientandroidlib/client/protocol/ResponseContentEncoding.java \
-  httpclientandroidlib/client/protocol/ResponseProcessCookies.java \
-  httpclientandroidlib/client/RedirectException.java \
-  httpclientandroidlib/client/RedirectHandler.java \
-  httpclientandroidlib/client/RedirectStrategy.java \
-  httpclientandroidlib/client/RequestDirector.java \
-  httpclientandroidlib/client/ResponseHandler.java \
-  httpclientandroidlib/client/UserTokenHandler.java \
-  httpclientandroidlib/client/utils/CloneUtils.java \
-  httpclientandroidlib/client/utils/Idn.java \
-  httpclientandroidlib/client/utils/JdkIdn.java \
-  httpclientandroidlib/client/utils/Punycode.java \
-  httpclientandroidlib/client/utils/Rfc3492Idn.java \
-  httpclientandroidlib/client/utils/URIUtils.java \
-  httpclientandroidlib/client/utils/URLEncodedUtils.java \
-  httpclientandroidlib/conn/BasicEofSensorWatcher.java \
-  httpclientandroidlib/conn/BasicManagedEntity.java \
-  httpclientandroidlib/conn/ClientConnectionManager.java \
-  httpclientandroidlib/conn/ClientConnectionManagerFactory.java \
-  httpclientandroidlib/conn/ClientConnectionOperator.java \
-  httpclientandroidlib/conn/ClientConnectionRequest.java \
-  httpclientandroidlib/conn/ConnectionKeepAliveStrategy.java \
-  httpclientandroidlib/conn/ConnectionPoolTimeoutException.java \
-  httpclientandroidlib/conn/ConnectionReleaseTrigger.java \
-  httpclientandroidlib/conn/ConnectTimeoutException.java \
-  httpclientandroidlib/conn/EofSensorInputStream.java \
-  httpclientandroidlib/conn/EofSensorWatcher.java \
-  httpclientandroidlib/conn/HttpHostConnectException.java \
-  httpclientandroidlib/conn/HttpRoutedConnection.java \
-  httpclientandroidlib/conn/ManagedClientConnection.java \
-  httpclientandroidlib/conn/MultihomePlainSocketFactory.java \
-  httpclientandroidlib/conn/OperatedClientConnection.java \
-  httpclientandroidlib/conn/params/ConnConnectionParamBean.java \
-  httpclientandroidlib/conn/params/ConnConnectionPNames.java \
-  httpclientandroidlib/conn/params/ConnManagerParamBean.java \
-  httpclientandroidlib/conn/params/ConnManagerParams.java \
-  httpclientandroidlib/conn/params/ConnManagerPNames.java \
-  httpclientandroidlib/conn/params/ConnPerRoute.java \
-  httpclientandroidlib/conn/params/ConnPerRouteBean.java \
-  httpclientandroidlib/conn/params/ConnRouteParamBean.java \
-  httpclientandroidlib/conn/params/ConnRouteParams.java \
-  httpclientandroidlib/conn/params/ConnRoutePNames.java \
-  httpclientandroidlib/conn/routing/BasicRouteDirector.java \
-  httpclientandroidlib/conn/routing/HttpRoute.java \
-  httpclientandroidlib/conn/routing/HttpRouteDirector.java \
-  httpclientandroidlib/conn/routing/HttpRoutePlanner.java \
-  httpclientandroidlib/conn/routing/RouteInfo.java \
-  httpclientandroidlib/conn/routing/RouteTracker.java \
-  httpclientandroidlib/conn/scheme/HostNameResolver.java \
-  httpclientandroidlib/conn/scheme/LayeredSchemeSocketFactory.java \
-  httpclientandroidlib/conn/scheme/LayeredSchemeSocketFactoryAdaptor.java \
-  httpclientandroidlib/conn/scheme/LayeredSocketFactory.java \
-  httpclientandroidlib/conn/scheme/LayeredSocketFactoryAdaptor.java \
-  httpclientandroidlib/conn/scheme/PlainSocketFactory.java \
-  httpclientandroidlib/conn/scheme/Scheme.java \
-  httpclientandroidlib/conn/scheme/SchemeRegistry.java \
-  httpclientandroidlib/conn/scheme/SchemeSocketFactory.java \
-  httpclientandroidlib/conn/scheme/SchemeSocketFactoryAdaptor.java \
-  httpclientandroidlib/conn/scheme/SocketFactory.java \
-  httpclientandroidlib/conn/scheme/SocketFactoryAdaptor.java \
-  httpclientandroidlib/conn/ssl/AbstractVerifier.java \
-  httpclientandroidlib/conn/ssl/AllowAllHostnameVerifier.java \
-  httpclientandroidlib/conn/ssl/BrowserCompatHostnameVerifier.java \
-  httpclientandroidlib/conn/ssl/SSLSocketFactory.java \
-  httpclientandroidlib/conn/ssl/StrictHostnameVerifier.java \
-  httpclientandroidlib/conn/ssl/TrustManagerDecorator.java \
-  httpclientandroidlib/conn/ssl/TrustSelfSignedStrategy.java \
-  httpclientandroidlib/conn/ssl/TrustStrategy.java \
-  httpclientandroidlib/conn/ssl/X509HostnameVerifier.java \
-  httpclientandroidlib/conn/util/InetAddressUtils.java \
-  httpclientandroidlib/ConnectionClosedException.java \
-  httpclientandroidlib/ConnectionReuseStrategy.java \
-  httpclientandroidlib/cookie/ClientCookie.java \
-  httpclientandroidlib/cookie/Cookie.java \
-  httpclientandroidlib/cookie/CookieAttributeHandler.java \
-  httpclientandroidlib/cookie/CookieIdentityComparator.java \
-  httpclientandroidlib/cookie/CookieOrigin.java \
-  httpclientandroidlib/cookie/CookiePathComparator.java \
-  httpclientandroidlib/cookie/CookieRestrictionViolationException.java \
-  httpclientandroidlib/cookie/CookieSpec.java \
-  httpclientandroidlib/cookie/CookieSpecFactory.java \
-  httpclientandroidlib/cookie/CookieSpecRegistry.java \
-  httpclientandroidlib/cookie/MalformedCookieException.java \
-  httpclientandroidlib/cookie/params/CookieSpecParamBean.java \
-  httpclientandroidlib/cookie/params/CookieSpecPNames.java \
-  httpclientandroidlib/cookie/SetCookie.java \
-  httpclientandroidlib/cookie/SetCookie2.java \
-  httpclientandroidlib/cookie/SM.java \
-  httpclientandroidlib/entity/AbstractHttpEntity.java \
-  httpclientandroidlib/entity/BasicHttpEntity.java \
-  httpclientandroidlib/entity/BufferedHttpEntity.java \
-  httpclientandroidlib/entity/ByteArrayEntity.java \
-  httpclientandroidlib/entity/ContentLengthStrategy.java \
-  httpclientandroidlib/entity/ContentProducer.java \
-  httpclientandroidlib/entity/EntityTemplate.java \
-  httpclientandroidlib/entity/FileEntity.java \
-  httpclientandroidlib/entity/HttpEntityWrapper.java \
-  httpclientandroidlib/entity/InputStreamEntity.java \
-  httpclientandroidlib/entity/SerializableEntity.java \
-  httpclientandroidlib/entity/StringEntity.java \
-  httpclientandroidlib/FormattedHeader.java \
-  httpclientandroidlib/Header.java \
-  httpclientandroidlib/HeaderElement.java \
-  httpclientandroidlib/HeaderElementIterator.java \
-  httpclientandroidlib/HeaderIterator.java \
-  httpclientandroidlib/HttpClientConnection.java \
-  httpclientandroidlib/HttpConnection.java \
-  httpclientandroidlib/HttpConnectionMetrics.java \
-  httpclientandroidlib/HttpEntity.java \
-  httpclientandroidlib/HttpEntityEnclosingRequest.java \
-  httpclientandroidlib/HttpException.java \
-  httpclientandroidlib/HttpHeaders.java \
-  httpclientandroidlib/HttpHost.java \
-  httpclientandroidlib/HttpInetConnection.java \
-  httpclientandroidlib/HttpMessage.java \
-  httpclientandroidlib/HttpRequest.java \
-  httpclientandroidlib/HttpRequestFactory.java \
-  httpclientandroidlib/HttpRequestInterceptor.java \
-  httpclientandroidlib/HttpResponse.java \
-  httpclientandroidlib/HttpResponseFactory.java \
-  httpclientandroidlib/HttpResponseInterceptor.java \
-  httpclientandroidlib/HttpServerConnection.java \
-  httpclientandroidlib/HttpStatus.java \
-  httpclientandroidlib/HttpVersion.java \
-  httpclientandroidlib/impl/AbstractHttpClientConnection.java \
-  httpclientandroidlib/impl/AbstractHttpServerConnection.java \
-  httpclientandroidlib/impl/auth/AuthSchemeBase.java \
-  httpclientandroidlib/impl/auth/BasicScheme.java \
-  httpclientandroidlib/impl/auth/BasicSchemeFactory.java \
-  httpclientandroidlib/impl/auth/DigestScheme.java \
-  httpclientandroidlib/impl/auth/DigestSchemeFactory.java \
-  httpclientandroidlib/impl/auth/NTLMEngine.java \
-  httpclientandroidlib/impl/auth/NTLMEngineException.java \
-  httpclientandroidlib/impl/auth/NTLMEngineImpl.java \
-  httpclientandroidlib/impl/auth/NTLMScheme.java \
-  httpclientandroidlib/impl/auth/NTLMSchemeFactory.java \
-  httpclientandroidlib/impl/auth/RFC2617Scheme.java \
-  httpclientandroidlib/impl/auth/SpnegoTokenGenerator.java \
-  httpclientandroidlib/impl/auth/UnsupportedDigestAlgorithmException.java \
-  httpclientandroidlib/impl/client/AbstractAuthenticationHandler.java \
-  httpclientandroidlib/impl/client/AbstractHttpClient.java \
-  httpclientandroidlib/impl/client/BasicAuthCache.java \
-  httpclientandroidlib/impl/client/BasicCookieStore.java \
-  httpclientandroidlib/impl/client/BasicCredentialsProvider.java \
-  httpclientandroidlib/impl/client/BasicResponseHandler.java \
-  httpclientandroidlib/impl/client/ClientParamsStack.java \
-  httpclientandroidlib/impl/client/ContentEncodingHttpClient.java \
-  httpclientandroidlib/impl/client/DefaultConnectionKeepAliveStrategy.java \
-  httpclientandroidlib/impl/client/DefaultHttpClient.java \
-  httpclientandroidlib/impl/client/DefaultHttpRequestRetryHandler.java \
-  httpclientandroidlib/impl/client/DefaultProxyAuthenticationHandler.java \
-  httpclientandroidlib/impl/client/DefaultRedirectHandler.java \
-  httpclientandroidlib/impl/client/DefaultRedirectStrategy.java \
-  httpclientandroidlib/impl/client/DefaultRedirectStrategyAdaptor.java \
-  httpclientandroidlib/impl/client/DefaultRequestDirector.java \
-  httpclientandroidlib/impl/client/DefaultTargetAuthenticationHandler.java \
-  httpclientandroidlib/impl/client/DefaultUserTokenHandler.java \
-  httpclientandroidlib/impl/client/EntityEnclosingRequestWrapper.java \
-  httpclientandroidlib/impl/client/RedirectLocations.java \
-  httpclientandroidlib/impl/client/RequestWrapper.java \
-  httpclientandroidlib/impl/client/RoutedRequest.java \
-  httpclientandroidlib/impl/client/TunnelRefusedException.java \
-  httpclientandroidlib/impl/conn/AbstractClientConnAdapter.java \
-  httpclientandroidlib/impl/conn/AbstractPooledConnAdapter.java \
-  httpclientandroidlib/impl/conn/AbstractPoolEntry.java \
-  httpclientandroidlib/impl/conn/ConnectionShutdownException.java \
-  httpclientandroidlib/impl/conn/DefaultClientConnection.java \
-  httpclientandroidlib/impl/conn/DefaultClientConnectionOperator.java \
-  httpclientandroidlib/impl/conn/DefaultHttpRoutePlanner.java \
-  httpclientandroidlib/impl/conn/DefaultResponseParser.java \
-  httpclientandroidlib/impl/conn/HttpInetSocketAddress.java \
-  httpclientandroidlib/impl/conn/IdleConnectionHandler.java \
-  httpclientandroidlib/impl/conn/LoggingSessionInputBuffer.java \
-  httpclientandroidlib/impl/conn/LoggingSessionOutputBuffer.java \
-  httpclientandroidlib/impl/conn/ProxySelectorRoutePlanner.java \
-  httpclientandroidlib/impl/conn/SchemeRegistryFactory.java \
-  httpclientandroidlib/impl/conn/SingleClientConnManager.java \
-  httpclientandroidlib/impl/conn/tsccm/AbstractConnPool.java \
-  httpclientandroidlib/impl/conn/tsccm/BasicPooledConnAdapter.java \
-  httpclientandroidlib/impl/conn/tsccm/BasicPoolEntry.java \
-  httpclientandroidlib/impl/conn/tsccm/BasicPoolEntryRef.java \
-  httpclientandroidlib/impl/conn/tsccm/ConnPoolByRoute.java \
-  httpclientandroidlib/impl/conn/tsccm/PoolEntryRequest.java \
-  httpclientandroidlib/impl/conn/tsccm/RefQueueHandler.java \
-  httpclientandroidlib/impl/conn/tsccm/RefQueueWorker.java \
-  httpclientandroidlib/impl/conn/tsccm/RouteSpecificPool.java \
-  httpclientandroidlib/impl/conn/tsccm/ThreadSafeClientConnManager.java \
-  httpclientandroidlib/impl/conn/tsccm/WaitingThread.java \
-  httpclientandroidlib/impl/conn/tsccm/WaitingThreadAborter.java \
-  httpclientandroidlib/impl/conn/Wire.java \
-  httpclientandroidlib/impl/cookie/AbstractCookieAttributeHandler.java \
-  httpclientandroidlib/impl/cookie/AbstractCookieSpec.java \
-  httpclientandroidlib/impl/cookie/BasicClientCookie.java \
-  httpclientandroidlib/impl/cookie/BasicClientCookie2.java \
-  httpclientandroidlib/impl/cookie/BasicCommentHandler.java \
-  httpclientandroidlib/impl/cookie/BasicDomainHandler.java \
-  httpclientandroidlib/impl/cookie/BasicExpiresHandler.java \
-  httpclientandroidlib/impl/cookie/BasicMaxAgeHandler.java \
-  httpclientandroidlib/impl/cookie/BasicPathHandler.java \
-  httpclientandroidlib/impl/cookie/BasicSecureHandler.java \
-  httpclientandroidlib/impl/cookie/BestMatchSpec.java \
-  httpclientandroidlib/impl/cookie/BestMatchSpecFactory.java \
-  httpclientandroidlib/impl/cookie/BrowserCompatSpec.java \
-  httpclientandroidlib/impl/cookie/BrowserCompatSpecFactory.java \
-  httpclientandroidlib/impl/cookie/CookieSpecBase.java \
-  httpclientandroidlib/impl/cookie/DateParseException.java \
-  httpclientandroidlib/impl/cookie/DateUtils.java \
-  httpclientandroidlib/impl/cookie/IgnoreSpec.java \
-  httpclientandroidlib/impl/cookie/IgnoreSpecFactory.java \
-  httpclientandroidlib/impl/cookie/NetscapeDomainHandler.java \
-  httpclientandroidlib/impl/cookie/NetscapeDraftHeaderParser.java \
-  httpclientandroidlib/impl/cookie/NetscapeDraftSpec.java \
-  httpclientandroidlib/impl/cookie/NetscapeDraftSpecFactory.java \
-  httpclientandroidlib/impl/cookie/PublicSuffixFilter.java \
-  httpclientandroidlib/impl/cookie/PublicSuffixListParser.java \
-  httpclientandroidlib/impl/cookie/RFC2109DomainHandler.java \
-  httpclientandroidlib/impl/cookie/RFC2109Spec.java \
-  httpclientandroidlib/impl/cookie/RFC2109SpecFactory.java \
-  httpclientandroidlib/impl/cookie/RFC2109VersionHandler.java \
-  httpclientandroidlib/impl/cookie/RFC2965CommentUrlAttributeHandler.java \
-  httpclientandroidlib/impl/cookie/RFC2965DiscardAttributeHandler.java \
-  httpclientandroidlib/impl/cookie/RFC2965DomainAttributeHandler.java \
-  httpclientandroidlib/impl/cookie/RFC2965PortAttributeHandler.java \
-  httpclientandroidlib/impl/cookie/RFC2965Spec.java \
-  httpclientandroidlib/impl/cookie/RFC2965SpecFactory.java \
-  httpclientandroidlib/impl/cookie/RFC2965VersionAttributeHandler.java \
-  httpclientandroidlib/impl/DefaultConnectionReuseStrategy.java \
-  httpclientandroidlib/impl/DefaultHttpClientConnection.java \
-  httpclientandroidlib/impl/DefaultHttpRequestFactory.java \
-  httpclientandroidlib/impl/DefaultHttpResponseFactory.java \
-  httpclientandroidlib/impl/DefaultHttpServerConnection.java \
-  httpclientandroidlib/impl/EnglishReasonPhraseCatalog.java \
-  httpclientandroidlib/impl/entity/EntityDeserializer.java \
-  httpclientandroidlib/impl/entity/EntitySerializer.java \
-  httpclientandroidlib/impl/entity/LaxContentLengthStrategy.java \
-  httpclientandroidlib/impl/entity/StrictContentLengthStrategy.java \
-  httpclientandroidlib/impl/HttpConnectionMetricsImpl.java \
-  httpclientandroidlib/impl/io/AbstractMessageParser.java \
-  httpclientandroidlib/impl/io/AbstractMessageWriter.java \
-  httpclientandroidlib/impl/io/AbstractSessionInputBuffer.java \
-  httpclientandroidlib/impl/io/AbstractSessionOutputBuffer.java \
-  httpclientandroidlib/impl/io/ChunkedInputStream.java \
-  httpclientandroidlib/impl/io/ChunkedOutputStream.java \
-  httpclientandroidlib/impl/io/ContentLengthInputStream.java \
-  httpclientandroidlib/impl/io/ContentLengthOutputStream.java \
-  httpclientandroidlib/impl/io/HttpRequestParser.java \
-  httpclientandroidlib/impl/io/HttpRequestWriter.java \
-  httpclientandroidlib/impl/io/HttpResponseParser.java \
-  httpclientandroidlib/impl/io/HttpResponseWriter.java \
-  httpclientandroidlib/impl/io/HttpTransportMetricsImpl.java \
-  httpclientandroidlib/impl/io/IdentityInputStream.java \
-  httpclientandroidlib/impl/io/IdentityOutputStream.java \
-  httpclientandroidlib/impl/io/SocketInputBuffer.java \
-  httpclientandroidlib/impl/io/SocketOutputBuffer.java \
-  httpclientandroidlib/impl/NoConnectionReuseStrategy.java \
-  httpclientandroidlib/impl/SocketHttpClientConnection.java \
-  httpclientandroidlib/impl/SocketHttpServerConnection.java \
-  httpclientandroidlib/io/BufferInfo.java \
-  httpclientandroidlib/io/EofSensor.java \
-  httpclientandroidlib/io/HttpMessageParser.java \
-  httpclientandroidlib/io/HttpMessageWriter.java \
-  httpclientandroidlib/io/HttpTransportMetrics.java \
-  httpclientandroidlib/io/SessionInputBuffer.java \
-  httpclientandroidlib/io/SessionOutputBuffer.java \
-  httpclientandroidlib/MalformedChunkCodingException.java \
-  httpclientandroidlib/message/AbstractHttpMessage.java \
-  httpclientandroidlib/message/BasicHeader.java \
-  httpclientandroidlib/message/BasicHeaderElement.java \
-  httpclientandroidlib/message/BasicHeaderElementIterator.java \
-  httpclientandroidlib/message/BasicHeaderIterator.java \
-  httpclientandroidlib/message/BasicHeaderValueFormatter.java \
-  httpclientandroidlib/message/BasicHeaderValueParser.java \
-  httpclientandroidlib/message/BasicHttpEntityEnclosingRequest.java \
-  httpclientandroidlib/message/BasicHttpRequest.java \
-  httpclientandroidlib/message/BasicHttpResponse.java \
-  httpclientandroidlib/message/BasicLineFormatter.java \
-  httpclientandroidlib/message/BasicLineParser.java \
-  httpclientandroidlib/message/BasicListHeaderIterator.java \
-  httpclientandroidlib/message/BasicNameValuePair.java \
-  httpclientandroidlib/message/BasicRequestLine.java \
-  httpclientandroidlib/message/BasicStatusLine.java \
-  httpclientandroidlib/message/BasicTokenIterator.java \
-  httpclientandroidlib/message/BufferedHeader.java \
-  httpclientandroidlib/message/HeaderGroup.java \
-  httpclientandroidlib/message/HeaderValueFormatter.java \
-  httpclientandroidlib/message/HeaderValueParser.java \
-  httpclientandroidlib/message/LineFormatter.java \
-  httpclientandroidlib/message/LineParser.java \
-  httpclientandroidlib/message/ParserCursor.java \
-  httpclientandroidlib/MethodNotSupportedException.java \
-  httpclientandroidlib/NameValuePair.java \
-  httpclientandroidlib/NoHttpResponseException.java \
-  httpclientandroidlib/params/AbstractHttpParams.java \
-  httpclientandroidlib/params/BasicHttpParams.java \
-  httpclientandroidlib/params/CoreConnectionPNames.java \
-  httpclientandroidlib/params/CoreProtocolPNames.java \
-  httpclientandroidlib/params/DefaultedHttpParams.java \
-  httpclientandroidlib/params/HttpAbstractParamBean.java \
-  httpclientandroidlib/params/HttpConnectionParamBean.java \
-  httpclientandroidlib/params/HttpConnectionParams.java \
-  httpclientandroidlib/params/HttpParams.java \
-  httpclientandroidlib/params/HttpProtocolParamBean.java \
-  httpclientandroidlib/params/HttpProtocolParams.java \
-  httpclientandroidlib/params/SyncBasicHttpParams.java \
-  httpclientandroidlib/ParseException.java \
-  httpclientandroidlib/protocol/BasicHttpContext.java \
-  httpclientandroidlib/protocol/BasicHttpProcessor.java \
-  httpclientandroidlib/protocol/DefaultedHttpContext.java \
-  httpclientandroidlib/protocol/ExecutionContext.java \
-  httpclientandroidlib/protocol/HTTP.java \
-  httpclientandroidlib/protocol/HttpContext.java \
-  httpclientandroidlib/protocol/HttpDateGenerator.java \
-  httpclientandroidlib/protocol/HttpExpectationVerifier.java \
-  httpclientandroidlib/protocol/HttpProcessor.java \
-  httpclientandroidlib/protocol/HttpRequestExecutor.java \
-  httpclientandroidlib/protocol/HttpRequestHandler.java \
-  httpclientandroidlib/protocol/HttpRequestHandlerRegistry.java \
-  httpclientandroidlib/protocol/HttpRequestHandlerResolver.java \
-  httpclientandroidlib/protocol/HttpRequestInterceptorList.java \
-  httpclientandroidlib/protocol/HttpResponseInterceptorList.java \
-  httpclientandroidlib/protocol/HttpService.java \
-  httpclientandroidlib/protocol/ImmutableHttpProcessor.java \
-  httpclientandroidlib/protocol/RequestConnControl.java \
-  httpclientandroidlib/protocol/RequestContent.java \
-  httpclientandroidlib/protocol/RequestDate.java \
-  httpclientandroidlib/protocol/RequestExpectContinue.java \
-  httpclientandroidlib/protocol/RequestTargetHost.java \
-  httpclientandroidlib/protocol/RequestUserAgent.java \
-  httpclientandroidlib/protocol/ResponseConnControl.java \
-  httpclientandroidlib/protocol/ResponseContent.java \
-  httpclientandroidlib/protocol/ResponseDate.java \
-  httpclientandroidlib/protocol/ResponseServer.java \
-  httpclientandroidlib/protocol/SyncBasicHttpContext.java \
-  httpclientandroidlib/protocol/UriPatternMatcher.java \
-  httpclientandroidlib/ProtocolException.java \
-  httpclientandroidlib/ProtocolVersion.java \
-  httpclientandroidlib/ReasonPhraseCatalog.java \
-  httpclientandroidlib/RequestLine.java \
-  httpclientandroidlib/StatusLine.java \
-  httpclientandroidlib/TokenIterator.java \
-  httpclientandroidlib/TruncatedChunkException.java \
-  httpclientandroidlib/UnsupportedHttpVersionException.java \
-  httpclientandroidlib/util/ByteArrayBuffer.java \
-  httpclientandroidlib/util/CharArrayBuffer.java \
-  httpclientandroidlib/util/EncodingUtils.java \
-  httpclientandroidlib/util/EntityUtils.java \
-  httpclientandroidlib/util/ExceptionUtils.java \
-  httpclientandroidlib/util/LangUtils.java \
-  httpclientandroidlib/util/VersionInfo.java \
-  json-simple/ItemList.java \
-  json-simple/JSONArray.java \
-  json-simple/JSONAware.java \
-  json-simple/JSONObject.java \
-  json-simple/JSONStreamAware.java \
-  json-simple/JSONValue.java \
-  json-simple/parser/ContainerFactory.java \
-  json-simple/parser/ContentHandler.java \
-  json-simple/parser/JSONParser.java \
-  json-simple/parser/ParseException.java \
-  json-simple/parser/Yylex.java \
-  json-simple/parser/Yytoken.java \
-  apache/commons/codec/binary/Base32.java \
-  apache/commons/codec/binary/Base32InputStream.java \
-  apache/commons/codec/binary/Base32OutputStream.java \
-  apache/commons/codec/binary/Base64.java \
-  apache/commons/codec/binary/Base64InputStream.java \
-  apache/commons/codec/binary/Base64OutputStream.java \
-  apache/commons/codec/binary/BaseNCodec.java \
-  apache/commons/codec/binary/BaseNCodecInputStream.java \
-  apache/commons/codec/binary/BaseNCodecOutputStream.java \
-  apache/commons/codec/binary/BinaryCodec.java \
-  apache/commons/codec/binary/Hex.java \
-  apache/commons/codec/binary/StringUtils.java \
-  apache/commons/codec/BinaryDecoder.java \
-  apache/commons/codec/BinaryEncoder.java \
-  apache/commons/codec/CharEncoding.java \
-  apache/commons/codec/Decoder.java \
-  apache/commons/codec/DecoderException.java \
-  apache/commons/codec/digest/DigestUtils.java \
-  apache/commons/codec/Encoder.java \
-  apache/commons/codec/EncoderException.java \
-  apache/commons/codec/language/AbstractCaverphone.java \
-  apache/commons/codec/language/Caverphone.java \
-  apache/commons/codec/language/Caverphone1.java \
-  apache/commons/codec/language/Caverphone2.java \
-  apache/commons/codec/language/ColognePhonetic.java \
-  apache/commons/codec/language/DoubleMetaphone.java \
-  apache/commons/codec/language/Metaphone.java \
-  apache/commons/codec/language/RefinedSoundex.java \
-  apache/commons/codec/language/Soundex.java \
-  apache/commons/codec/language/SoundexUtils.java \
-  apache/commons/codec/net/BCodec.java \
-  apache/commons/codec/net/QCodec.java \
-  apache/commons/codec/net/QuotedPrintableCodec.java \
-  apache/commons/codec/net/RFC1522Codec.java \
-  apache/commons/codec/net/URLCodec.java \
-  apache/commons/codec/net/Utils.java \
-  apache/commons/codec/StringDecoder.java \
-  apache/commons/codec/StringEncoder.java \
-  apache/commons/codec/StringEncoderComparator.java \
+  ch/boye/httpclientandroidlib/androidextra/HttpClientAndroidLog.java \
+  ch/boye/httpclientandroidlib/annotation/GuardedBy.java \
+  ch/boye/httpclientandroidlib/annotation/Immutable.java \
+  ch/boye/httpclientandroidlib/annotation/NotThreadSafe.java \
+  ch/boye/httpclientandroidlib/annotation/ThreadSafe.java \
+  ch/boye/httpclientandroidlib/auth/AUTH.java \
+  ch/boye/httpclientandroidlib/auth/AuthenticationException.java \
+  ch/boye/httpclientandroidlib/auth/AuthScheme.java \
+  ch/boye/httpclientandroidlib/auth/AuthSchemeFactory.java \
+  ch/boye/httpclientandroidlib/auth/AuthSchemeRegistry.java \
+  ch/boye/httpclientandroidlib/auth/AuthScope.java \
+  ch/boye/httpclientandroidlib/auth/AuthState.java \
+  ch/boye/httpclientandroidlib/auth/BasicUserPrincipal.java \
+  ch/boye/httpclientandroidlib/auth/ContextAwareAuthScheme.java \
+  ch/boye/httpclientandroidlib/auth/Credentials.java \
+  ch/boye/httpclientandroidlib/auth/InvalidCredentialsException.java \
+  ch/boye/httpclientandroidlib/auth/MalformedChallengeException.java \
+  ch/boye/httpclientandroidlib/auth/NTCredentials.java \
+  ch/boye/httpclientandroidlib/auth/NTUserPrincipal.java \
+  ch/boye/httpclientandroidlib/auth/params/AuthParamBean.java \
+  ch/boye/httpclientandroidlib/auth/params/AuthParams.java \
+  ch/boye/httpclientandroidlib/auth/params/AuthPNames.java \
+  ch/boye/httpclientandroidlib/auth/UsernamePasswordCredentials.java \
+  ch/boye/httpclientandroidlib/client/AuthCache.java \
+  ch/boye/httpclientandroidlib/client/AuthenticationHandler.java \
+  ch/boye/httpclientandroidlib/client/CircularRedirectException.java \
+  ch/boye/httpclientandroidlib/client/ClientProtocolException.java \
+  ch/boye/httpclientandroidlib/client/CookieStore.java \
+  ch/boye/httpclientandroidlib/client/CredentialsProvider.java \
+  ch/boye/httpclientandroidlib/client/entity/DecompressingEntity.java \
+  ch/boye/httpclientandroidlib/client/entity/DeflateDecompressingEntity.java \
+  ch/boye/httpclientandroidlib/client/entity/GzipDecompressingEntity.java \
+  ch/boye/httpclientandroidlib/client/entity/UrlEncodedFormEntity.java \
+  ch/boye/httpclientandroidlib/client/HttpClient.java \
+  ch/boye/httpclientandroidlib/client/HttpRequestRetryHandler.java \
+  ch/boye/httpclientandroidlib/client/HttpResponseException.java \
+  ch/boye/httpclientandroidlib/client/methods/AbortableHttpRequest.java \
+  ch/boye/httpclientandroidlib/client/methods/HttpDelete.java \
+  ch/boye/httpclientandroidlib/client/methods/HttpEntityEnclosingRequestBase.java \
+  ch/boye/httpclientandroidlib/client/methods/HttpGet.java \
+  ch/boye/httpclientandroidlib/client/methods/HttpHead.java \
+  ch/boye/httpclientandroidlib/client/methods/HttpOptions.java \
+  ch/boye/httpclientandroidlib/client/methods/HttpPost.java \
+  ch/boye/httpclientandroidlib/client/methods/HttpPut.java \
+  ch/boye/httpclientandroidlib/client/methods/HttpRequestBase.java \
+  ch/boye/httpclientandroidlib/client/methods/HttpTrace.java \
+  ch/boye/httpclientandroidlib/client/methods/HttpUriRequest.java \
+  ch/boye/httpclientandroidlib/client/NonRepeatableRequestException.java \
+  ch/boye/httpclientandroidlib/client/params/AllClientPNames.java \
+  ch/boye/httpclientandroidlib/client/params/AuthPolicy.java \
+  ch/boye/httpclientandroidlib/client/params/ClientParamBean.java \
+  ch/boye/httpclientandroidlib/client/params/ClientPNames.java \
+  ch/boye/httpclientandroidlib/client/params/CookiePolicy.java \
+  ch/boye/httpclientandroidlib/client/params/HttpClientParams.java \
+  ch/boye/httpclientandroidlib/client/protocol/ClientContext.java \
+  ch/boye/httpclientandroidlib/client/protocol/ClientContextConfigurer.java \
+  ch/boye/httpclientandroidlib/client/protocol/RequestAcceptEncoding.java \
+  ch/boye/httpclientandroidlib/client/protocol/RequestAddCookies.java \
+  ch/boye/httpclientandroidlib/client/protocol/RequestAuthCache.java \
+  ch/boye/httpclientandroidlib/client/protocol/RequestClientConnControl.java \
+  ch/boye/httpclientandroidlib/client/protocol/RequestDefaultHeaders.java \
+  ch/boye/httpclientandroidlib/client/protocol/RequestProxyAuthentication.java \
+  ch/boye/httpclientandroidlib/client/protocol/RequestTargetAuthentication.java \
+  ch/boye/httpclientandroidlib/client/protocol/ResponseAuthCache.java \
+  ch/boye/httpclientandroidlib/client/protocol/ResponseContentEncoding.java \
+  ch/boye/httpclientandroidlib/client/protocol/ResponseProcessCookies.java \
+  ch/boye/httpclientandroidlib/client/RedirectException.java \
+  ch/boye/httpclientandroidlib/client/RedirectHandler.java \
+  ch/boye/httpclientandroidlib/client/RedirectStrategy.java \
+  ch/boye/httpclientandroidlib/client/RequestDirector.java \
+  ch/boye/httpclientandroidlib/client/ResponseHandler.java \
+  ch/boye/httpclientandroidlib/client/UserTokenHandler.java \
+  ch/boye/httpclientandroidlib/client/utils/CloneUtils.java \
+  ch/boye/httpclientandroidlib/client/utils/Idn.java \
+  ch/boye/httpclientandroidlib/client/utils/JdkIdn.java \
+  ch/boye/httpclientandroidlib/client/utils/Punycode.java \
+  ch/boye/httpclientandroidlib/client/utils/Rfc3492Idn.java \
+  ch/boye/httpclientandroidlib/client/utils/URIUtils.java \
+  ch/boye/httpclientandroidlib/client/utils/URLEncodedUtils.java \
+  ch/boye/httpclientandroidlib/conn/BasicEofSensorWatcher.java \
+  ch/boye/httpclientandroidlib/conn/BasicManagedEntity.java \
+  ch/boye/httpclientandroidlib/conn/ClientConnectionManager.java \
+  ch/boye/httpclientandroidlib/conn/ClientConnectionManagerFactory.java \
+  ch/boye/httpclientandroidlib/conn/ClientConnectionOperator.java \
+  ch/boye/httpclientandroidlib/conn/ClientConnectionRequest.java \
+  ch/boye/httpclientandroidlib/conn/ConnectionKeepAliveStrategy.java \
+  ch/boye/httpclientandroidlib/conn/ConnectionPoolTimeoutException.java \
+  ch/boye/httpclientandroidlib/conn/ConnectionReleaseTrigger.java \
+  ch/boye/httpclientandroidlib/conn/ConnectTimeoutException.java \
+  ch/boye/httpclientandroidlib/conn/EofSensorInputStream.java \
+  ch/boye/httpclientandroidlib/conn/EofSensorWatcher.java \
+  ch/boye/httpclientandroidlib/conn/HttpHostConnectException.java \
+  ch/boye/httpclientandroidlib/conn/HttpRoutedConnection.java \
+  ch/boye/httpclientandroidlib/conn/ManagedClientConnection.java \
+  ch/boye/httpclientandroidlib/conn/MultihomePlainSocketFactory.java \
+  ch/boye/httpclientandroidlib/conn/OperatedClientConnection.java \
+  ch/boye/httpclientandroidlib/conn/params/ConnConnectionParamBean.java \
+  ch/boye/httpclientandroidlib/conn/params/ConnConnectionPNames.java \
+  ch/boye/httpclientandroidlib/conn/params/ConnManagerParamBean.java \
+  ch/boye/httpclientandroidlib/conn/params/ConnManagerParams.java \
+  ch/boye/httpclientandroidlib/conn/params/ConnManagerPNames.java \
+  ch/boye/httpclientandroidlib/conn/params/ConnPerRoute.java \
+  ch/boye/httpclientandroidlib/conn/params/ConnPerRouteBean.java \
+  ch/boye/httpclientandroidlib/conn/params/ConnRouteParamBean.java \
+  ch/boye/httpclientandroidlib/conn/params/ConnRouteParams.java \
+  ch/boye/httpclientandroidlib/conn/params/ConnRoutePNames.java \
+  ch/boye/httpclientandroidlib/conn/routing/BasicRouteDirector.java \
+  ch/boye/httpclientandroidlib/conn/routing/HttpRoute.java \
+  ch/boye/httpclientandroidlib/conn/routing/HttpRouteDirector.java \
+  ch/boye/httpclientandroidlib/conn/routing/HttpRoutePlanner.java \
+  ch/boye/httpclientandroidlib/conn/routing/RouteInfo.java \
+  ch/boye/httpclientandroidlib/conn/routing/RouteTracker.java \
+  ch/boye/httpclientandroidlib/conn/scheme/HostNameResolver.java \
+  ch/boye/httpclientandroidlib/conn/scheme/LayeredSchemeSocketFactory.java \
+  ch/boye/httpclientandroidlib/conn/scheme/LayeredSchemeSocketFactoryAdaptor.java \
+  ch/boye/httpclientandroidlib/conn/scheme/LayeredSocketFactory.java \
+  ch/boye/httpclientandroidlib/conn/scheme/LayeredSocketFactoryAdaptor.java \
+  ch/boye/httpclientandroidlib/conn/scheme/PlainSocketFactory.java \
+  ch/boye/httpclientandroidlib/conn/scheme/Scheme.java \
+  ch/boye/httpclientandroidlib/conn/scheme/SchemeRegistry.java \
+  ch/boye/httpclientandroidlib/conn/scheme/SchemeSocketFactory.java \
+  ch/boye/httpclientandroidlib/conn/scheme/SchemeSocketFactoryAdaptor.java \
+  ch/boye/httpclientandroidlib/conn/scheme/SocketFactory.java \
+  ch/boye/httpclientandroidlib/conn/scheme/SocketFactoryAdaptor.java \
+  ch/boye/httpclientandroidlib/conn/ssl/AbstractVerifier.java \
+  ch/boye/httpclientandroidlib/conn/ssl/AllowAllHostnameVerifier.java \
+  ch/boye/httpclientandroidlib/conn/ssl/BrowserCompatHostnameVerifier.java \
+  ch/boye/httpclientandroidlib/conn/ssl/SSLSocketFactory.java \
+  ch/boye/httpclientandroidlib/conn/ssl/StrictHostnameVerifier.java \
+  ch/boye/httpclientandroidlib/conn/ssl/TrustManagerDecorator.java \
+  ch/boye/httpclientandroidlib/conn/ssl/TrustSelfSignedStrategy.java \
+  ch/boye/httpclientandroidlib/conn/ssl/TrustStrategy.java \
+  ch/boye/httpclientandroidlib/conn/ssl/X509HostnameVerifier.java \
+  ch/boye/httpclientandroidlib/conn/util/InetAddressUtils.java \
+  ch/boye/httpclientandroidlib/ConnectionClosedException.java \
+  ch/boye/httpclientandroidlib/ConnectionReuseStrategy.java \
+  ch/boye/httpclientandroidlib/cookie/ClientCookie.java \
+  ch/boye/httpclientandroidlib/cookie/Cookie.java \
+  ch/boye/httpclientandroidlib/cookie/CookieAttributeHandler.java \
+  ch/boye/httpclientandroidlib/cookie/CookieIdentityComparator.java \
+  ch/boye/httpclientandroidlib/cookie/CookieOrigin.java \
+  ch/boye/httpclientandroidlib/cookie/CookiePathComparator.java \
+  ch/boye/httpclientandroidlib/cookie/CookieRestrictionViolationException.java \
+  ch/boye/httpclientandroidlib/cookie/CookieSpec.java \
+  ch/boye/httpclientandroidlib/cookie/CookieSpecFactory.java \
+  ch/boye/httpclientandroidlib/cookie/CookieSpecRegistry.java \
+  ch/boye/httpclientandroidlib/cookie/MalformedCookieException.java \
+  ch/boye/httpclientandroidlib/cookie/params/CookieSpecParamBean.java \
+  ch/boye/httpclientandroidlib/cookie/params/CookieSpecPNames.java \
+  ch/boye/httpclientandroidlib/cookie/SetCookie.java \
+  ch/boye/httpclientandroidlib/cookie/SetCookie2.java \
+  ch/boye/httpclientandroidlib/cookie/SM.java \
+  ch/boye/httpclientandroidlib/entity/AbstractHttpEntity.java \
+  ch/boye/httpclientandroidlib/entity/BasicHttpEntity.java \
+  ch/boye/httpclientandroidlib/entity/BufferedHttpEntity.java \
+  ch/boye/httpclientandroidlib/entity/ByteArrayEntity.java \
+  ch/boye/httpclientandroidlib/entity/ContentLengthStrategy.java \
+  ch/boye/httpclientandroidlib/entity/ContentProducer.java \
+  ch/boye/httpclientandroidlib/entity/EntityTemplate.java \
+  ch/boye/httpclientandroidlib/entity/FileEntity.java \
+  ch/boye/httpclientandroidlib/entity/HttpEntityWrapper.java \
+  ch/boye/httpclientandroidlib/entity/InputStreamEntity.java \
+  ch/boye/httpclientandroidlib/entity/SerializableEntity.java \
+  ch/boye/httpclientandroidlib/entity/StringEntity.java \
+  ch/boye/httpclientandroidlib/FormattedHeader.java \
+  ch/boye/httpclientandroidlib/Header.java \
+  ch/boye/httpclientandroidlib/HeaderElement.java \
+  ch/boye/httpclientandroidlib/HeaderElementIterator.java \
+  ch/boye/httpclientandroidlib/HeaderIterator.java \
+  ch/boye/httpclientandroidlib/HttpClientConnection.java \
+  ch/boye/httpclientandroidlib/HttpConnection.java \
+  ch/boye/httpclientandroidlib/HttpConnectionMetrics.java \
+  ch/boye/httpclientandroidlib/HttpEntity.java \
+  ch/boye/httpclientandroidlib/HttpEntityEnclosingRequest.java \
+  ch/boye/httpclientandroidlib/HttpException.java \
+  ch/boye/httpclientandroidlib/HttpHeaders.java \
+  ch/boye/httpclientandroidlib/HttpHost.java \
+  ch/boye/httpclientandroidlib/HttpInetConnection.java \
+  ch/boye/httpclientandroidlib/HttpMessage.java \
+  ch/boye/httpclientandroidlib/HttpRequest.java \
+  ch/boye/httpclientandroidlib/HttpRequestFactory.java \
+  ch/boye/httpclientandroidlib/HttpRequestInterceptor.java \
+  ch/boye/httpclientandroidlib/HttpResponse.java \
+  ch/boye/httpclientandroidlib/HttpResponseFactory.java \
+  ch/boye/httpclientandroidlib/HttpResponseInterceptor.java \
+  ch/boye/httpclientandroidlib/HttpServerConnection.java \
+  ch/boye/httpclientandroidlib/HttpStatus.java \
+  ch/boye/httpclientandroidlib/HttpVersion.java \
+  ch/boye/httpclientandroidlib/impl/AbstractHttpClientConnection.java \
+  ch/boye/httpclientandroidlib/impl/AbstractHttpServerConnection.java \
+  ch/boye/httpclientandroidlib/impl/auth/AuthSchemeBase.java \
+  ch/boye/httpclientandroidlib/impl/auth/BasicScheme.java \
+  ch/boye/httpclientandroidlib/impl/auth/BasicSchemeFactory.java \
+  ch/boye/httpclientandroidlib/impl/auth/DigestScheme.java \
+  ch/boye/httpclientandroidlib/impl/auth/DigestSchemeFactory.java \
+  ch/boye/httpclientandroidlib/impl/auth/NTLMEngine.java \
+  ch/boye/httpclientandroidlib/impl/auth/NTLMEngineException.java \
+  ch/boye/httpclientandroidlib/impl/auth/NTLMEngineImpl.java \
+  ch/boye/httpclientandroidlib/impl/auth/NTLMScheme.java \
+  ch/boye/httpclientandroidlib/impl/auth/NTLMSchemeFactory.java \
+  ch/boye/httpclientandroidlib/impl/auth/RFC2617Scheme.java \
+  ch/boye/httpclientandroidlib/impl/auth/SpnegoTokenGenerator.java \
+  ch/boye/httpclientandroidlib/impl/auth/UnsupportedDigestAlgorithmException.java \
+  ch/boye/httpclientandroidlib/impl/client/AbstractAuthenticationHandler.java \
+  ch/boye/httpclientandroidlib/impl/client/AbstractHttpClient.java \
+  ch/boye/httpclientandroidlib/impl/client/BasicAuthCache.java \
+  ch/boye/httpclientandroidlib/impl/client/BasicCookieStore.java \
+  ch/boye/httpclientandroidlib/impl/client/BasicCredentialsProvider.java \
+  ch/boye/httpclientandroidlib/impl/client/BasicResponseHandler.java \
+  ch/boye/httpclientandroidlib/impl/client/ClientParamsStack.java \
+  ch/boye/httpclientandroidlib/impl/client/ContentEncodingHttpClient.java \
+  ch/boye/httpclientandroidlib/impl/client/DefaultConnectionKeepAliveStrategy.java \
+  ch/boye/httpclientandroidlib/impl/client/DefaultHttpClient.java \
+  ch/boye/httpclientandroidlib/impl/client/DefaultHttpRequestRetryHandler.java \
+  ch/boye/httpclientandroidlib/impl/client/DefaultProxyAuthenticationHandler.java \
+  ch/boye/httpclientandroidlib/impl/client/DefaultRedirectHandler.java \
+  ch/boye/httpclientandroidlib/impl/client/DefaultRedirectStrategy.java \
+  ch/boye/httpclientandroidlib/impl/client/DefaultRedirectStrategyAdaptor.java \
+  ch/boye/httpclientandroidlib/impl/client/DefaultRequestDirector.java \
+  ch/boye/httpclientandroidlib/impl/client/DefaultTargetAuthenticationHandler.java \
+  ch/boye/httpclientandroidlib/impl/client/DefaultUserTokenHandler.java \
+  ch/boye/httpclientandroidlib/impl/client/EntityEnclosingRequestWrapper.java \
+  ch/boye/httpclientandroidlib/impl/client/RedirectLocations.java \
+  ch/boye/httpclientandroidlib/impl/client/RequestWrapper.java \
+  ch/boye/httpclientandroidlib/impl/client/RoutedRequest.java \
+  ch/boye/httpclientandroidlib/impl/client/TunnelRefusedException.java \
+  ch/boye/httpclientandroidlib/impl/conn/AbstractClientConnAdapter.java \
+  ch/boye/httpclientandroidlib/impl/conn/AbstractPooledConnAdapter.java \
+  ch/boye/httpclientandroidlib/impl/conn/AbstractPoolEntry.java \
+  ch/boye/httpclientandroidlib/impl/conn/ConnectionShutdownException.java \
+  ch/boye/httpclientandroidlib/impl/conn/DefaultClientConnection.java \
+  ch/boye/httpclientandroidlib/impl/conn/DefaultClientConnectionOperator.java \
+  ch/boye/httpclientandroidlib/impl/conn/DefaultHttpRoutePlanner.java \
+  ch/boye/httpclientandroidlib/impl/conn/DefaultResponseParser.java \
+  ch/boye/httpclientandroidlib/impl/conn/HttpInetSocketAddress.java \
+  ch/boye/httpclientandroidlib/impl/conn/IdleConnectionHandler.java \
+  ch/boye/httpclientandroidlib/impl/conn/LoggingSessionInputBuffer.java \
+  ch/boye/httpclientandroidlib/impl/conn/LoggingSessionOutputBuffer.java \
+  ch/boye/httpclientandroidlib/impl/conn/ProxySelectorRoutePlanner.java \
+  ch/boye/httpclientandroidlib/impl/conn/SchemeRegistryFactory.java \
+  ch/boye/httpclientandroidlib/impl/conn/SingleClientConnManager.java \
+  ch/boye/httpclientandroidlib/impl/conn/tsccm/AbstractConnPool.java \
+  ch/boye/httpclientandroidlib/impl/conn/tsccm/BasicPooledConnAdapter.java \
+  ch/boye/httpclientandroidlib/impl/conn/tsccm/BasicPoolEntry.java \
+  ch/boye/httpclientandroidlib/impl/conn/tsccm/BasicPoolEntryRef.java \
+  ch/boye/httpclientandroidlib/impl/conn/tsccm/ConnPoolByRoute.java \
+  ch/boye/httpclientandroidlib/impl/conn/tsccm/PoolEntryRequest.java \
+  ch/boye/httpclientandroidlib/impl/conn/tsccm/RefQueueHandler.java \
+  ch/boye/httpclientandroidlib/impl/conn/tsccm/RefQueueWorker.java \
+  ch/boye/httpclientandroidlib/impl/conn/tsccm/RouteSpecificPool.java \
+  ch/boye/httpclientandroidlib/impl/conn/tsccm/ThreadSafeClientConnManager.java \
+  ch/boye/httpclientandroidlib/impl/conn/tsccm/WaitingThread.java \
+  ch/boye/httpclientandroidlib/impl/conn/tsccm/WaitingThreadAborter.java \
+  ch/boye/httpclientandroidlib/impl/conn/Wire.java \
+  ch/boye/httpclientandroidlib/impl/cookie/AbstractCookieAttributeHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/AbstractCookieSpec.java \
+  ch/boye/httpclientandroidlib/impl/cookie/BasicClientCookie.java \
+  ch/boye/httpclientandroidlib/impl/cookie/BasicClientCookie2.java \
+  ch/boye/httpclientandroidlib/impl/cookie/BasicCommentHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/BasicDomainHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/BasicExpiresHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/BasicMaxAgeHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/BasicPathHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/BasicSecureHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/BestMatchSpec.java \
+  ch/boye/httpclientandroidlib/impl/cookie/BestMatchSpecFactory.java \
+  ch/boye/httpclientandroidlib/impl/cookie/BrowserCompatSpec.java \
+  ch/boye/httpclientandroidlib/impl/cookie/BrowserCompatSpecFactory.java \
+  ch/boye/httpclientandroidlib/impl/cookie/CookieSpecBase.java \
+  ch/boye/httpclientandroidlib/impl/cookie/DateParseException.java \
+  ch/boye/httpclientandroidlib/impl/cookie/DateUtils.java \
+  ch/boye/httpclientandroidlib/impl/cookie/IgnoreSpec.java \
+  ch/boye/httpclientandroidlib/impl/cookie/IgnoreSpecFactory.java \
+  ch/boye/httpclientandroidlib/impl/cookie/NetscapeDomainHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/NetscapeDraftHeaderParser.java \
+  ch/boye/httpclientandroidlib/impl/cookie/NetscapeDraftSpec.java \
+  ch/boye/httpclientandroidlib/impl/cookie/NetscapeDraftSpecFactory.java \
+  ch/boye/httpclientandroidlib/impl/cookie/PublicSuffixFilter.java \
+  ch/boye/httpclientandroidlib/impl/cookie/PublicSuffixListParser.java \
+  ch/boye/httpclientandroidlib/impl/cookie/RFC2109DomainHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/RFC2109Spec.java \
+  ch/boye/httpclientandroidlib/impl/cookie/RFC2109SpecFactory.java \
+  ch/boye/httpclientandroidlib/impl/cookie/RFC2109VersionHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/RFC2965CommentUrlAttributeHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/RFC2965DiscardAttributeHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/RFC2965DomainAttributeHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/RFC2965PortAttributeHandler.java \
+  ch/boye/httpclientandroidlib/impl/cookie/RFC2965Spec.java \
+  ch/boye/httpclientandroidlib/impl/cookie/RFC2965SpecFactory.java \
+  ch/boye/httpclientandroidlib/impl/cookie/RFC2965VersionAttributeHandler.java \
+  ch/boye/httpclientandroidlib/impl/DefaultConnectionReuseStrategy.java \
+  ch/boye/httpclientandroidlib/impl/DefaultHttpClientConnection.java \
+  ch/boye/httpclientandroidlib/impl/DefaultHttpRequestFactory.java \
+  ch/boye/httpclientandroidlib/impl/DefaultHttpResponseFactory.java \
+  ch/boye/httpclientandroidlib/impl/DefaultHttpServerConnection.java \
+  ch/boye/httpclientandroidlib/impl/EnglishReasonPhraseCatalog.java \
+  ch/boye/httpclientandroidlib/impl/entity/EntityDeserializer.java \
+  ch/boye/httpclientandroidlib/impl/entity/EntitySerializer.java \
+  ch/boye/httpclientandroidlib/impl/entity/LaxContentLengthStrategy.java \
+  ch/boye/httpclientandroidlib/impl/entity/StrictContentLengthStrategy.java \
+  ch/boye/httpclientandroidlib/impl/HttpConnectionMetricsImpl.java \
+  ch/boye/httpclientandroidlib/impl/io/AbstractMessageParser.java \
+  ch/boye/httpclientandroidlib/impl/io/AbstractMessageWriter.java \
+  ch/boye/httpclientandroidlib/impl/io/AbstractSessionInputBuffer.java \
+  ch/boye/httpclientandroidlib/impl/io/AbstractSessionOutputBuffer.java \
+  ch/boye/httpclientandroidlib/impl/io/ChunkedInputStream.java \
+  ch/boye/httpclientandroidlib/impl/io/ChunkedOutputStream.java \
+  ch/boye/httpclientandroidlib/impl/io/ContentLengthInputStream.java \
+  ch/boye/httpclientandroidlib/impl/io/ContentLengthOutputStream.java \
+  ch/boye/httpclientandroidlib/impl/io/HttpRequestParser.java \
+  ch/boye/httpclientandroidlib/impl/io/HttpRequestWriter.java \
+  ch/boye/httpclientandroidlib/impl/io/HttpResponseParser.java \
+  ch/boye/httpclientandroidlib/impl/io/HttpResponseWriter.java \
+  ch/boye/httpclientandroidlib/impl/io/HttpTransportMetricsImpl.java \
+  ch/boye/httpclientandroidlib/impl/io/IdentityInputStream.java \
+  ch/boye/httpclientandroidlib/impl/io/IdentityOutputStream.java \
+  ch/boye/httpclientandroidlib/impl/io/SocketInputBuffer.java \
+  ch/boye/httpclientandroidlib/impl/io/SocketOutputBuffer.java \
+  ch/boye/httpclientandroidlib/impl/NoConnectionReuseStrategy.java \
+  ch/boye/httpclientandroidlib/impl/SocketHttpClientConnection.java \
+  ch/boye/httpclientandroidlib/impl/SocketHttpServerConnection.java \
+  ch/boye/httpclientandroidlib/io/BufferInfo.java \
+  ch/boye/httpclientandroidlib/io/EofSensor.java \
+  ch/boye/httpclientandroidlib/io/HttpMessageParser.java \
+  ch/boye/httpclientandroidlib/io/HttpMessageWriter.java \
+  ch/boye/httpclientandroidlib/io/HttpTransportMetrics.java \
+  ch/boye/httpclientandroidlib/io/SessionInputBuffer.java \
+  ch/boye/httpclientandroidlib/io/SessionOutputBuffer.java \
+  ch/boye/httpclientandroidlib/MalformedChunkCodingException.java \
+  ch/boye/httpclientandroidlib/message/AbstractHttpMessage.java \
+  ch/boye/httpclientandroidlib/message/BasicHeader.java \
+  ch/boye/httpclientandroidlib/message/BasicHeaderElement.java \
+  ch/boye/httpclientandroidlib/message/BasicHeaderElementIterator.java \
+  ch/boye/httpclientandroidlib/message/BasicHeaderIterator.java \
+  ch/boye/httpclientandroidlib/message/BasicHeaderValueFormatter.java \
+  ch/boye/httpclientandroidlib/message/BasicHeaderValueParser.java \
+  ch/boye/httpclientandroidlib/message/BasicHttpEntityEnclosingRequest.java \
+  ch/boye/httpclientandroidlib/message/BasicHttpRequest.java \
+  ch/boye/httpclientandroidlib/message/BasicHttpResponse.java \
+  ch/boye/httpclientandroidlib/message/BasicLineFormatter.java \
+  ch/boye/httpclientandroidlib/message/BasicLineParser.java \
+  ch/boye/httpclientandroidlib/message/BasicListHeaderIterator.java \
+  ch/boye/httpclientandroidlib/message/BasicNameValuePair.java \
+  ch/boye/httpclientandroidlib/message/BasicRequestLine.java \
+  ch/boye/httpclientandroidlib/message/BasicStatusLine.java \
+  ch/boye/httpclientandroidlib/message/BasicTokenIterator.java \
+  ch/boye/httpclientandroidlib/message/BufferedHeader.java \
+  ch/boye/httpclientandroidlib/message/HeaderGroup.java \
+  ch/boye/httpclientandroidlib/message/HeaderValueFormatter.java \
+  ch/boye/httpclientandroidlib/message/HeaderValueParser.java \
+  ch/boye/httpclientandroidlib/message/LineFormatter.java \
+  ch/boye/httpclientandroidlib/message/LineParser.java \
+  ch/boye/httpclientandroidlib/message/ParserCursor.java \
+  ch/boye/httpclientandroidlib/MethodNotSupportedException.java \
+  ch/boye/httpclientandroidlib/NameValuePair.java \
+  ch/boye/httpclientandroidlib/NoHttpResponseException.java \
+  ch/boye/httpclientandroidlib/params/AbstractHttpParams.java \
+  ch/boye/httpclientandroidlib/params/BasicHttpParams.java \
+  ch/boye/httpclientandroidlib/params/CoreConnectionPNames.java \
+  ch/boye/httpclientandroidlib/params/CoreProtocolPNames.java \
+  ch/boye/httpclientandroidlib/params/DefaultedHttpParams.java \
+  ch/boye/httpclientandroidlib/params/HttpAbstractParamBean.java \
+  ch/boye/httpclientandroidlib/params/HttpConnectionParamBean.java \
+  ch/boye/httpclientandroidlib/params/HttpConnectionParams.java \
+  ch/boye/httpclientandroidlib/params/HttpParams.java \
+  ch/boye/httpclientandroidlib/params/HttpProtocolParamBean.java \
+  ch/boye/httpclientandroidlib/params/HttpProtocolParams.java \
+  ch/boye/httpclientandroidlib/params/SyncBasicHttpParams.java \
+  ch/boye/httpclientandroidlib/ParseException.java \
+  ch/boye/httpclientandroidlib/protocol/BasicHttpContext.java \
+  ch/boye/httpclientandroidlib/protocol/BasicHttpProcessor.java \
+  ch/boye/httpclientandroidlib/protocol/DefaultedHttpContext.java \
+  ch/boye/httpclientandroidlib/protocol/ExecutionContext.java \
+  ch/boye/httpclientandroidlib/protocol/HTTP.java \
+  ch/boye/httpclientandroidlib/protocol/HttpContext.java \
+  ch/boye/httpclientandroidlib/protocol/HttpDateGenerator.java \
+  ch/boye/httpclientandroidlib/protocol/HttpExpectationVerifier.java \
+  ch/boye/httpclientandroidlib/protocol/HttpProcessor.java \
+  ch/boye/httpclientandroidlib/protocol/HttpRequestExecutor.java \
+  ch/boye/httpclientandroidlib/protocol/HttpRequestHandler.java \
+  ch/boye/httpclientandroidlib/protocol/HttpRequestHandlerRegistry.java \
+  ch/boye/httpclientandroidlib/protocol/HttpRequestHandlerResolver.java \
+  ch/boye/httpclientandroidlib/protocol/HttpRequestInterceptorList.java \
+  ch/boye/httpclientandroidlib/protocol/HttpResponseInterceptorList.java \
+  ch/boye/httpclientandroidlib/protocol/HttpService.java \
+  ch/boye/httpclientandroidlib/protocol/ImmutableHttpProcessor.java \
+  ch/boye/httpclientandroidlib/protocol/RequestConnControl.java \
+  ch/boye/httpclientandroidlib/protocol/RequestContent.java \
+  ch/boye/httpclientandroidlib/protocol/RequestDate.java \
+  ch/boye/httpclientandroidlib/protocol/RequestExpectContinue.java \
+  ch/boye/httpclientandroidlib/protocol/RequestTargetHost.java \
+  ch/boye/httpclientandroidlib/protocol/RequestUserAgent.java \
+  ch/boye/httpclientandroidlib/protocol/ResponseConnControl.java \
+  ch/boye/httpclientandroidlib/protocol/ResponseContent.java \
+  ch/boye/httpclientandroidlib/protocol/ResponseDate.java \
+  ch/boye/httpclientandroidlib/protocol/ResponseServer.java \
+  ch/boye/httpclientandroidlib/protocol/SyncBasicHttpContext.java \
+  ch/boye/httpclientandroidlib/protocol/UriPatternMatcher.java \
+  ch/boye/httpclientandroidlib/ProtocolException.java \
+  ch/boye/httpclientandroidlib/ProtocolVersion.java \
+  ch/boye/httpclientandroidlib/ReasonPhraseCatalog.java \
+  ch/boye/httpclientandroidlib/RequestLine.java \
+  ch/boye/httpclientandroidlib/StatusLine.java \
+  ch/boye/httpclientandroidlib/TokenIterator.java \
+  ch/boye/httpclientandroidlib/TruncatedChunkException.java \
+  ch/boye/httpclientandroidlib/UnsupportedHttpVersionException.java \
+  ch/boye/httpclientandroidlib/util/ByteArrayBuffer.java \
+  ch/boye/httpclientandroidlib/util/CharArrayBuffer.java \
+  ch/boye/httpclientandroidlib/util/EncodingUtils.java \
+  ch/boye/httpclientandroidlib/util/EntityUtils.java \
+  ch/boye/httpclientandroidlib/util/ExceptionUtils.java \
+  ch/boye/httpclientandroidlib/util/LangUtils.java \
+  ch/boye/httpclientandroidlib/util/VersionInfo.java \
+  org/json/simple/ItemList.java \
+  org/json/simple/JSONArray.java \
+  org/json/simple/JSONAware.java \
+  org/json/simple/JSONObject.java \
+  org/json/simple/JSONStreamAware.java \
+  org/json/simple/JSONValue.java \
+  org/json/simple/parser/ContainerFactory.java \
+  org/json/simple/parser/ContentHandler.java \
+  org/json/simple/parser/JSONParser.java \
+  org/json/simple/parser/ParseException.java \
+  org/json/simple/parser/Yylex.java \
+  org/json/simple/parser/Yytoken.java \
+  org/mozilla/apache/commons/codec/binary/Base32.java \
+  org/mozilla/apache/commons/codec/binary/Base32InputStream.java \
+  org/mozilla/apache/commons/codec/binary/Base32OutputStream.java \
+  org/mozilla/apache/commons/codec/binary/Base64.java \
+  org/mozilla/apache/commons/codec/binary/Base64InputStream.java \
+  org/mozilla/apache/commons/codec/binary/Base64OutputStream.java \
+  org/mozilla/apache/commons/codec/binary/BaseNCodec.java \
+  org/mozilla/apache/commons/codec/binary/BaseNCodecInputStream.java \
+  org/mozilla/apache/commons/codec/binary/BaseNCodecOutputStream.java \
+  org/mozilla/apache/commons/codec/binary/BinaryCodec.java \
+  org/mozilla/apache/commons/codec/binary/Hex.java \
+  org/mozilla/apache/commons/codec/binary/StringUtils.java \
+  org/mozilla/apache/commons/codec/BinaryDecoder.java \
+  org/mozilla/apache/commons/codec/BinaryEncoder.java \
+  org/mozilla/apache/commons/codec/CharEncoding.java \
+  org/mozilla/apache/commons/codec/Decoder.java \
+  org/mozilla/apache/commons/codec/DecoderException.java \
+  org/mozilla/apache/commons/codec/digest/DigestUtils.java \
+  org/mozilla/apache/commons/codec/Encoder.java \
+  org/mozilla/apache/commons/codec/EncoderException.java \
+  org/mozilla/apache/commons/codec/language/AbstractCaverphone.java \
+  org/mozilla/apache/commons/codec/language/Caverphone.java \
+  org/mozilla/apache/commons/codec/language/Caverphone1.java \
+  org/mozilla/apache/commons/codec/language/Caverphone2.java \
+  org/mozilla/apache/commons/codec/language/ColognePhonetic.java \
+  org/mozilla/apache/commons/codec/language/DoubleMetaphone.java \
+  org/mozilla/apache/commons/codec/language/Metaphone.java \
+  org/mozilla/apache/commons/codec/language/RefinedSoundex.java \
+  org/mozilla/apache/commons/codec/language/Soundex.java \
+  org/mozilla/apache/commons/codec/language/SoundexUtils.java \
+  org/mozilla/apache/commons/codec/net/BCodec.java \
+  org/mozilla/apache/commons/codec/net/QCodec.java \
+  org/mozilla/apache/commons/codec/net/QuotedPrintableCodec.java \
+  org/mozilla/apache/commons/codec/net/RFC1522Codec.java \
+  org/mozilla/apache/commons/codec/net/URLCodec.java \
+  org/mozilla/apache/commons/codec/net/Utils.java \
+  org/mozilla/apache/commons/codec/StringDecoder.java \
+  org/mozilla/apache/commons/codec/StringEncoder.java \
+  org/mozilla/apache/commons/codec/StringEncoderComparator.java \
   $(NULL)
 
--- a/mobile/android/base/home/MostRecentPage.java
+++ b/mobile/android/base/home/MostRecentPage.java
@@ -231,18 +231,18 @@ public class MostRecentPage extends Home
         @Override
         public int getCount() {
             // Add the history section headers to the number of reported results.
             return super.getCount() + mMostRecentSections.size();
         }
 
         @Override
         public Cursor swapCursor(Cursor cursor) {
+            loadMostRecentSections(cursor);
             Cursor oldCursor = super.swapCursor(cursor);
-            loadMostRecentSections(cursor);
             return oldCursor;
         }
 
         @Override
         public void bindView(View view, Context context, int position) {
             final int type = getItemViewType(position);
 
             if (type == ROW_HEADER) {
@@ -304,23 +304,23 @@ public class MostRecentPage extends Home
             if (delta < MS_PER_WEEK) {
                 return MostRecentSection.WEEK;
             }
 
             return MostRecentSection.OLDER;
         }
 
         private void loadMostRecentSections(Cursor c) {
+            // Clear any history sections that may have been loaded before.
+            mMostRecentSections.clear();
+
             if (c == null || !c.moveToFirst()) {
                 return;
             }
 
-            // Clear any history sections that may have been loaded before.
-            mMostRecentSections.clear();
-
             final Date now = new Date();
             now.setHours(0);
             now.setMinutes(0);
             now.setSeconds(0);
 
             final long today = now.getTime();
             MostRecentSection section = null;
 
@@ -353,10 +353,10 @@ public class MostRecentPage extends Home
             mAdapter.swapCursor(c);
             updateUiFromCursor(c);
         }
 
         @Override
         public void onLoaderReset(Loader<Cursor> loader) {
             mAdapter.swapCursor(null);
         }
-   }
+    }
 }
index e591a7b009ad931342bf25593aa270489ce00436..378bb004a9511a15660813075a7ad59129418e56
GIT binary patch
literal 246
zc%17D@N?(olHy`uVBq!ia0vp^;vmey1|%P7U0DF67>k44ofy`glX(f`uqAoByD)&k
zPv_nBK#H@#BeIx*fx8og8O=|gUJDdtFY)wsWxvZMC@jU)pu~LzC{*U@;uzv_Jo(4}
z|MtuiAJ_}2t@-i4p3SYq@$p)J$rG&UdzS|O=(%DbGF{b&$AqQlN}1`V*O{-1W=WlM
za=160!`SSxSFf{q#Eg!!h0T|qnwZWhG>Pyy>oQwYb9-Cf2A+?nn$k*N{Qv)7QbJPl
h<JBK3)&gO_nHd_Hl`g$9zXb9jgQu&X%Q~loCIC_mRMh|g
deleted file mode 100644
index e591a7b009ad931342bf25593aa270489ce00436..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
index 7dfea4c00546a18eeb6eeccd12d751247caa65c5..371bf10474fa079de14e10e2eeac05cd6ba94891
GIT binary patch
literal 229
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^PXN
zr}OT5AjMhW5n0T@z}*SLjOHg#uLTOSmw5WRvft$r6y>s>nDN#gD3t2y;uvCaI{C-{
z|MtvsALP3>djI=>{s6~giTv7A4qO(mb<Z9+aDc(EA>{0dHUq-|4h^#g*7hCxd>_xg
zc<3Rj|406UK|+)3(*@nFXI);U%lv3@sZ9F?GE7-nd0S4;b*G3jHiqnU>Ej-0N@XAi
Ndb;|#taD0e0su=sO)&rf
index f01a79e3bf44ced72d89e813da41d336d5d0a2ce..a1078b1bd812d2aef337ec4e86feee76dbaf4388
GIT binary patch
literal 261
zc%17D@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3jKx9jP7LeL$-D$|*pj^6T^PXN
zr}OT5AjMhW5n0T@z}*SLjOHg#uLTOSmw5WRvft$r6lLR<W|=e}DAeld;uzv_Jo(4}
z|Mtw15A3DXd_VvH&(m{5rDwZc>H;;3*Sfum$2`2bKUy|SjGMM7`rHu%hlYvs_PKuh
z+VHdDN#q%)C06l5XYcx~;F0W2-WBzy-eg7l-lIK>9c`n+gaf}#y2B^YoBV6rPPaJi
yVh8CjCGQXY`Tu`@<HU&xg@5NynsDS=CNsm5Ce6EF3pawi$KdJe=d#Wzp$PykHel=k
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -48,26 +48,28 @@ XPCOMUtils.defineLazyModuleGetter(this, 
                                   "resource://gre/modules/PrivateBrowsingUtils.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "Sanitizer",
                                   "resource://gre/modules/Sanitizer.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "Prompt",
                                   "resource://gre/modules/Prompt.jsm");
 
+XPCOMUtils.defineLazyModuleGetter(this, "HelperApps",
+                                  "resource://gre/modules/HelperApps.jsm");
+
 XPCOMUtils.defineLazyModuleGetter(this, "FormHistory",
                                   "resource://gre/modules/FormHistory.jsm");
 
 XPCOMUtils.defineLazyServiceGetter(this, "uuidgen",
                                    "@mozilla.org/uuid-generator;1",
                                    "nsIUUIDGenerator");
 
 // Lazily-loaded browser scripts:
 [
-  ["HelperApps", "chrome://browser/content/HelperApps.js"],
   ["SelectHelper", "chrome://browser/content/SelectHelper.js"],
   ["InputWidgetHelper", "chrome://browser/content/InputWidgetHelper.js"],
   ["AboutReader", "chrome://browser/content/aboutReader.js"],
   ["WebAppRT", "chrome://browser/content/WebAppRT.js"],
   ["MasterPassword", "chrome://browser/content/MasterPassword.js"],
   ["PluginHelper", "chrome://browser/content/PluginHelper.js"],
   ["OfflineApps", "chrome://browser/content/OfflineApps.js"],
   ["Linkifier", "chrome://browser/content/Linkify.js"],
@@ -2868,17 +2870,17 @@ Tab.prototype = {
     if (!this.browser || !this.browser.docShell)
       return;
 
     if (aActive) {
       this.browser.setAttribute("type", "content-primary");
       this.browser.focus();
       this.browser.docShellIsActive = true;
       Reader.updatePageAction(this);
-      HelperApps.updatePageAction(this.browser.currentURI);
+      ExternalApps.updatePageAction(this.browser.currentURI);
     } else {
       this.browser.setAttribute("type", "content-targetable");
       this.browser.docShellIsActive = false;
     }
   },
 
   getActive: function getActive() {
     return this.browser.docShellIsActive;
@@ -3577,17 +3579,18 @@ Tab.prototype = {
 
         if (!aEvent.persisted && Services.prefs.getBoolPref("browser.ui.linkify.phone")) {
           if (!this._linkifier)
             this._linkifier = new Linkifier();
           this._linkifier.linkifyNumbers(this.browser.contentWindow.document);
         }
 
         // Show page actions for helper apps.
-        HelperApps.updatePageAction(this.browser.currentURI);
+        if (BrowserApp.selectedTab == this)
+          ExternalApps.updatePageAction(this.browser.currentURI);
 
         if (!Reader.isEnabledForParseOnLoad)
           return;
 
         // Once document is fully loaded, parse it
         Reader.parseDocumentFromTab(this.id, function (article) {
           // Do nothing if there's no article or the page in this tab has
           // changed
@@ -7749,17 +7752,70 @@ var ExternalApps = {
       }
       return apps.length > 0;
     }
   },
 
   openExternal: function(aElement) {
     let uri = ExternalApps._getMediaLink(aElement);
     HelperApps.openUriInApp(uri);
-  }
+  },
+
+  updatePageAction: function updatePageAction(uri) {
+    let apps = HelperApps.getAppsForUri(uri);
+
+    if (apps.length > 0)
+      this._setUriForPageAction(uri, apps);
+    else
+      this._removePageAction();
+  },
+
+  _setUriForPageAction: function setUriForPageAction(uri, apps) {
+    this._pageActionUri = uri;
+
+    // If the pageaction is already added, simply update the URI to be launched when 'onclick' is triggered.
+    if (this._pageActionId != undefined)
+      return;
+
+    this._pageActionId = NativeWindow.pageactions.add({
+      title: Strings.browser.GetStringFromName("openInApp.pageAction"),
+      icon: "drawable://icon_openinapp",
+      clickCallback: (function() {
+        let callback = function(app) {
+          app.launch(uri);
+        }
+
+        if (apps.length > 1) {
+          // Use the HelperApps prompt here to filter out any Http handlers
+          HelperApps.prompt(apps, {
+            title: Strings.browser.GetStringFromName("openInApp.pageAction"),
+            buttons: [
+              Strings.browser.GetStringFromName("openInApp.ok"),
+              Strings.browser.GetStringFromName("openInApp.cancel")
+            ]
+          }, function(result) {
+            if (result.button != 0)
+              return;
+
+            callback(apps[result.icongrid0]);
+          });
+        } else {
+          callback(apps[0]);
+        }
+      }).bind(this)
+    });
+  },
+
+  _removePageAction: function removePageAction() {
+    if(!this._pageActionId)
+      return;
+
+    NativeWindow.pageactions.remove(this._pageActionId);
+    delete this._pageActionId;
+  },
 };
 
 var Distribution = {
   // File used to store campaign data
   _file: null,
 
   init: function dc_init() {
     Services.obs.addObserver(this, "Distribution:Set", false);
--- a/mobile/android/chrome/jar.mn
+++ b/mobile/android/chrome/jar.mn
@@ -31,17 +31,16 @@ chrome.jar:
 * content/browser.js                   (content/browser.js)
   content/bindings/checkbox.xml        (content/bindings/checkbox.xml)
   content/bindings/settings.xml        (content/bindings/settings.xml)
   content/exceptions.js                (content/exceptions.js)
   content/downloads.js                 (content/downloads.js)
   content/netError.xhtml               (content/netError.xhtml)
   content/SelectHelper.js              (content/SelectHelper.js)
   content/SelectionHandler.js          (content/SelectionHandler.js)
-  content/HelperApps.js                (content/HelperApps.js)
   content/dbg-browser-actors.js        (content/dbg-browser-actors.js)
   content/WebAppRT.js                  (content/WebAppRT.js)
   content/InputWidgetHelper.js         (content/InputWidgetHelper.js)
   content/WebrtcUI.js                  (content/WebrtcUI.js)
   content/MemoryObserver.js            (content/MemoryObserver.js)
   content/ConsoleAPI.js                (content/ConsoleAPI.js)
   content/PluginHelper.js              (content/PluginHelper.js)
   content/OfflineApps.js               (content/OfflineApps.js)
--- a/mobile/android/components/HelperAppDialog.js
+++ b/mobile/android/components/HelperAppDialog.js
@@ -1,37 +1,70 @@
+// -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*-
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-const Cu = Components.utils;
-const Cr = Components.results;
+const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
 
 const PREF_BD_USEDOWNLOADDIR = "browser.download.useDownloadDir";
 const URI_GENERIC_ICON_DOWNLOAD = "drawable://alert_download";
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/Prompt.jsm");
+Cu.import("resource://gre/modules/HelperApps.jsm");
 
 // -----------------------------------------------------------------------
 // HelperApp Launcher Dialog
 // -----------------------------------------------------------------------
 
 function HelperAppLauncherDialog() { }
 
 HelperAppLauncherDialog.prototype = {
   classID: Components.ID("{e9d277a0-268a-4ec2-bb8c-10fdf3e44611}"),
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIHelperAppLauncherDialog]),
 
   show: function hald_show(aLauncher, aContext, aReason) {
-    // Save everything by default
-    aLauncher.MIMEInfo.preferredAction = Ci.nsIMIMEInfo.useSystemDefault;
-    aLauncher.saveToDisk(null, false);
+    let bundle = Services.strings.createBundle("chrome://browser/locale/browser.properties");
+
+    let defaultHandler = new Object();
+    let apps = HelperApps.getAppsForUri(aLauncher.source, {
+      mimeType: aLauncher.MIMEInfo.MIMEType,
+    });
+
+    // Add a fake intent for save to disk at the top of the list
+    apps.unshift({
+      name: bundle.GetStringFromName("helperapps.saveToDisk"),
+      iconUri: "drawable://icon",
+      launch: function() {
+        // Reset the preferredAction here
+        aLauncher.MIMEInfo.preferredAction = Ci.nsIMIMEInfo.saveToDisk;
+        aLauncher.saveToDisk(null, false);
+        return true;
+      }
+    });
+
+    let app = apps[0];
+    if (apps.length > 1) {
+      app = HelperApps.prompt(apps, {
+        title: bundle.GetStringFromName("helperapps.pick")
+      });
+    }
+
+    if (app) {
+      aLauncher.MIMEInfo.preferredAction = Ci.nsIMIMEInfo.useHelperApp;
+      if (!app.launch(aLauncher.source)) {
+        aLauncher.cancel();
+      }
+    } else {
+      // Something weird happened. Log an error
+      Services.console.logStringMessage("Unexpected selection from grid: " + app);
+    }
+
   },
 
   promptForSaveToFile: function hald_promptForSaveToFile(aLauncher, aContext, aDefaultFile, aSuggestedFileExt, aForcePrompt) {
     // Retrieve the user's default download directory
     let dnldMgr = Cc["@mozilla.org/download-manager;1"].getService(Ci.nsIDownloadManager);
     let defaultFolder = dnldMgr.userDownloadsDirectory;
 
     try {
@@ -58,17 +91,17 @@ HelperAppLauncherDialog.prototype = {
   },
 
   makeFileUnique: function hald_makeFileUnique(aLocalFile) {
     try {
       // Note - this code is identical to that in
       //   toolkit/content/contentAreaUtils.js.
       // If you are updating this code, update that code too! We can't share code
       // here since this is called in a js component.
-      var collisionCount = 0;
+      let collisionCount = 0;
       while (aLocalFile.exists()) {
         collisionCount++;
         if (collisionCount == 1) {
           // Append "(2)" before the last dot in (or at the end of) the filename
           // special case .ext.gz etc files so we don't wind up with .tar(2).gz
           if (aLocalFile.leafName.match(/\.[^\.]{1,3}\.(gz|bz2|Z)$/i))
             aLocalFile.leafName = aLocalFile.leafName.replace(/\.[^\.]{1,3}\.(gz|bz2|Z)$/i, "(2)$&");
           else
--- a/mobile/android/locales/en-US/chrome/browser.properties
+++ b/mobile/android/locales/en-US/chrome/browser.properties
@@ -258,16 +258,18 @@ remoteIncomingPromptCancel=Cancel
 # Helper apps
 helperapps.open=Open
 helperapps.ignore=Ignore
 helperapps.dontAskAgain=Don't ask again for this site
 helperapps.openWithApp2=Open With %S App
 helperapps.openWithList2=Open With an App
 helperapps.always=Always
 helperapps.never=Never
+helperapps.pick=Complete action using
+helperapps.saveToDisk=Download
 
 #Lightweight themes
 # LOCALIZATION NOTE (lwthemeInstallRequest.message): %S will be replaced with
 # the host name of the site.
 lwthemeInstallRequest.message=This site (%S) attempted to install a theme.
 lwthemeInstallRequest.allowButton=Allow
 
 # LOCALIZATION NOTE (getUserMedia.shareCamera.message, getUserMedia.shareMicrophone.message, getUserMedia.shareCameraAndMicrophone.message, getUserMedia.sharingCamera.message, getUserMedia.sharingMicrophone.message, getUserMedia.sharingCameraAndMicrophone.message): %S is the website origin (e.g. www.mozilla.org)
@@ -289,8 +291,11 @@ getUserMedia.sharingMicrophone.message2 
 getUserMedia.sharingCameraAndMicrophone.message2 = Camera and microphone are on
 
 #Reader mode
 readerMode.enter = Enter Reader Mode
 readerMode.exit = Exit Reader Mode
 
 #Open in App
 openInApp.pageAction = Open in App
+openInApp.ok = OK
+openInApp.cancel = Cancel
+
rename from mobile/android/chrome/content/HelperApps.js
rename to mobile/android/modules/HelperApps.jsm
--- a/mobile/android/chrome/content/HelperApps.js
+++ b/mobile/android/modules/HelperApps.jsm
@@ -1,196 +1,139 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
+const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
+
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/Prompt.jsm");
+
 XPCOMUtils.defineLazyGetter(this, "ContentAreaUtils", function() {
   let ContentAreaUtils = {};
   Services.scriptloader.loadSubScript("chrome://global/content/contentAreaUtils.js", ContentAreaUtils);
   return ContentAreaUtils;
 });
 
-function getBridge() {
-  return Cc["@mozilla.org/android/bridge;1"].getService(Ci.nsIAndroidBridge);
+this.EXPORTED_SYMBOLS = ["App","HelperApps"];
+
+function App(data) {
+  this.name = data.name;
+  this.isDefault = data.isDefault;
+  this.packageName = data.packageName;
+  this.activityName = data.activityName;
+  this.iconUri = "-moz-icon://" + data.packageName;
 }
 
-function sendMessageToJava(aMessage) {
-  return getBridge().handleGeckoMessage(JSON.stringify(aMessage));
+App.prototype = {
+  launch: function(uri) {
+    HelperApps._launchApp(this, uri);
+    return false;
+  }
 }
 
 var HelperApps =  {
   get defaultHttpHandlers() {
-    let protoHandlers = this.getAppsForProtocol("http");
-
-    var results = {};
-    for (var i = 0; i < protoHandlers.length; i++) {
-      try {
-        let protoApp = protoHandlers.queryElementAt(i, Ci.nsIHandlerApp);
-        results[protoApp.name] = protoApp;
-      } catch(e) {}
-    }
-
     delete this.defaultHttpHandlers;
-    return this.defaultHttpHandlers = results;
+    return this.defaultHttpHandlers = this.getAppsForProtocol("http");
   },
 
   get protoSvc() {
     delete this.protoSvc;
     return this.protoSvc = Cc["@mozilla.org/uriloader/external-protocol-service;1"].getService(Ci.nsIExternalProtocolService);
   },
 
   get urlHandlerService() {
     delete this.urlHandlerService;
     return this.urlHandlerService = Cc["@mozilla.org/uriloader/external-url-handler-service;1"].getService(Ci.nsIExternalURLHandlerService);
   },
 
-  getAppsForProtocol: function getAppsForProtocol(uri) {
-    let handlerInfoProto = this.protoSvc.getProtocolHandlerInfoFromOS(uri, {});
-    return handlerInfoProto.possibleApplicationHandlers;
-  },
-
-  getAppsForUri: function getAppsFor(uri) {
-    let found = [];
-    let mimeType = ContentAreaUtils.getMIMETypeForURI(uri) || "";
-    // empty action string defaults to android.intent.action.VIEW
-    let msg = {
-      type: "Intent:GetHandlers",
-      mime: mimeType,
-      action: "",
-      url: uri.spec,
-      packageName: "",
-      className: ""
-    };
-    let data = sendMessageToJava(msg);
-    if (!data)
-      return found;
-
-    let apps = this._parseApps(JSON.parse(data));
-    for (let i = 0; i < apps.length; i++) {
-      let appName = apps[i].name;
-      if (appName.length > 0 && !this.defaultHttpHandlers[appName])
-        found.push(apps[i]);
-    }
-    return found;
-  },
-
-  updatePageAction: function setPageAction(uri) {
-    let apps = this.getAppsForUri(uri);
-    if (apps.length > 0)
-      this._setPageActionFor(uri, apps);
-    else
-      this._removePageAction();
+  prompt: function showPicker(apps, promptOptions, callback) {
+    let p = new Prompt(promptOptions).addIconGrid({ items: apps });
+    p.show(callback);
   },
 
-  _setPageActionFor: function setPageActionFor(uri, apps) {
-    this._pageActionUri = uri;
-
-    // If the pageaction is already added, simply update the URI to be launched when 'onclick' is triggered.
-    if (this._pageActionId != undefined)
-      return;
+  getAppsForProtocol: function getAppsForProtocol(scheme) {
+    let protoHandlers = this.protoSvc.getProtocolHandlerInfoFromOS(scheme, {}).possibleApplicationHandlers;
 
-    this._pageActionId = NativeWindow.pageactions.add({
-      title: Strings.browser.GetStringFromName("openInApp.pageAction"),
-      icon: "drawable://icon_openinapp",
-      clickCallback: function() {
-        if (apps.length == 1)
-          this._launchApp(apps[0], this._pageActionUri);
-        else
-          this.openUriInApp(this._pageActionUri);
-      }.bind(this)
-    });
-  },
+    let results = {};
+    for (let i = 0; i < protoHandlers.length; i++) {
+      try {
+        let protoApp = protoHandlers.queryElementAt(i, Ci.nsIHandlerApp);
+        results[protoApp.name] = new App({
+          name: protoApp.name,
+          description: protoApp.detailedDescription,
+        });
+      } catch(e) {}
+    }
 
-  _removePageAction: function removePageAction() {
-    if(!this._pageActionId)
-      return;
-
-    NativeWindow.pageactions.remove(this._pageActionId);
-    delete this._pageActionId;
+    return results;
   },
 
-  _launchApp: function launchApp(appData, uri) {
-    let mimeType = ContentAreaUtils.getMIMETypeForURI(uri) || "";
-    let msg = {
-      type: "Intent:Open",
-      mime: mimeType,
-      action: "android.intent.action.VIEW",
-      url: uri.spec,
-      packageName: appData.packageName,
-      className: appData.activityName
-    };
-    sendMessageToJava(msg);
-  },
+  getAppsForUri: function getAppsForUri(uri, flags = { filterHttp: true }) {
+    flags.filterHttp = "filterHttp" in flags ? flags.filterHttp : true;
+
+    // Query for apps that can/can't handle the mimetype
+    let msg = this._getMessage("Intent:GetHandlers", uri, flags);
+    let apps = this._parseApps(this._sendMessage(msg).apps);
 
-  openUriInApp: function openUriInApp(uri) {
-    let mimeType = ContentAreaUtils.getMIMETypeForURI(uri) || "";
-    let msg = {
-      type: "Intent:Open",
-      mime: mimeType,
-      action: "",
-      url: uri.spec,
-      packageName: "",
-      className: ""
-    };
-    sendMessageToJava(msg);
-  },
+    if (flags.filterHttp) {
+      apps = apps.filter(function(app) {
+        return app.name && !this.defaultHttpHandlers[app.name];
+      }, this);
+    }
 
-  _parseApps: function _parseApps(aJSON) {
-    // aJSON -> {apps: [app1Label, app1Default, app1PackageName, app1ActivityName, app2Label, app2Defaut, ...]}
-    // see GeckoAppShell.java getHandlersForIntent function for details
-    let appInfo = aJSON.apps;
-    const numAttr = 4; // 4 elements per ResolveInfo: label, default, package name, activity name.
-    let apps = [];
-    for (let i = 0; i < appInfo.length; i += numAttr) {
-      apps.push({"name" : appInfo[i],
-                 "isDefault" : appInfo[i+1],
-                 "packageName" : appInfo[i+2],
-                 "activityName" : appInfo[i+3]});
-    }
     return apps;
   },
 
-  showDoorhanger: function showDoorhanger(aUri, aCallback) {
-    let permValue = Services.perms.testPermission(aUri, "native-intent");
-    if (permValue != Services.perms.UNKNOWN_ACTION) {
-      if (permValue == Services.perms.ALLOW_ACTION) {
-        if (aCallback)
-          aCallback(aUri);
-        else
-          this.openUriInApp(aUri);
-      } else if (permValue == Services.perms.DENY_ACTION) {
-        // do nothing
-      }
-      return;
+  launchUri: function launchUri(uri) {
+    let msg = this._getMessage("Intent:Open", uri);
+    this._sendMessage(msg);
+  },
+
+  _parseApps: function _parseApps(appInfo) {
+    // appInfo -> {apps: [app1Label, app1Default, app1PackageName, app1ActivityName, app2Label, app2Defaut, ...]}
+    // see GeckoAppShell.java getHandlersForIntent function for details
+    const numAttr = 4; // 4 elements per ResolveInfo: label, default, package name, activity name.
+
+    let apps = [];
+    for (let i = 0; i < appInfo.length; i += numAttr) {
+      apps.push(new App({"name" : appInfo[i],
+                 "isDefault" : appInfo[i+1],
+                 "packageName" : appInfo[i+2],
+                 "activityName" : appInfo[i+3]}));
     }
 
-    let apps = this.getAppsForUri(aUri);
-    let strings = Strings.browser;
-
-    let message = "";
-    if (apps.length == 1)
-      message = strings.formatStringFromName("helperapps.openWithApp2", [apps[0].name], 1);
-    else
-      message = strings.GetStringFromName("helperapps.openWithList2");
+    return apps;
+  },
 
-    let buttons = [{
-      label: strings.GetStringFromName("helperapps.open"),
-      callback: function(aChecked) {
-        if (aChecked)
-          Services.perms.add(aUri, "native-intent", Ci.nsIPermissionManager.ALLOW_ACTION);
-        if (aCallback)
-          aCallback(aUri);
-        else
-          this.openUriInApp(aUri);
-      }
-    }, {
-      label: strings.GetStringFromName("helperapps.ignore"),
-      callback: function(aChecked) {
-        if (aChecked)
-          Services.perms.add(aUri, "native-intent", Ci.nsIPermissionManager.DENY_ACTION);
-      }
-    }];
+  _getMessage: function(type, uri, options = {}) {
+    let mimeType = options.mimeType;
+    if (uri && mimeType == undefined)
+      mimeType = ContentAreaUtils.getMIMETypeForURI(uri) || "";
+      
+    return {
+      type: type,
+      mime: mimeType,
+      action: options.action || "", // empty action string defaults to android.intent.action.VIEW
+      url: uri ? uri.spec : "",
+      packageName: options.packageName || "",
+      className: options.className || ""
+    };
+  },
 
-    let options = { checkbox: Strings.browser.GetStringFromName("helperapps.dontAskAgain") };
-    NativeWindow.doorhanger.show(message, "helperapps-open", buttons, BrowserApp.selectedTab.id, options);
-  }
+  _launchApp: function launchApp(app, uri) {
+    let msg = this._getMessage("Intent:Open", uri, {
+      packageName: app.packageName,
+      className: app.activityName
+    });
+
+    this._sendMessage(msg);
+  },
+
+  _sendMessage: function(msg) {
+    Services.console.logStringMessage("Sending: " + JSON.stringify(msg));
+    let res = Services.androidBridge.handleGeckoMessage(JSON.stringify(msg));
+    return JSON.parse(res);
+  },
 };
--- a/mobile/android/modules/moz.build
+++ b/mobile/android/modules/moz.build
@@ -1,16 +1,17 @@
 # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 EXTRA_JS_MODULES += [
     'ContactService.jsm',
+    'HelperApps.jsm',
     'Home.jsm',
     'JNI.jsm',
     'LightweightThemeConsumer.jsm',
     'OrderedBroadcast.jsm',
     'Prompt.jsm',
     'Sanitizer.jsm',
     'SharedPreferences.jsm',
 ]
--- a/mobile/android/services/java-third-party-sources.mn
+++ b/mobile/android/services/java-third-party-sources.mn
@@ -1,464 +1,464 @@
-httpclientandroidlib/androidextra/HttpClientAndroidLog.java
-httpclientandroidlib/annotation/GuardedBy.java
-httpclientandroidlib/annotation/Immutable.java
-httpclientandroidlib/annotation/NotThreadSafe.java
-httpclientandroidlib/annotation/ThreadSafe.java
-httpclientandroidlib/auth/AUTH.java
-httpclientandroidlib/auth/AuthenticationException.java
-httpclientandroidlib/auth/AuthScheme.java
-httpclientandroidlib/auth/AuthSchemeFactory.java
-httpclientandroidlib/auth/AuthSchemeRegistry.java
-httpclientandroidlib/auth/AuthScope.java
-httpclientandroidlib/auth/AuthState.java
-httpclientandroidlib/auth/BasicUserPrincipal.java
-httpclientandroidlib/auth/ContextAwareAuthScheme.java
-httpclientandroidlib/auth/Credentials.java
-httpclientandroidlib/auth/InvalidCredentialsException.java
-httpclientandroidlib/auth/MalformedChallengeException.java
-httpclientandroidlib/auth/NTCredentials.java
-httpclientandroidlib/auth/NTUserPrincipal.java
-httpclientandroidlib/auth/params/AuthParamBean.java
-httpclientandroidlib/auth/params/AuthParams.java
-httpclientandroidlib/auth/params/AuthPNames.java
-httpclientandroidlib/auth/UsernamePasswordCredentials.java
-httpclientandroidlib/client/AuthCache.java
-httpclientandroidlib/client/AuthenticationHandler.java
-httpclientandroidlib/client/CircularRedirectException.java
-httpclientandroidlib/client/ClientProtocolException.java
-httpclientandroidlib/client/CookieStore.java
-httpclientandroidlib/client/CredentialsProvider.java
-httpclientandroidlib/client/entity/DecompressingEntity.java
-httpclientandroidlib/client/entity/DeflateDecompressingEntity.java
-httpclientandroidlib/client/entity/GzipDecompressingEntity.java
-httpclientandroidlib/client/entity/UrlEncodedFormEntity.java
-httpclientandroidlib/client/HttpClient.java
-httpclientandroidlib/client/HttpRequestRetryHandler.java
-httpclientandroidlib/client/HttpResponseException.java
-httpclientandroidlib/client/methods/AbortableHttpRequest.java
-httpclientandroidlib/client/methods/HttpDelete.java
-httpclientandroidlib/client/methods/HttpEntityEnclosingRequestBase.java
-httpclientandroidlib/client/methods/HttpGet.java
-httpclientandroidlib/client/methods/HttpHead.java
-httpclientandroidlib/client/methods/HttpOptions.java
-httpclientandroidlib/client/methods/HttpPost.java
-httpclientandroidlib/client/methods/HttpPut.java
-httpclientandroidlib/client/methods/HttpRequestBase.java
-httpclientandroidlib/client/methods/HttpTrace.java
-httpclientandroidlib/client/methods/HttpUriRequest.java
-httpclientandroidlib/client/NonRepeatableRequestException.java
-httpclientandroidlib/client/params/AllClientPNames.java
-httpclientandroidlib/client/params/AuthPolicy.java
-httpclientandroidlib/client/params/ClientParamBean.java
-httpclientandroidlib/client/params/ClientPNames.java
-httpclientandroidlib/client/params/CookiePolicy.java
-httpclientandroidlib/client/params/HttpClientParams.java
-httpclientandroidlib/client/protocol/ClientContext.java
-httpclientandroidlib/client/protocol/ClientContextConfigurer.java
-httpclientandroidlib/client/protocol/RequestAcceptEncoding.java
-httpclientandroidlib/client/protocol/RequestAddCookies.java
-httpclientandroidlib/client/protocol/RequestAuthCache.java
-httpclientandroidlib/client/protocol/RequestClientConnControl.java
-httpclientandroidlib/client/protocol/RequestDefaultHeaders.java
-httpclientandroidlib/client/protocol/RequestProxyAuthentication.java
-httpclientandroidlib/client/protocol/RequestTargetAuthentication.java
-httpclientandroidlib/client/protocol/ResponseAuthCache.java
-httpclientandroidlib/client/protocol/ResponseContentEncoding.java
-httpclientandroidlib/client/protocol/ResponseProcessCookies.java
-httpclientandroidlib/client/RedirectException.java
-httpclientandroidlib/client/RedirectHandler.java
-httpclientandroidlib/client/RedirectStrategy.java
-httpclientandroidlib/client/RequestDirector.java
-httpclientandroidlib/client/ResponseHandler.java
-httpclientandroidlib/client/UserTokenHandler.java
-httpclientandroidlib/client/utils/CloneUtils.java
-httpclientandroidlib/client/utils/Idn.java
-httpclientandroidlib/client/utils/JdkIdn.java
-httpclientandroidlib/client/utils/Punycode.java
-httpclientandroidlib/client/utils/Rfc3492Idn.java
-httpclientandroidlib/client/utils/URIUtils.java
-httpclientandroidlib/client/utils/URLEncodedUtils.java
-httpclientandroidlib/conn/BasicEofSensorWatcher.java
-httpclientandroidlib/conn/BasicManagedEntity.java
-httpclientandroidlib/conn/ClientConnectionManager.java
-httpclientandroidlib/conn/ClientConnectionManagerFactory.java
-httpclientandroidlib/conn/ClientConnectionOperator.java
-httpclientandroidlib/conn/ClientConnectionRequest.java
-httpclientandroidlib/conn/ConnectionKeepAliveStrategy.java
-httpclientandroidlib/conn/ConnectionPoolTimeoutException.java
-httpclientandroidlib/conn/ConnectionReleaseTrigger.java
-httpclientandroidlib/conn/ConnectTimeoutException.java
-httpclientandroidlib/conn/EofSensorInputStream.java
-httpclientandroidlib/conn/EofSensorWatcher.java
-httpclientandroidlib/conn/HttpHostConnectException.java
-httpclientandroidlib/conn/HttpRoutedConnection.java
-httpclientandroidlib/conn/ManagedClientConnection.java
-httpclientandroidlib/conn/MultihomePlainSocketFactory.java
-httpclientandroidlib/conn/OperatedClientConnection.java
-httpclientandroidlib/conn/params/ConnConnectionParamBean.java
-httpclientandroidlib/conn/params/ConnConnectionPNames.java
-httpclientandroidlib/conn/params/ConnManagerParamBean.java
-httpclientandroidlib/conn/params/ConnManagerParams.java
-httpclientandroidlib/conn/params/ConnManagerPNames.java
-httpclientandroidlib/conn/params/ConnPerRoute.java
-httpclientandroidlib/conn/params/ConnPerRouteBean.java
-httpclientandroidlib/conn/params/ConnRouteParamBean.java
-httpclientandroidlib/conn/params/ConnRouteParams.java
-httpclientandroidlib/conn/params/ConnRoutePNames.java
-httpclientandroidlib/conn/routing/BasicRouteDirector.java
-httpclientandroidlib/conn/routing/HttpRoute.java
-httpclientandroidlib/conn/routing/HttpRouteDirector.java
-httpclientandroidlib/conn/routing/HttpRoutePlanner.java
-httpclientandroidlib/conn/routing/RouteInfo.java
-httpclientandroidlib/conn/routing/RouteTracker.java
-httpclientandroidlib/conn/scheme/HostNameResolver.java
-httpclientandroidlib/conn/scheme/LayeredSchemeSocketFactory.java
-httpclientandroidlib/conn/scheme/LayeredSchemeSocketFactoryAdaptor.java
-httpclientandroidlib/conn/scheme/LayeredSocketFactory.java
-httpclientandroidlib/conn/scheme/LayeredSocketFactoryAdaptor.java
-httpclientandroidlib/conn/scheme/PlainSocketFactory.java
-httpclientandroidlib/conn/scheme/Scheme.java
-httpclientandroidlib/conn/scheme/SchemeRegistry.java
-httpclientandroidlib/conn/scheme/SchemeSocketFactory.java
-httpclientandroidlib/conn/scheme/SchemeSocketFactoryAdaptor.java
-httpclientandroidlib/conn/scheme/SocketFactory.java
-httpclientandroidlib/conn/scheme/SocketFactoryAdaptor.java
-httpclientandroidlib/conn/ssl/AbstractVerifier.java
-httpclientandroidlib/conn/ssl/AllowAllHostnameVerifier.java
-httpclientandroidlib/conn/ssl/BrowserCompatHostnameVerifier.java
-httpclientandroidlib/conn/ssl/SSLSocketFactory.java
-httpclientandroidlib/conn/ssl/StrictHostnameVerifier.java
-httpclientandroidlib/conn/ssl/TrustManagerDecorator.java
-httpclientandroidlib/conn/ssl/TrustSelfSignedStrategy.java
-httpclientandroidlib/conn/ssl/TrustStrategy.java
-httpclientandroidlib/conn/ssl/X509HostnameVerifier.java
-httpclientandroidlib/conn/util/InetAddressUtils.java
-httpclientandroidlib/ConnectionClosedException.java
-httpclientandroidlib/ConnectionReuseStrategy.java
-httpclientandroidlib/cookie/ClientCookie.java
-httpclientandroidlib/cookie/Cookie.java
-httpclientandroidlib/cookie/CookieAttributeHandler.java
-httpclientandroidlib/cookie/CookieIdentityComparator.java
-httpclientandroidlib/cookie/CookieOrigin.java
-httpclientandroidlib/cookie/CookiePathComparator.java
-httpclientandroidlib/cookie/CookieRestrictionViolationException.java
-httpclientandroidlib/cookie/CookieSpec.java
-httpclientandroidlib/cookie/CookieSpecFactory.java
-httpclientandroidlib/cookie/CookieSpecRegistry.java
-httpclientandroidlib/cookie/MalformedCookieException.java
-httpclientandroidlib/cookie/params/CookieSpecParamBean.java
-httpclientandroidlib/cookie/params/CookieSpecPNames.java
-httpclientandroidlib/cookie/SetCookie.java
-httpclientandroidlib/cookie/SetCookie2.java
-httpclientandroidlib/cookie/SM.java
-httpclientandroidlib/entity/AbstractHttpEntity.java
-httpclientandroidlib/entity/BasicHttpEntity.java
-httpclientandroidlib/entity/BufferedHttpEntity.java
-httpclientandroidlib/entity/ByteArrayEntity.java
-httpclientandroidlib/entity/ContentLengthStrategy.java
-httpclientandroidlib/entity/ContentProducer.java
-httpclientandroidlib/entity/EntityTemplate.java
-httpclientandroidlib/entity/FileEntity.java
-httpclientandroidlib/entity/HttpEntityWrapper.java
-httpclientandroidlib/entity/InputStreamEntity.java
-httpclientandroidlib/entity/SerializableEntity.java
-httpclientandroidlib/entity/StringEntity.java
-httpclientandroidlib/FormattedHeader.java
-httpclientandroidlib/Header.java
-httpclientandroidlib/HeaderElement.java
-httpclientandroidlib/HeaderElementIterator.java
-httpclientandroidlib/HeaderIterator.java
-httpclientandroidlib/HttpClientConnection.java
-httpclientandroidlib/HttpConnection.java
-httpclientandroidlib/HttpConnectionMetrics.java
-httpclientandroidlib/HttpEntity.java
-httpclientandroidlib/HttpEntityEnclosingRequest.java
-httpclientandroidlib/HttpException.java
-httpclientandroidlib/HttpHeaders.java
-httpclientandroidlib/HttpHost.java
-httpclientandroidlib/HttpInetConnection.java
-httpclientandroidlib/HttpMessage.java
-httpclientandroidlib/HttpRequest.java
-httpclientandroidlib/HttpRequestFactory.java
-httpclientandroidlib/HttpRequestInterceptor.java
-httpclientandroidlib/HttpResponse.java
-httpclientandroidlib/HttpResponseFactory.java
-httpclientandroidlib/HttpResponseInterceptor.java
-httpclientandroidlib/HttpServerConnection.java
-httpclientandroidlib/HttpStatus.java
-httpclientandroidlib/HttpVersion.java
-httpclientandroidlib/impl/AbstractHttpClientConnection.java
-httpclientandroidlib/impl/AbstractHttpServerConnection.java
-httpclientandroidlib/impl/auth/AuthSchemeBase.java
-httpclientandroidlib/impl/auth/BasicScheme.java
-httpclientandroidlib/impl/auth/BasicSchemeFactory.java
-httpclientandroidlib/impl/auth/DigestScheme.java
-httpclientandroidlib/impl/auth/DigestSchemeFactory.java
-httpclientandroidlib/impl/auth/NTLMEngine.java
-httpclientandroidlib/impl/auth/NTLMEngineException.java
-httpclientandroidlib/impl/auth/NTLMEngineImpl.java
-httpclientandroidlib/impl/auth/NTLMScheme.java
-httpclientandroidlib/impl/auth/NTLMSchemeFactory.java
-httpclientandroidlib/impl/auth/RFC2617Scheme.java
-httpclientandroidlib/impl/auth/SpnegoTokenGenerator.java
-httpclientandroidlib/impl/auth/UnsupportedDigestAlgorithmException.java
-httpclientandroidlib/impl/client/AbstractAuthenticationHandler.java
-httpclientandroidlib/impl/client/AbstractHttpClient.java
-httpclientandroidlib/impl/client/BasicAuthCache.java
-httpclientandroidlib/impl/client/BasicCookieStore.java
-httpclientandroidlib/impl/client/BasicCredentialsProvider.java
-httpclientandroidlib/impl/client/BasicResponseHandler.java
-httpclientandroidlib/impl/client/ClientParamsStack.java
-httpclientandroidlib/impl/client/ContentEncodingHttpClient.java
-httpclientandroidlib/impl/client/DefaultConnectionKeepAliveStrategy.java
-httpclientandroidlib/impl/client/DefaultHttpClient.java
-httpclientandroidlib/impl/client/DefaultHttpRequestRetryHandler.java
-httpclientandroidlib/impl/client/DefaultProxyAuthenticationHandler.java
-httpclientandroidlib/impl/client/DefaultRedirectHandler.java
-httpclientandroidlib/impl/client/DefaultRedirectStrategy.java
-httpclientandroidlib/impl/client/DefaultRedirectStrategyAdaptor.java
-httpclientandroidlib/impl/client/DefaultRequestDirector.java
-httpclientandroidlib/impl/client/DefaultTargetAuthenticationHandler.java
-httpclientandroidlib/impl/client/DefaultUserTokenHandler.java
-httpclientandroidlib/impl/client/EntityEnclosingRequestWrapper.java
-httpclientandroidlib/impl/client/RedirectLocations.java
-httpclientandroidlib/impl/client/RequestWrapper.java
-httpclientandroidlib/impl/client/RoutedRequest.java
-httpclientandroidlib/impl/client/TunnelRefusedException.java
-httpclientandroidlib/impl/conn/AbstractClientConnAdapter.java
-httpclientandroidlib/impl/conn/AbstractPooledConnAdapter.java
-httpclientandroidlib/impl/conn/AbstractPoolEntry.java
-httpclientandroidlib/impl/conn/ConnectionShutdownException.java
-httpclientandroidlib/impl/conn/DefaultClientConnection.java
-httpclientandroidlib/impl/conn/DefaultClientConnectionOperator.java
-httpclientandroidlib/impl/conn/DefaultHttpRoutePlanner.java
-httpclientandroidlib/impl/conn/DefaultResponseParser.java
-httpclientandroidlib/impl/conn/HttpInetSocketAddress.java
-httpclientandroidlib/impl/conn/IdleConnectionHandler.java
-httpclientandroidlib/impl/conn/LoggingSessionInputBuffer.java
-httpclientandroidlib/impl/conn/LoggingSessionOutputBuffer.java
-httpclientandroidlib/impl/conn/ProxySelectorRoutePlanner.java
-httpclientandroidlib/impl/conn/SchemeRegistryFactory.java
-httpclientandroidlib/impl/conn/SingleClientConnManager.java
-httpclientandroidlib/impl/conn/tsccm/AbstractConnPool.java
-httpclientandroidlib/impl/conn/tsccm/BasicPooledConnAdapter.java
-httpclientandroidlib/impl/conn/tsccm/BasicPoolEntry.java
-httpclientandroidlib/impl/conn/tsccm/BasicPoolEntryRef.java
-httpclientandroidlib/impl/conn/tsccm/ConnPoolByRoute.java
-httpclientandroidlib/impl/conn/tsccm/PoolEntryRequest.java
-httpclientandroidlib/impl/conn/tsccm/RefQueueHandler.java
-httpclientandroidlib/impl/conn/tsccm/RefQueueWorker.java
-httpclientandroidlib/impl/conn/tsccm/RouteSpecificPool.java
-httpclientandroidlib/impl/conn/tsccm/ThreadSafeClientConnManager.java
-httpclientandroidlib/impl/conn/tsccm/WaitingThread.java
-httpclientandroidlib/impl/conn/tsccm/WaitingThreadAborter.java
-httpclientandroidlib/impl/conn/Wire.java
-httpclientandroidlib/impl/cookie/AbstractCookieAttributeHandler.java
-httpclientandroidlib/impl/cookie/AbstractCookieSpec.java
-httpclientandroidlib/impl/cookie/BasicClientCookie.java
-httpclientandroidlib/impl/cookie/BasicClientCookie2.java
-httpclientandroidlib/impl/cookie/BasicCommentHandler.java
-httpclientandroidlib/impl/cookie/BasicDomainHandler.java
-httpclientandroidlib/impl/cookie/BasicExpiresHandler.java
-httpclientandroidlib/impl/cookie/BasicMaxAgeHandler.java
-httpclientandroidlib/impl/cookie/BasicPathHandler.java
-httpclientandroidlib/impl/cookie/BasicSecureHandler.java
-httpclientandroidlib/impl/cookie/BestMatchSpec.java
-httpclientandroidlib/impl/cookie/BestMatchSpecFactory.java
-httpclientandroidlib/impl/cookie/BrowserCompatSpec.java
-httpclientandroidlib/impl/cookie/BrowserCompatSpecFactory.java
-httpclientandroidlib/impl/cookie/CookieSpecBase.java
-httpclientandroidlib/impl/cookie/DateParseException.java
-httpclientandroidlib/impl/cookie/DateUtils.java
-httpclientandroidlib/impl/cookie/IgnoreSpec.java
-httpclientandroidlib/impl/cookie/IgnoreSpecFactory.java
-httpclientandroidlib/impl/cookie/NetscapeDomainHandler.java
-httpclientandroidlib/impl/cookie/NetscapeDraftHeaderParser.java
-httpclientandroidlib/impl/cookie/NetscapeDraftSpec.java
-httpclientandroidlib/impl/cookie/NetscapeDraftSpecFactory.java
-httpclientandroidlib/impl/cookie/PublicSuffixFilter.java
-httpclientandroidlib/impl/cookie/PublicSuffixListParser.java
-httpclientandroidlib/impl/cookie/RFC2109DomainHandler.java
-httpclientandroidlib/impl/cookie/RFC2109Spec.java
-httpclientandroidlib/impl/cookie/RFC2109SpecFactory.java
-httpclientandroidlib/impl/cookie/RFC2109VersionHandler.java
-httpclientandroidlib/impl/cookie/RFC2965CommentUrlAttributeHandler.java
-httpclientandroidlib/impl/cookie/RFC2965DiscardAttributeHandler.java
-httpclientandroidlib/impl/cookie/RFC2965DomainAttributeHandler.java
-httpclientandroidlib/impl/cookie/RFC2965PortAttributeHandler.java
-httpclientandroidlib/impl/cookie/RFC2965Spec.java
-httpclientandroidlib/impl/cookie/RFC2965SpecFactory.java
-httpclientandroidlib/impl/cookie/RFC2965VersionAttributeHandler.java
-httpclientandroidlib/impl/DefaultConnectionReuseStrategy.java
-httpclientandroidlib/impl/DefaultHttpClientConnection.java
-httpclientandroidlib/impl/DefaultHttpRequestFactory.java
-httpclientandroidlib/impl/DefaultHttpResponseFactory.java
-httpclientandroidlib/impl/DefaultHttpServerConnection.java
-httpclientandroidlib/impl/EnglishReasonPhraseCatalog.java
-httpclientandroidlib/impl/entity/EntityDeserializer.java
-httpclientandroidlib/impl/entity/EntitySerializer.java
-httpclientandroidlib/impl/entity/LaxContentLengthStrategy.java
-httpclientandroidlib/impl/entity/StrictContentLengthStrategy.java
-httpclientandroidlib/impl/HttpConnectionMetricsImpl.java
-httpclientandroidlib/impl/io/AbstractMessageParser.java
-httpclientandroidlib/impl/io/AbstractMessageWriter.java
-httpclientandroidlib/impl/io/AbstractSessionInputBuffer.java
-httpclientandroidlib/impl/io/AbstractSessionOutputBuffer.java
-httpclientandroidlib/impl/io/ChunkedInputStream.java
-httpclientandroidlib/impl/io/ChunkedOutputStream.java
-httpclientandroidlib/impl/io/ContentLengthInputStream.java
-httpclientandroidlib/impl/io/ContentLengthOutputStream.java
-httpclientandroidlib/impl/io/HttpRequestParser.java
-httpclientandroidlib/impl/io/HttpRequestWriter.java
-httpclientandroidlib/impl/io/HttpResponseParser.java
-httpclientandroidlib/impl/io/HttpResponseWriter.java
-httpclientandroidlib/impl/io/HttpTransportMetricsImpl.java
-httpclientandroidlib/impl/io/IdentityInputStream.java
-httpclientandroidlib/impl/io/IdentityOutputStream.java
-httpclientandroidlib/impl/io/SocketInputBuffer.java
-httpclientandroidlib/impl/io/SocketOutputBuffer.java
-httpclientandroidlib/impl/NoConnectionReuseStrategy.java
-httpclientandroidlib/impl/SocketHttpClientConnection.java
-httpclientandroidlib/impl/SocketHttpServerConnection.java
-httpclientandroidlib/io/BufferInfo.java
-httpclientandroidlib/io/EofSensor.java
-httpclientandroidlib/io/HttpMessageParser.java
-httpclientandroidlib/io/HttpMessageWriter.java
-httpclientandroidlib/io/HttpTransportMetrics.java
-httpclientandroidlib/io/SessionInputBuffer.java
-httpclientandroidlib/io/SessionOutputBuffer.java
-httpclientandroidlib/MalformedChunkCodingException.java
-httpclientandroidlib/message/AbstractHttpMessage.java
-httpclientandroidlib/message/BasicHeader.java
-httpclientandroidlib/message/BasicHeaderElement.java
-httpclientandroidlib/message/BasicHeaderElementIterator.java
-httpclientandroidlib/message/BasicHeaderIterator.java
-httpclientandroidlib/message/BasicHeaderValueFormatter.java
-httpclientandroidlib/message/BasicHeaderValueParser.java
-httpclientandroidlib/message/BasicHttpEntityEnclosingRequest.java
-httpclientandroidlib/message/BasicHttpRequest.java
-httpclientandroidlib/message/BasicHttpResponse.java
-httpclientandroidlib/message/BasicLineFormatter.java
-httpclientandroidlib/message/BasicLineParser.java
-httpclientandroidlib/message/BasicListHeaderIterator.java
-httpclientandroidlib/message/BasicNameValuePair.java
-httpclientandroidlib/message/BasicRequestLine.java
-httpclientandroidlib/message/BasicStatusLine.java
-httpclientandroidlib/message/BasicTokenIterator.java
-httpclientandroidlib/message/BufferedHeader.java
-httpclientandroidlib/message/HeaderGroup.java
-httpclientandroidlib/message/HeaderValueFormatter.java
-httpclientandroidlib/message/HeaderValueParser.java
-httpclientandroidlib/message/LineFormatter.java
-httpclientandroidlib/message/LineParser.java
-httpclientandroidlib/message/ParserCursor.java
-httpclientandroidlib/MethodNotSupportedException.java
-httpclientandroidlib/NameValuePair.java
-httpclientandroidlib/NoHttpResponseException.java
-httpclientandroidlib/params/AbstractHttpParams.java
-httpclientandroidlib/params/BasicHttpParams.java
-httpclientandroidlib/params/CoreConnectionPNames.java
-httpclientandroidlib/params/CoreProtocolPNames.java
-httpclientandroidlib/params/DefaultedHttpParams.java
-httpclientandroidlib/params/HttpAbstractParamBean.java
-httpclientandroidlib/params/HttpConnectionParamBean.java
-httpclientandroidlib/params/HttpConnectionParams.java
-httpclientandroidlib/params/HttpParams.java
-httpclientandroidlib/params/HttpProtocolParamBean.java
-httpclientandroidlib/params/HttpProtocolParams.java
-httpclientandroidlib/params/SyncBasicHttpParams.java
-httpclientandroidlib/ParseException.java
-httpclientandroidlib/protocol/BasicHttpContext.java
-httpclientandroidlib/protocol/BasicHttpProcessor.java
-httpclientandroidlib/protocol/DefaultedHttpContext.java
-httpclientandroidlib/protocol/ExecutionContext.java
-httpclientandroidlib/protocol/HTTP.java
-httpclientandroidlib/protocol/HttpContext.java
-httpclientandroidlib/protocol/HttpDateGenerator.java
-httpclientandroidlib/protocol/HttpExpectationVerifier.java
-httpclientandroidlib/protocol/HttpProcessor.java
-httpclientandroidlib/protocol/HttpRequestExecutor.java
-httpclientandroidlib/protocol/HttpRequestHandler.java
-httpclientandroidlib/protocol/HttpRequestHandlerRegistry.java
-httpclientandroidlib/protocol/HttpRequestHandlerResolver.java
-httpclientandroidlib/protocol/HttpRequestInterceptorList.java
-httpclientandroidlib/protocol/HttpResponseInterceptorList.java
-httpclientandroidlib/protocol/HttpService.java
-httpclientandroidlib/protocol/ImmutableHttpProcessor.java
-httpclientandroidlib/protocol/RequestConnControl.java
-httpclientandroidlib/protocol/RequestContent.java
-httpclientandroidlib/protocol/RequestDate.java
-httpclientandroidlib/protocol/RequestExpectContinue.java
-httpclientandroidlib/protocol/RequestTargetHost.java
-httpclientandroidlib/protocol/RequestUserAgent.java
-httpclientandroidlib/protocol/ResponseConnControl.java
-httpclientandroidlib/protocol/ResponseContent.java
-httpclientandroidlib/protocol/ResponseDate.java
-httpclientandroidlib/protocol/ResponseServer.java
-httpclientandroidlib/protocol/SyncBasicHttpContext.java
-httpclientandroidlib/protocol/UriPatternMatcher.java
-httpclientandroidlib/ProtocolException.java
-httpclientandroidlib/ProtocolVersion.java
-httpclientandroidlib/ReasonPhraseCatalog.java
-httpclientandroidlib/RequestLine.java
-httpclientandroidlib/StatusLine.java
-httpclientandroidlib/TokenIterator.java
-httpclientandroidlib/TruncatedChunkException.java
-httpclientandroidlib/UnsupportedHttpVersionException.java
-httpclientandroidlib/util/ByteArrayBuffer.java
-httpclientandroidlib/util/CharArrayBuffer.java
-httpclientandroidlib/util/EncodingUtils.java
-httpclientandroidlib/util/EntityUtils.java
-httpclientandroidlib/util/ExceptionUtils.java
-httpclientandroidlib/util/LangUtils.java
-httpclientandroidlib/util/VersionInfo.java
-json-simple/ItemList.java
-json-simple/JSONArray.java
-json-simple/JSONAware.java
-json-simple/JSONObject.java
-json-simple/JSONStreamAware.java
-json-simple/JSONValue.java
-json-simple/parser/ContainerFactory.java
-json-simple/parser/ContentHandler.java
-json-simple/parser/JSONParser.java
-json-simple/parser/ParseException.java
-json-simple/parser/Yylex.java
-json-simple/parser/Yytoken.java
-apache/commons/codec/binary/Base32.java
-apache/commons/codec/binary/Base32InputStream.java
-apache/commons/codec/binary/Base32OutputStream.java
-apache/commons/codec/binary/Base64.java
-apache/commons/codec/binary/Base64InputStream.java
-apache/commons/codec/binary/Base64OutputStream.java
-apache/commons/codec/binary/BaseNCodec.java
-apache/commons/codec/binary/BaseNCodecInputStream.java
-apache/commons/codec/binary/BaseNCodecOutputStream.java
-apache/commons/codec/binary/BinaryCodec.java
-apache/commons/codec/binary/Hex.java
-apache/commons/codec/binary/StringUtils.java
-apache/commons/codec/BinaryDecoder.java
-apache/commons/codec/BinaryEncoder.java
-apache/commons/codec/CharEncoding.java
-apache/commons/codec/Decoder.java
-apache/commons/codec/DecoderException.java
-apache/commons/codec/digest/DigestUtils.java
-apache/commons/codec/Encoder.java
-apache/commons/codec/EncoderException.java
-apache/commons/codec/language/AbstractCaverphone.java
-apache/commons/codec/language/Caverphone.java
-apache/commons/codec/language/Caverphone1.java
-apache/commons/codec/language/Caverphone2.java
-apache/commons/codec/language/ColognePhonetic.java
-apache/commons/codec/language/DoubleMetaphone.java
-apache/commons/codec/language/Metaphone.java
-apache/commons/codec/language/RefinedSoundex.java
-apache/commons/codec/language/Soundex.java
-apache/commons/codec/language/SoundexUtils.java
-apache/commons/codec/net/BCodec.java
-apache/commons/codec/net/QCodec.java
-apache/commons/codec/net/QuotedPrintableCodec.java
-apache/commons/codec/net/RFC1522Codec.java
-apache/commons/codec/net/URLCodec.java
-apache/commons/codec/net/Utils.java
-apache/commons/codec/StringDecoder.java
-apache/commons/codec/StringEncoder.java
-apache/commons/codec/StringEncoderComparator.java
+ch/boye/httpclientandroidlib/androidextra/HttpClientAndroidLog.java
+ch/boye/httpclientandroidlib/annotation/GuardedBy.java
+ch/boye/httpclientandroidlib/annotation/Immutable.java
+ch/boye/httpclientandroidlib/annotation/NotThreadSafe.java
+ch/boye/httpclientandroidlib/annotation/ThreadSafe.java
+ch/boye/httpclientandroidlib/auth/AUTH.java
+ch/boye/httpclientandroidlib/auth/AuthenticationException.java
+ch/boye/httpclientandroidlib/auth/AuthScheme.java
+ch/boye/httpclientandroidlib/auth/AuthSchemeFactory.java
+ch/boye/httpclientandroidlib/auth/AuthSchemeRegistry.java
+ch/boye/httpclientandroidlib/auth/AuthScope.java
+ch/boye/httpclientandroidlib/auth/AuthState.java
+ch/boye/httpclientandroidlib/auth/BasicUserPrincipal.java
+ch/boye/httpclientandroidlib/auth/ContextAwareAuthScheme.java
+ch/boye/httpclientandroidlib/auth/Credentials.java
+ch/boye/httpclientandroidlib/auth/InvalidCredentialsException.java
+ch/boye/httpclientandroidlib/auth/MalformedChallengeException.java
+ch/boye/httpclientandroidlib/auth/NTCredentials.java
+ch/boye/httpclientandroidlib/auth/NTUserPrincipal.java
+ch/boye/httpclientandroidlib/auth/params/AuthParamBean.java
+ch/boye/httpclientandroidlib/auth/params/AuthParams.java
+ch/boye/httpclientandroidlib/auth/params/AuthPNames.java
+ch/boye/httpclientandroidlib/auth/UsernamePasswordCredentials.java
+ch/boye/httpclientandroidlib/client/AuthCache.java
+ch/boye/httpclientandroidlib/client/AuthenticationHandler.java
+ch/boye/httpclientandroidlib/client/CircularRedirectException.java
+ch/boye/httpclientandroidlib/client/ClientProtocolException.java
+ch/boye/httpclientandroidlib/client/CookieStore.java
+ch/boye/httpclientandroidlib/client/CredentialsProvider.java
+ch/boye/httpclientandroidlib/client/entity/DecompressingEntity.java
+ch/boye/httpclientandroidlib/client/entity/DeflateDecompressingEntity.java
+ch/boye/httpclientandroidlib/client/entity/GzipDecompressingEntity.java
+ch/boye/httpclientandroidlib/client/entity/UrlEncodedFormEntity.java
+ch/boye/httpclientandroidlib/client/HttpClient.java
+ch/boye/httpclientandroidlib/client/HttpRequestRetryHandler.java
+ch/boye/httpclientandroidlib/client/HttpResponseException.java
+ch/boye/httpclientandroidlib/client/methods/AbortableHttpRequest.java
+ch/boye/httpclientandroidlib/client/methods/HttpDelete.java
+ch/boye/httpclientandroidlib/client/methods/HttpEntityEnclosingRequestBase.java
+ch/boye/httpclientandroidlib/client/methods/HttpGet.java
+ch/boye/httpclientandroidlib/client/methods/HttpHead.java
+ch/boye/httpclientandroidlib/client/methods/HttpOptions.java
+ch/boye/httpclientandroidlib/client/methods/HttpPost.java
+ch/boye/httpclientandroidlib/client/methods/HttpPut.java
+ch/boye/httpclientandroidlib/client/methods/HttpRequestBase.java
+ch/boye/httpclientandroidlib/client/methods/HttpTrace.java
+ch/boye/httpclientandroidlib/client/methods/HttpUriRequest.java
+ch/boye/httpclientandroidlib/client/NonRepeatableRequestException.java
+ch/boye/httpclientandroidlib/client/params/AllClientPNames.java
+ch/boye/httpclientandroidlib/client/params/AuthPolicy.java
+ch/boye/httpclientandroidlib/client/params/ClientParamBean.java
+ch/boye/httpclientandroidlib/client/params/ClientPNames.java
+ch/boye/httpclientandroidlib/client/params/CookiePolicy.java
+ch/boye/httpclientandroidlib/client/params/HttpClientParams.java
+ch/boye/httpclientandroidlib/client/protocol/ClientContext.java
+ch/boye/httpclientandroidlib/client/protocol/ClientContextConfigurer.java
+ch/boye/httpclientandroidlib/client/protocol/RequestAcceptEncoding.java
+ch/boye/httpclientandroidlib/client/protocol/RequestAddCookies.java
+ch/boye/httpclientandroidlib/client/protocol/RequestAuthCache.java
+ch/boye/httpclientandroidlib/client/protocol/RequestClientConnControl.java
+ch/boye/httpclientandroidlib/client/protocol/RequestDefaultHeaders.java
+ch/boye/httpclientandroidlib/client/protocol/RequestProxyAuthentication.java
+ch/boye/httpclientandroidlib/client/protocol/RequestTargetAuthentication.java
+ch/boye/httpclientandroidlib/client/protocol/ResponseAuthCache.java
+ch/boye/httpclientandroidlib/client/protocol/ResponseContentEncoding.java
+ch/boye/httpclientandroidlib/client/protocol/ResponseProcessCookies.java
+ch/boye/httpclientandroidlib/client/RedirectException.java
+ch/boye/httpclientandroidlib/client/RedirectHandler.java
+ch/boye/httpclientandroidlib/client/RedirectStrategy.java
+ch/boye/httpclientandroidlib/client/RequestDirector.java
+ch/boye/httpclientandroidlib/client/ResponseHandler.java
+ch/boye/httpclientandroidlib/client/UserTokenHandler.java
+ch/boye/httpclientandroidlib/client/utils/CloneUtils.java
+ch/boye/httpclientandroidlib/client/utils/Idn.java
+ch/boye/httpclientandroidlib/client/utils/JdkIdn.java
+ch/boye/httpclientandroidlib/client/utils/Punycode.java
+ch/boye/httpclientandroidlib/client/utils/Rfc3492Idn.java
+ch/boye/httpclientandroidlib/client/utils/URIUtils.java
+ch/boye/httpclientandroidlib/client/utils/URLEncodedUtils.java
+ch/boye/httpclientandroidlib/conn/BasicEofSensorWatcher.java
+ch/boye/httpclientandroidlib/conn/BasicManagedEntity.java
+ch/boye/httpclientandroidlib/conn/ClientConnectionManager.java
+ch/boye/httpclientandroidlib/conn/ClientConnectionManagerFactory.java
+ch/boye/httpclientandroidlib/conn/ClientConnectionOperator.java
+ch/boye/httpclientandroidlib/conn/ClientConnectionRequest.java
+ch/boye/httpclientandroidlib/conn/ConnectionKeepAliveStrategy.java
+ch/boye/httpclientandroidlib/conn/ConnectionPoolTimeoutException.java
+ch/boye/httpclientandroidlib/conn/ConnectionReleaseTrigger.java
+ch/boye/httpclientandroidlib/conn/ConnectTimeoutException.java
+ch/boye/httpclientandroidlib/conn/EofSensorInputStream.java
+ch/boye/httpclientandroidlib/conn/EofSensorWatcher.java
+ch/boye/httpclientandroidlib/conn/HttpHostConnectException.java
+ch/boye/httpclientandroidlib/conn/HttpRoutedConnection.java
+ch/boye/httpclientandroidlib/conn/ManagedClientConnection.java
+ch/boye/httpclientandroidlib/conn/MultihomePlainSocketFactory.java
+ch/boye/httpclientandroidlib/conn/OperatedClientConnection.java
+ch/boye/httpclientandroidlib/conn/params/ConnConnectionParamBean.java
+ch/boye/httpclientandroidlib/conn/params/ConnConnectionPNames.java
+ch/boye/httpclientandroidlib/conn/params/ConnManagerParamBean.java
+ch/boye/httpclientandroidlib/conn/params/ConnManagerParams.java
+ch/boye/httpclientandroidlib/conn/params/ConnManagerPNames.java
+ch/boye/httpclientandroidlib/conn/params/ConnPerRoute.java
+ch/boye/httpclientandroidlib/conn/params/ConnPerRouteBean.java
+ch/boye/httpclientandroidlib/conn/params/ConnRouteParamBean.java
+ch/boye/httpclientandroidlib/conn/params/ConnRouteParams.java
+ch/boye/httpclientandroidlib/conn/params/ConnRoutePNames.java
+ch/boye/httpclientandroidlib/conn/routing/BasicRouteDirector.java
+ch/boye/httpclientandroidlib/conn/routing/HttpRoute.java
+ch/boye/httpclientandroidlib/conn/routing/HttpRouteDirector.java
+ch/boye/httpclientandroidlib/conn/routing/HttpRoutePlanner.java
+ch/boye/httpclientandroidlib/conn/routing/RouteInfo.java
+ch/boye/httpclientandroidlib/conn/routing/RouteTracker.java
+ch/boye/httpclientandroidlib/conn/scheme/HostNameResolver.java
+ch/boye/httpclientandroidlib/conn/scheme/LayeredSchemeSocketFactory.java
+ch/boye/httpclientandroidlib/conn/scheme/LayeredSchemeSocketFactoryAdaptor.java
+ch/boye/httpclientandroidlib/conn/scheme/LayeredSocketFactory.java
+ch/boye/httpclientandroidlib/conn/scheme/LayeredSocketFactoryAdaptor.java
+ch/boye/httpclientandroidlib/conn/scheme/PlainSocketFactory.java
+ch/boye/httpclientandroidlib/conn/scheme/Scheme.java
+ch/boye/httpclientandroidlib/conn/scheme/SchemeRegistry.java
+ch/boye/httpclientandroidlib/conn/scheme/SchemeSocketFactory.java
+ch/boye/httpclientandroidlib/conn/scheme/SchemeSocketFactoryAdaptor.java
+ch/boye/httpclientandroidlib/conn/scheme/SocketFactory.java
+ch/boye/httpclientandroidlib/conn/scheme/SocketFactoryAdaptor.java
+ch/boye/httpclientandroidlib/conn/ssl/AbstractVerifier.java
+ch/boye/httpclientandroidlib/conn/ssl/AllowAllHostnameVerifier.java
+ch/boye/httpclientandroidlib/conn/ssl/BrowserCompatHostnameVerifier.java
+ch/boye/httpclientandroidlib/conn/ssl/SSLSocketFactory.java
+ch/boye/httpclientandroidlib/conn/ssl/StrictHostnameVerifier.java
+ch/boye/httpclientandroidlib/conn/ssl/TrustManagerDecorator.java
+ch/boye/httpclientandroidlib/conn/ssl/TrustSelfSignedStrategy.java
+ch/boye/httpclientandroidlib/conn/ssl/TrustStrategy.java
+ch/boye/httpclientandroidlib/conn/ssl/X509HostnameVerifier.java
+ch/boye/httpclientandroidlib/conn/util/InetAddressUtils.java
+ch/boye/httpclientandroidlib/ConnectionClosedException.java
+ch/boye/httpclientandroidlib/ConnectionReuseStrategy.java
+ch/boye/httpclientandroidlib/cookie/ClientCookie.java
+ch/boye/httpclientandroidlib/cookie/Cookie.java
+ch/boye/httpclientandroidlib/cookie/CookieAttributeHandler.java
+ch/boye/httpclientandroidlib/cookie/CookieIdentityComparator.java
+ch/boye/httpclientandroidlib/cookie/CookieOrigin.java
+ch/boye/httpclientandroidlib/cookie/CookiePathComparator.java
+ch/boye/httpclientandroidlib/cookie/CookieRestrictionViolationException.java
+ch/boye/httpclientandroidlib/cookie/CookieSpec.java
+ch/boye/httpclientandroidlib/cookie/CookieSpecFactory.java
+ch/boye/httpclientandroidlib/cookie/CookieSpecRegistry.java
+ch/boye/httpclientandroidlib/cookie/MalformedCookieException.java
+ch/boye/httpclientandroidlib/cookie/params/CookieSpecParamBean.java
+ch/boye/httpclientandroidlib/cookie/params/CookieSpecPNames.java
+ch/boye/httpclientandroidlib/cookie/SetCookie.java
+ch/boye/httpclientandroidlib/cookie/SetCookie2.java
+ch/boye/httpclientandroidlib/cookie/SM.java
+ch/boye/httpclientandroidlib/entity/AbstractHttpEntity.java
+ch/boye/httpclientandroidlib/entity/BasicHttpEntity.java
+ch/boye/httpclientandroidlib/entity/BufferedHttpEntity.java
+ch/boye/httpclientandroidlib/entity/ByteArrayEntity.java
+ch/boye/httpclientandroidlib/entity/ContentLengthStrategy.java
+ch/boye/httpclientandroidlib/entity/ContentProducer.java
+ch/boye/httpclientandroidlib/entity/EntityTemplate.java
+ch/boye/httpclientandroidlib/entity/FileEntity.java
+ch/boye/httpclientandroidlib/entity/HttpEntityWrapper.java
+ch/boye/httpclientandroidlib/entity/InputStreamEntity.java
+ch/boye/httpclientandroidlib/entity/SerializableEntity.java
+ch/boye/httpclientandroidlib/entity/StringEntity.java
+ch/boye/httpclientandroidlib/FormattedHeader.java
+ch/boye/httpclientandroidlib/Header.java
+ch/boye/httpclientandroidlib/HeaderElement.java
+ch/boye/httpclientandroidlib/HeaderElementIterator.java
+ch/boye/httpclientandroidlib/HeaderIterator.java
+ch/boye/httpclientandroidlib/HttpClientConnection.java
+ch/boye/httpclientandroidlib/HttpConnection.java
+ch/boye/httpclientandroidlib/HttpConnectionMetrics.java
+ch/boye/httpclientandroidlib/HttpEntity.java
+ch/boye/httpclientandroidlib/HttpEntityEnclosingRequest.java
+ch/boye/httpclientandroidlib/HttpException.java
+ch/boye/httpclientandroidlib/HttpHeaders.java
+ch/boye/httpclientandroidlib/HttpHost.java
+ch/boye/httpclientandroidlib/HttpInetConnection.java
+ch/boye/httpclientandroidlib/HttpMessage.java
+ch/boye/httpclientandroidlib/HttpRequest.java
+ch/boye/httpclientandroidlib/HttpRequestFactory.java
+ch/boye/httpclientandroidlib/HttpRequestInterceptor.java
+ch/boye/httpclientandroidlib/HttpResponse.java
+ch/boye/httpclientandroidlib/HttpResponseFactory.java
+ch/boye/httpclientandroidlib/HttpResponseInterceptor.java
+ch/boye/httpclientandroidlib/HttpServerConnection.java
+ch/boye/httpclientandroidlib/HttpStatus.java
+ch/boye/httpclientandroidlib/HttpVersion.java
+ch/boye/httpclientandroidlib/impl/AbstractHttpClientConnection.java
+ch/boye/httpclientandroidlib/impl/AbstractHttpServerConnection.java
+ch/boye/httpclientandroidlib/impl/auth/AuthSchemeBase.java
+ch/boye/httpclientandroidlib/impl/auth/BasicScheme.java
+ch/boye/httpclientandroidlib/impl/auth/BasicSchemeFactory.java
+ch/boye/httpclientandroidlib/impl/auth/DigestScheme.java
+ch/boye/httpclientandroidlib/impl/auth/DigestSchemeFactory.java
+ch/boye/httpclientandroidlib/impl/auth/NTLMEngine.java
+ch/boye/httpclientandroidlib/impl/auth/NTLMEngineException.java
+ch/boye/httpclientandroidlib/impl/auth/NTLMEngineImpl.java
+ch/boye/httpclientandroidlib/impl/auth/NTLMScheme.java
+ch/boye/httpclientandroidlib/impl/auth/NTLMSchemeFactory.java
+ch/boye/httpclientandroidlib/impl/auth/RFC2617Scheme.java
+ch/boye/httpclientandroidlib/impl/auth/SpnegoTokenGenerator.java
+ch/boye/httpclientandroidlib/impl/auth/UnsupportedDigestAlgorithmException.java
+ch/boye/httpclientandroidlib/impl/client/AbstractAuthenticationHandler.java
+ch/boye/httpclientandroidlib/impl/client/AbstractHttpClient.java
+ch/boye/httpclientandroidlib/impl/client/BasicAuthCache.java
+ch/boye/httpclientandroidlib/impl/client/BasicCookieStore.java
+ch/boye/httpclientandroidlib/impl/client/BasicCredentialsProvider.java
+ch/boye/httpclientandroidlib/impl/client/BasicResponseHandler.java
+ch/boye/httpclientandroidlib/impl/client/ClientParamsStack.java
+ch/boye/httpclientandroidlib/impl/client/ContentEncodingHttpClient.java
+ch/boye/httpclientandroidlib/impl/client/DefaultConnectionKeepAliveStrategy.java
+ch/boye/httpclientandroidlib/impl/client/DefaultHttpClient.java
+ch/boye/httpclientandroidlib/impl/client/DefaultHttpRequestRetryHandler.java
+ch/boye/httpclientandroidlib/impl/client/DefaultProxyAuthenticationHandler.java
+ch/boye/httpclientandroidlib/impl/client/DefaultRedirectHandler.java
+ch/boye/httpclientandroidlib/impl/client/DefaultRedirectStrategy.java
+ch/boye/httpclientandroidlib/impl/client/DefaultRedirectStrategyAdaptor.java
+ch/boye/httpclientandroidlib/impl/client/DefaultRequestDirector.java
+ch/boye/httpclientandroidlib/impl/client/DefaultTargetAuthenticationHandler.java
+ch/boye/httpclientandroidlib/impl/client/DefaultUserTokenHandler.java
+ch/boye/httpclientandroidlib/impl/client/EntityEnclosingRequestWrapper.java
+ch/boye/httpclientandroidlib/impl/client/RedirectLocations.java
+ch/boye/httpclientandroidlib/impl/client/RequestWrapper.java
+ch/boye/httpclientandroidlib/impl/client/RoutedRequest.java
+ch/boye/httpclientandroidlib/impl/client/TunnelRefusedException.java
+ch/boye/httpclientandroidlib/impl/conn/AbstractClientConnAdapter.java
+ch/boye/httpclientandroidlib/impl/conn/AbstractPooledConnAdapter.java
+ch/boye/httpclientandroidlib/impl/conn/AbstractPoolEntry.java
+ch/boye/httpclientandroidlib/impl/conn/ConnectionShutdownException.java
+ch/boye/httpclientandroidlib/impl/conn/DefaultClientConnection.java
+ch/boye/httpclientandroidlib/impl/conn/DefaultClientConnectionOperator.java
+ch/boye/httpclientandroidlib/impl/conn/DefaultHttpRoutePlanner.java
+ch/boye/httpclientandroidlib/impl/conn/DefaultResponseParser.java
+ch/boye/httpclientandroidlib/impl/conn/HttpInetSocketAddress.java
+ch/boye/httpclientandroidlib/impl/conn/IdleConnectionHandler.java
+ch/boye/httpclientandroidlib/impl/conn/LoggingSessionInputBuffer.java
+ch/boye/httpclientandroidlib/impl/conn/LoggingSessionOutputBuffer.java
+ch/boye/httpclientandroidlib/impl/conn/ProxySelectorRoutePlanner.java
+ch/boye/httpclientandroidlib/impl/conn/SchemeRegistryFactory.java
+ch/boye/httpclientandroidlib/impl/conn/SingleClientConnManager.java
+ch/boye/httpclientandroidlib/impl/conn/tsccm/AbstractConnPool.java
+ch/boye/httpclientandroidlib/impl/conn/tsccm/BasicPooledConnAdapter.java
+ch/boye/httpclientandroidlib/impl/conn/tsccm/BasicPoolEntry.java
+ch/boye/httpclientandroidlib/impl/conn/tsccm/BasicPoolEntryRef.java
+ch/boye/httpclientandroidlib/impl/conn/tsccm/ConnPoolByRoute.java
+ch/boye/httpclientandroidlib/impl/conn/tsccm/PoolEntryRequest.java
+ch/boye/httpclientandroidlib/impl/conn/tsccm/RefQueueHandler.java
+ch/boye/httpclientandroidlib/impl/conn/tsccm/RefQueueWorker.java
+ch/boye/httpclientandroidlib/impl/conn/tsccm/RouteSpecificPool.java
+ch/boye/httpclientandroidlib/impl/conn/tsccm/ThreadSafeClientConnManager.java
+ch/boye/httpclientandroidlib/impl/conn/tsccm/WaitingThread.java
+ch/boye/httpclientandroidlib/impl/conn/tsccm/WaitingThreadAborter.java
+ch/boye/httpclientandroidlib/impl/conn/Wire.java
+ch/boye/httpclientandroidlib/impl/cookie/AbstractCookieAttributeHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/AbstractCookieSpec.java
+ch/boye/httpclientandroidlib/impl/cookie/BasicClientCookie.java
+ch/boye/httpclientandroidlib/impl/cookie/BasicClientCookie2.java
+ch/boye/httpclientandroidlib/impl/cookie/BasicCommentHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/BasicDomainHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/BasicExpiresHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/BasicMaxAgeHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/BasicPathHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/BasicSecureHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/BestMatchSpec.java
+ch/boye/httpclientandroidlib/impl/cookie/BestMatchSpecFactory.java
+ch/boye/httpclientandroidlib/impl/cookie/BrowserCompatSpec.java
+ch/boye/httpclientandroidlib/impl/cookie/BrowserCompatSpecFactory.java
+ch/boye/httpclientandroidlib/impl/cookie/CookieSpecBase.java
+ch/boye/httpclientandroidlib/impl/cookie/DateParseException.java
+ch/boye/httpclientandroidlib/impl/cookie/DateUtils.java
+ch/boye/httpclientandroidlib/impl/cookie/IgnoreSpec.java
+ch/boye/httpclientandroidlib/impl/cookie/IgnoreSpecFactory.java
+ch/boye/httpclientandroidlib/impl/cookie/NetscapeDomainHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/NetscapeDraftHeaderParser.java
+ch/boye/httpclientandroidlib/impl/cookie/NetscapeDraftSpec.java
+ch/boye/httpclientandroidlib/impl/cookie/NetscapeDraftSpecFactory.java
+ch/boye/httpclientandroidlib/impl/cookie/PublicSuffixFilter.java
+ch/boye/httpclientandroidlib/impl/cookie/PublicSuffixListParser.java
+ch/boye/httpclientandroidlib/impl/cookie/RFC2109DomainHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/RFC2109Spec.java
+ch/boye/httpclientandroidlib/impl/cookie/RFC2109SpecFactory.java
+ch/boye/httpclientandroidlib/impl/cookie/RFC2109VersionHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/RFC2965CommentUrlAttributeHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/RFC2965DiscardAttributeHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/RFC2965DomainAttributeHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/RFC2965PortAttributeHandler.java
+ch/boye/httpclientandroidlib/impl/cookie/RFC2965Spec.java
+ch/boye/httpclientandroidlib/impl/cookie/RFC2965SpecFactory.java
+ch/boye/httpclientandroidlib/impl/cookie/RFC2965VersionAttributeHandler.java
+ch/boye/httpclientandroidlib/impl/DefaultConnectionReuseStrategy.java
+ch/boye/httpclientandroidlib/impl/DefaultHttpClientConnection.java
+ch/boye/httpclientandroidlib/impl/DefaultHttpRequestFactory.java
+ch/boye/httpclientandroidlib/impl/DefaultHttpResponseFactory.java
+ch/boye/httpclientandroidlib/impl/DefaultHttpServerConnection.java
+ch/boye/httpclientandroidlib/impl/EnglishReasonPhraseCatalog.java
+ch/boye/httpclientandroidlib/impl/entity/EntityDeserializer.java
+ch/boye/httpclientandroidlib/impl/entity/EntitySerializer.java
+ch/boye/httpclientandroidlib/impl/entity/LaxContentLengthStrategy.java
+ch/boye/httpclientandroidlib/impl/entity/StrictContentLengthStrategy.java
+ch/boye/httpclientandroidlib/impl/HttpConnectionMetricsImpl.java
+ch/boye/httpclientandroidlib/impl/io/AbstractMessageParser.java
+ch/boye/httpclientandroidlib/impl/io/AbstractMessageWriter.java
+ch/boye/httpclientandroidlib/impl/io/AbstractSessionInputBuffer.java
+ch/boye/httpclientandroidlib/impl/io/AbstractSessionOutputBuffer.java
+ch/boye/httpclientandroidlib/impl/io/ChunkedInputStream.java
+ch/boye/httpclientandroidlib/impl/io/ChunkedOutputStream.java
+ch/boye/httpclientandroidlib/impl/io/ContentLengthInputStream.java
+ch/boye/httpclientandroidlib/impl/io/ContentLengthOutputStream.java
+ch/boye/httpclientandroidlib/impl/io/HttpRequestParser.java
+ch/boye/httpclientandroidlib/impl/io/HttpRequestWriter.java
+ch/boye/httpclientandroidlib/impl/io/HttpResponseParser.java
+ch/boye/httpclientandroidlib/impl/io/HttpResponseWriter.java
+ch/boye/httpclientandroidlib/impl/io/HttpTransportMetricsImpl.java
+ch/boye/httpclientandroidlib/impl/io/IdentityInputStream.java
+ch/boye/httpclientandroidlib/impl/io/IdentityOutputStream.java
+ch/boye/httpclientandroidlib/impl/io/SocketInputBuffer.java
+ch/boye/httpclientandroidlib/impl/io/SocketOutputBuffer.java
+ch/boye/httpclientandroidlib/impl/NoConnectionReuseStrategy.java
+ch/boye/httpclientandroidlib/impl/SocketHttpClientConnection.java
+ch/boye/httpclientandroidlib/impl/SocketHttpServerConnection.java
+ch/boye/httpclientandroidlib/io/BufferInfo.java
+ch/boye/httpclientandroidlib/io/EofSensor.java
+ch/boye/httpclientandroidlib/io/HttpMessageParser.java
+ch/boye/httpclientandroidlib/io/HttpMessageWriter.java
+ch/boye/httpclientandroidlib/io/HttpTransportMetrics.java
+ch/boye/httpclientandroidlib/io/SessionInputBuffer.java
+ch/boye/httpclientandroidlib/io/SessionOutputBuffer.java
+ch/boye/httpclientandroidlib/MalformedChunkCodingException.java
+ch/boye/httpclientandroidlib/message/AbstractHttpMessage.java
+ch/boye/httpclientandroidlib/message/BasicHeader.java
+ch/boye/httpclientandroidlib/message/BasicHeaderElement.java
+ch/boye/httpclientandroidlib/message/BasicHeaderElementIterator.java
+ch/boye/httpclientandroidlib/message/BasicHeaderIterator.java
+ch/boye/httpclientandroidlib/message/BasicHeaderValueFormatter.java
+ch/boye/httpclientandroidlib/message/BasicHeaderValueParser.java
+ch/boye/httpclientandroidlib/message/BasicHttpEntityEnclosingRequest.java
+ch/boye/httpclientandroidlib/message/BasicHttpRequest.java
+ch/boye/httpclientandroidlib/message/BasicHttpResponse.java
+ch/boye/httpclientandroidlib/message/BasicLineFormatter.java
+ch/boye/httpclientandroidlib/message/BasicLineParser.java
+ch/boye/httpclientandroidlib/message/BasicListHeaderIterator.java
+ch/boye/httpclientandroidlib/message/BasicNameValuePair.java
+ch/boye/httpclientandroidlib/message/BasicRequestLine.java
+ch/boye/httpclientandroidlib/message/BasicStatusLine.java
+ch/boye/httpclientandroidlib/message/BasicTokenIterator.java
+ch/boye/httpclientandroidlib/message/BufferedHeader.java
+ch/boye/httpclientandroidlib/message/HeaderGroup.java
+ch/boye/httpclientandroidlib/message/HeaderValueFormatter.java
+ch/boye/httpclientandroidlib/message/HeaderValueParser.java
+ch/boye/httpclientandroidlib/message/LineFormatter.java
+ch/boye/httpclientandroidlib/message/LineParser.java
+ch/boye/httpclientandroidlib/message/ParserCursor.java
+ch/boye/httpclientandroidlib/MethodNotSupportedException.java
+ch/boye/httpclientandroidlib/NameValuePair.java
+ch/boye/httpclientandroidlib/NoHttpResponseException.java
+ch/boye/httpclientandroidlib/params/AbstractHttpParams.java
+ch/boye/httpclientandroidlib/params/BasicHttpParams.java
+ch/boye/httpclientandroidlib/params/CoreConnectionPNames.java
+ch/boye/httpclientandroidlib/params/CoreProtocolPNames.java
+ch/boye/httpclientandroidlib/params/DefaultedHttpParams.java
+ch/boye/httpclientandroidlib/params/HttpAbstractParamBean.java
+ch/boye/httpclientandroidlib/params/HttpConnectionParamBean.java
+ch/boye/httpclientandroidlib/params/HttpConnectionParams.java
+ch/boye/httpclientandroidlib/params/HttpParams.java
+ch/boye/httpclientandroidlib/params/HttpProtocolParamBean.java
+ch/boye/httpclientandroidlib/params/HttpProtocolParams.java
+ch/boye/httpclientandroidlib/params/SyncBasicHttpParams.java
+ch/boye/httpclientandroidlib/ParseException.java
+ch/boye/httpclientandroidlib/protocol/BasicHttpContext.java
+ch/boye/httpclientandroidlib/protocol/BasicHttpProcessor.java
+ch/boye/httpclientandroidlib/protocol/DefaultedHttpContext.java
+ch/boye/httpclientandroidlib/protocol/ExecutionContext.java
+ch/boye/httpclientandroidlib/protocol/HTTP.java
+ch/boye/httpclientandroidlib/protocol/HttpContext.java
+ch/boye/httpclientandroidlib/protocol/HttpDateGenerator.java
+ch/boye/httpclientandroidlib/protocol/HttpExpectationVerifier.java
+ch/boye/httpclientandroidlib/protocol/HttpProcessor.java
+ch/boye/httpclientandroidlib/protocol/HttpRequestExecutor.java
+ch/boye/httpclientandroidlib/protocol/HttpRequestHandler.java
+ch/boye/httpclientandroidlib/protocol/HttpRequestHandlerRegistry.java
+ch/boye/httpclientandroidlib/protocol/HttpRequestHandlerResolver.java
+ch/boye/httpclientandroidlib/protocol/HttpRequestInterceptorList.java
+ch/boye/httpclientandroidlib/protocol/HttpResponseInterceptorList.java
+ch/boye/httpclientandroidlib/protocol/HttpService.java
+ch/boye/httpclientandroidlib/protocol/ImmutableHttpProcessor.java
+ch/boye/httpclientandroidlib/protocol/RequestConnControl.java
+ch/boye/httpclientandroidlib/protocol/RequestContent.java
+ch/boye/httpclientandroidlib/protocol/RequestDate.java
+ch/boye/httpclientandroidlib/protocol/RequestExpectContinue.java
+ch/boye/httpclientandroidlib/protocol/RequestTargetHost.java
+ch/boye/httpclientandroidlib/protocol/RequestUserAgent.java
+ch/boye/httpclientandroidlib/protocol/ResponseConnControl.java
+ch/boye/httpclientandroidlib/protocol/ResponseContent.java
+ch/boye/httpclientandroidlib/protocol/ResponseDate.java
+ch/boye/httpclientandroidlib/protocol/ResponseServer.java
+ch/boye/httpclientandroidlib/protocol/SyncBasicHttpContext.java
+ch/boye/httpclientandroidlib/protocol/UriPatternMatcher.java
+ch/boye/httpclientandroidlib/ProtocolException.java
+ch/boye/httpclientandroidlib/ProtocolVersion.java
+ch/boye/httpclientandroidlib/ReasonPhraseCatalog.java
+ch/boye/httpclientandroidlib/RequestLine.java
+ch/boye/httpclientandroidlib/StatusLine.java
+ch/boye/httpclientandroidlib/TokenIterator.java
+ch/boye/httpclientandroidlib/TruncatedChunkException.java
+ch/boye/httpclientandroidlib/UnsupportedHttpVersionException.java
+ch/boye/httpclientandroidlib/util/ByteArrayBuffer.java
+ch/boye/httpclientandroidlib/util/CharArrayBuffer.java
+ch/boye/httpclientandroidlib/util/EncodingUtils.java
+ch/boye/httpclientandroidlib/util/EntityUtils.java
+ch/boye/httpclientandroidlib/util/ExceptionUtils.java
+ch/boye/httpclientandroidlib/util/LangUtils.java
+ch/boye/httpclientandroidlib/util/VersionInfo.java
+org/json/simple/ItemList.java
+org/json/simple/JSONArray.java
+org/json/simple/JSONAware.java
+org/json/simple/JSONObject.java
+org/json/simple/JSONStreamAware.java
+org/json/simple/JSONValue.java
+org/json/simple/parser/ContainerFactory.java
+org/json/simple/parser/ContentHandler.java
+org/json/simple/parser/JSONParser.java
+org/json/simple/parser/ParseException.java
+org/json/simple/parser/Yylex.java
+org/json/simple/parser/Yytoken.java
+org/mozilla/apache/commons/codec/binary/Base32.java
+org/mozilla/apache/commons/codec/binary/Base32InputStream.java
+org/mozilla/apache/commons/codec/binary/Base32OutputStream.java
+org/mozilla/apache/commons/codec/binary/Base64.java
+org/mozilla/apache/commons/codec/binary/Base64InputStream.java
+org/mozilla/apache/commons/codec/binary/Base64OutputStream.java
+org/mozilla/apache/commons/codec/binary/BaseNCodec.java
+org/mozilla/apache/commons/codec/binary/BaseNCodecInputStream.java
+org/mozilla/apache/commons/codec/binary/BaseNCodecOutputStream.java
+org/mozilla/apache/commons/codec/binary/BinaryCodec.java
+org/mozilla/apache/commons/codec/binary/Hex.java
+org/mozilla/apache/commons/codec/binary/StringUtils.java
+org/mozilla/apache/commons/codec/BinaryDecoder.java
+org/mozilla/apache/commons/codec/BinaryEncoder.java
+org/mozilla/apache/commons/codec/CharEncoding.java
+org/mozilla/apache/commons/codec/Decoder.java
+org/mozilla/apache/commons/codec/DecoderException.java
+org/mozilla/apache/commons/codec/digest/DigestUtils.java
+org/mozilla/apache/commons/codec/Encoder.java
+org/mozilla/apache/commons/codec/EncoderException.java
+org/mozilla/apache/commons/codec/language/AbstractCaverphone.java
+org/mozilla/apache/commons/codec/language/Caverphone.java
+org/mozilla/apache/commons/codec/language/Caverphone1.java
+org/mozilla/apache/commons/codec/language/Caverphone2.java
+org/mozilla/apache/commons/codec/language/ColognePhonetic.java
+org/mozilla/apache/commons/codec/language/DoubleMetaphone.java
+org/mozilla/apache/commons/codec/language/Metaphone.java
+org/mozilla/apache/commons/codec/language/RefinedSoundex.java
+org/mozilla/apache/commons/codec/language/Soundex.java
+org/mozilla/apache/commons/codec/language/SoundexUtils.java
+org/mozilla/apache/commons/codec/net/BCodec.java
+org/mozilla/apache/commons/codec/net/QCodec.java
+org/mozilla/apache/commons/codec/net/QuotedPrintableCodec.java
+org/mozilla/apache/commons/codec/net/RFC1522Codec.java
+org/mozilla/apache/commons/codec/net/URLCodec.java
+org/mozilla/apache/commons/codec/net/Utils.java
+org/mozilla/apache/commons/codec/StringDecoder.java
+org/mozilla/apache/commons/codec/StringEncoder.java
+org/mozilla/apache/commons/codec/StringEncoderComparator.java
new file mode 100644
--- /dev/null
+++ b/mobile/android/thirdparty/README
@@ -0,0 +1,3 @@
+This directory contains the source code of Java libraries used by
+Mozilla Fennec (Firefox for Android) but developed by third-party
+organizations.
rename from mobile/android/base/httpclientandroidlib/ConnectionClosedException.java
rename to mobile/android/thirdparty/ch/boye/httpclientandroidlib/ConnectionClosedException.java
rename from mobile/android/base/httpclientandroidlib/ConnectionReuseStrategy.java
rename to mobile/android/thirdparty/ch/boye/httpclientandroidlib/ConnectionReuseStrategy.java
rename from mobile/android/base/httpclientandroidlib/FormattedHeader.java
rename to mobile/android/thirdparty/ch/boye/httpclientandroidlib/FormattedHeader.java
rename from mobile/android/base/httpclientandroidlib/Header.java
rename to mobile/android/thirdparty/ch/boye/httpclientandroidlib/Header.java
rename from mobile/android/base/httpclientandroidlib/HeaderElement.java
rename to mobile/android/thirdparty/ch/boye/httpclientandroidlib/HeaderElement.java
rename from mobile/android/base/httpclientandroidlib/HeaderElementIterator.java
rename to mobile/android/thirdparty/ch/boye/httpclientandroidlib/HeaderElementIterator.java
rename from mobile/android/base/httpclientandroidlib/HeaderIterator.java
rename to mobile/android/thirdparty/ch/boye/httpclientandroidlib/HeaderIterator.java
rename from mobile/android/base/httpclientandroidlib/HttpClientConnection.java
rename to mobile/android/thirdparty/ch/boye/httpclientandroid