diff options
-rw-r--r-- | Android.mk | 2 | ||||
-rw-r--r-- | base/string_split.cc | 10 | ||||
-rw-r--r-- | base/string_util.h | 4 | ||||
-rw-r--r-- | build/build_config.h | 10 | ||||
-rw-r--r-- | chrome/browser/autofill/autofill_download.cc | 5 | ||||
-rw-r--r-- | chrome/browser/net/sqlite_persistent_cookie_store.cc | 55 | ||||
-rw-r--r-- | net/base/dns_util.cc | 6 | ||||
-rw-r--r-- | net/base/escape.h | 3 | ||||
-rw-r--r-- | net/socket/ssl_client_socket_openssl.cc | 10 | ||||
-rw-r--r-- | net/url_request/url_request.cc | 6 | ||||
-rw-r--r-- | ui/base/ui_export.h | 29 | ||||
-rw-r--r-- | ui/gfx/point.cc | 56 | ||||
-rw-r--r-- | ui/gfx/point.h | 107 |
13 files changed, 254 insertions, 49 deletions
@@ -352,6 +352,8 @@ LOCAL_SRC_FILES += \ sdch/open-vcdiff/src/vcdecoder.cc \ sdch/open-vcdiff/src/vcdiffengine.cc \ sdch/open-vcdiff/src/vcencoder.cc \ + \ + ui/gfx/point.cc \ # AutoFill++ source files. LOCAL_SRC_FILES += \ diff --git a/base/string_split.cc b/base/string_split.cc index 44b5d06..9af0bbc 100644 --- a/base/string_split.cc +++ b/base/string_split.cc @@ -53,7 +53,10 @@ void SplitString(const string16& str, void SplitString(const std::string& str, char c, std::vector<std::string>* r) { - DCHECK(c >= 0 && c < 0x7F); +#if CHAR_MIN < 0 + DCHECK(c >= 0); +#endif + DCHECK(c < 0x7F); SplitStringT(str, c, true, r); } @@ -164,7 +167,10 @@ void SplitStringDontTrim(const std::string& str, char c, std::vector<std::string>* r) { DCHECK(IsStringUTF8(str)); - DCHECK(c >= 0 && c < 0x7F); +#if CHAR_MIN < 0 + DCHECK(c >= 0); +#endif + DCHECK(c < 0x7F); SplitStringT(str, c, false, r); } diff --git a/base/string_util.h b/base/string_util.h index 81d31d3..b6a1c0d 100644 --- a/base/string_util.h +++ b/base/string_util.h @@ -172,8 +172,8 @@ BASE_API const std::string& EmptyString(); BASE_API const std::wstring& EmptyWString(); BASE_API const string16& EmptyString16(); -extern const wchar_t kWhitespaceWide[]; -extern const char16 kWhitespaceUTF16[]; +BASE_API extern const wchar_t kWhitespaceWide[]; +BASE_API extern const char16 kWhitespaceUTF16[]; extern const char kWhitespaceASCII[]; extern const char kUtf8ByteOrderMark[]; diff --git a/build/build_config.h b/build/build_config.h index df16071..cedac01 100644 --- a/build/build_config.h +++ b/build/build_config.h @@ -54,6 +54,7 @@ #define USE_OPENSSL 1 #define USE_SYSTEM_ZLIB 1 #define USE_SYSTEM_SQLITE 1 +#define OS_ANDROID 1 #endif #if !defined(USE_OPENSSL) @@ -145,4 +146,13 @@ //define CROS_FONTS_USING_BCI #endif +#if defined(OS_ANDROID) +// The compiler thinks std::string::const_iterator and "const char*" are +// equivalent types. +#define STD_STRING_ITERATOR_IS_CHAR_POINTER +// The compiler thinks base::string16::const_iterator and "char16*" are +// equivalent types. +#define BASE_STRING16_ITERATOR_IS_CHAR16_POINTER +#endif + #endif // BUILD_BUILD_CONFIG_H_ diff --git a/chrome/browser/autofill/autofill_download.cc b/chrome/browser/autofill/autofill_download.cc index 295aef0..e9f49b3 100644 --- a/chrome/browser/autofill/autofill_download.cc +++ b/chrome/browser/autofill/autofill_download.cc @@ -30,6 +30,9 @@ #define AUTO_FILL_UPLOAD_SERVER_REQUEST_URL \ "http://toolbarqueries.clients.google.com:80/tbproxy/af/upload" #define AUTO_FILL_QUERY_SERVER_NAME_START_IN_HEADER "GFE/" +#ifdef ANDROID +#define ANDROID_AUTOFILL_CLIENT_PARAM "?client=AndroidBrowser" +#endif namespace { const size_t kMaxFormCacheSize = 16; @@ -225,6 +228,8 @@ bool AutofillDownloadManager::StartRequest( request_url = android::AutofillRequestUrl::GetQueryUrl(); if (request_url.empty()) return false; + request_url += ANDROID_AUTOFILL_CLIENT_PARAM; + } #endif diff --git a/chrome/browser/net/sqlite_persistent_cookie_store.cc b/chrome/browser/net/sqlite_persistent_cookie_store.cc index 57f646e..525b2ad 100644 --- a/chrome/browser/net/sqlite_persistent_cookie_store.cc +++ b/chrome/browser/net/sqlite_persistent_cookie_store.cc @@ -31,33 +31,17 @@ #ifdef ANDROID namespace { +class DbThread : public base::Thread { + public: + DbThread() : base::Thread("android-db") { + bool started = Start(); + CHECK(started); + } +}; + // This class is used by CookieMonster, which is threadsafe, so this class must // be threadsafe too. -base::LazyInstance<base::Lock> db_thread_lock(base::LINKER_INITIALIZED); - -base::Thread* getDbThread() { - base::AutoLock lock(*db_thread_lock.Pointer()); - - // FIXME: We should probably be using LazyInstance here. - static base::Thread* db_thread = NULL; - - if (db_thread && db_thread->IsRunning()) - return db_thread; - - if (!db_thread) - db_thread = new base::Thread("db"); - - if (!db_thread) - return NULL; - - base::Thread::Options options; - options.message_loop_type = MessageLoop::TYPE_DEFAULT; - if (!db_thread->StartWithOptions(options)) { - delete db_thread; - db_thread = NULL; - } - return db_thread; -} +base::LazyInstance<DbThread> g_db_thread(base::LINKER_INITIALIZED); } // namespace #endif @@ -409,9 +393,7 @@ void SQLitePersistentCookieStore::Backend::BatchOperation( } #ifdef ANDROID - if (!getDbThread()) - return; - MessageLoop* loop = getDbThread()->message_loop(); + MessageLoop* loop = g_db_thread.Get().message_loop(); #endif if (num_pending == 1) { @@ -552,15 +534,9 @@ void SQLitePersistentCookieStore::Backend::Commit() { void SQLitePersistentCookieStore::Backend::Flush(Task* completion_task) { #if defined(ANDROID) - if (!getDbThread()) { - if (completion_task) - MessageLoop::current()->PostTask(FROM_HERE, completion_task); - return; - } - - MessageLoop* loop = getDbThread()->message_loop(); - loop->PostTask(FROM_HERE, NewRunnableMethod( - this, &Backend::Commit, completion_task)); + MessageLoop* loop = g_db_thread.Get().message_loop(); + loop->PostTask(FROM_HERE, NewRunnableMethod( + this, &Backend::Commit, completion_task)); #else DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::DB)); BrowserThread::PostTask( @@ -583,10 +559,7 @@ void SQLitePersistentCookieStore::Backend::Close() { #endif #ifdef ANDROID - if (!getDbThread()) - return; - - MessageLoop* loop = getDbThread()->message_loop(); + MessageLoop* loop = g_db_thread.Get().message_loop(); loop->PostTask(FROM_HERE, NewRunnableMethod(this, &Backend::InternalBackgroundClose)); #else diff --git a/net/base/dns_util.cc b/net/base/dns_util.cc index d97d3d2..ea58e5d 100644 --- a/net/base/dns_util.cc +++ b/net/base/dns_util.cc @@ -60,7 +60,11 @@ std::string DNSDomainToString(const std::string& domain) { std::string ret; for (unsigned i = 0; i < domain.size() && domain[i]; i += domain[i] + 1) { - if (domain[i] < 0 || domain[i] > 63) +#if CHAR_MIN < 0 + if (domain[i] < 0) + return ""; +#endif + if (domain[i] > 63) return ""; if (i) diff --git a/net/base/escape.h b/net/base/escape.h index f4c99a3..24149c3 100644 --- a/net/base/escape.h +++ b/net/base/escape.h @@ -11,6 +11,7 @@ #include "base/basictypes.h" #include "base/string16.h" +#include "net/base/net_export.h" // Escaping -------------------------------------------------------------------- @@ -127,7 +128,7 @@ string16 UnescapeForHTML(const string16& text); // This is basically the same as encodeURIComponent in javascript. // For the string16 version, we do a conversion to charset before encoding the // string. If the charset doesn't exist, we return false. -std::string EscapeQueryParamValue(const std::string& text, bool use_plus); +NET_EXPORT std::string EscapeQueryParamValue(const std::string& text, bool use_plus); bool EscapeQueryParamValue(const string16& text, const char* codepage, bool use_plus, string16* escaped); diff --git a/net/socket/ssl_client_socket_openssl.cc b/net/socket/ssl_client_socket_openssl.cc index 588098b..30a5f48 100644 --- a/net/socket/ssl_client_socket_openssl.cc +++ b/net/socket/ssl_client_socket_openssl.cc @@ -42,8 +42,10 @@ const size_t kMaxRecvBufferSize = 4096; const int kSessionCacheTimeoutSeconds = 60 * 60; const size_t kSessionCacheMaxEntires = 1024; -// This method doesn't seemed to have made it into the OpenSSL headers. +#if OPENSSL_VERSION_NUMBER < 0x1000100fL +// This method was first included in OpenSSL 1.0.1. unsigned long SSL_CIPHER_get_id(const SSL_CIPHER* cipher) { return cipher->id; } +#endif // Used for encoding the |connection_status| field of an SSLInfo object. int EncodeSSLConnectionStatus(int cipher_suite, @@ -445,6 +447,12 @@ bool SSLClientSocketOpenSSL::Init() { options.ConfigureFlag(SSL_OP_NO_SSLv2, true); options.ConfigureFlag(SSL_OP_NO_SSLv3, !ssl_config_.ssl3_enabled); options.ConfigureFlag(SSL_OP_NO_TLSv1, !ssl_config_.tls1_enabled); +#ifdef SSL_OP_NO_TLSv1_1 + options.ConfigureFlag(SSL_OP_NO_TLSv1_1, true); +#endif +#ifdef SSL_OP_NO_TLSv1_2 + options.ConfigureFlag(SSL_OP_NO_TLSv1_2, true); +#endif #if defined(SSL_OP_NO_COMPRESSION) // If TLS was disabled also disable compression, to provide maximum site diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc index 007c7af..8fe7b43 100644 --- a/net/url_request/url_request.cc +++ b/net/url_request/url_request.cc @@ -221,7 +221,11 @@ void URLRequest::SetExtraRequestHeaderByName(const string& name, const string& value, bool overwrite) { DCHECK(!is_pending_); - NOTREACHED() << "implement me!"; + if (overwrite) { + extra_request_headers_.SetHeader(name, value); + } else { + extra_request_headers_.SetHeaderIfMissing(name, value); + } } void URLRequest::SetExtraRequestHeaders( diff --git a/ui/base/ui_export.h b/ui/base/ui_export.h new file mode 100644 index 0000000..c54de1f --- /dev/null +++ b/ui/base/ui_export.h @@ -0,0 +1,29 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_UI_EXPORT_H_ +#define UI_UI_EXPORT_H_ +#pragma once + +// Defines UI_EXPORT so that functionality implemented by the UI module can be +// exported to consumers. + +#if defined(COMPONENT_BUILD) +#if defined(WIN32) + +#if defined(UI_IMPLEMENTATION) +#define UI_EXPORT __declspec(dllexport) +#else +#define UI_EXPORT __declspec(dllimport) +#endif // defined(UI_IMPLEMENTATION) + +#else // defined(WIN32) +#define UI_EXPORT __attribute__((visibility("default"))) +#endif + +#else // defined(COMPONENT_BUILD) +#define UI_EXPORT +#endif + +#endif // UI_UI_EXPORT_H_ diff --git a/ui/gfx/point.cc b/ui/gfx/point.cc new file mode 100644 index 0000000..ba9ced7 --- /dev/null +++ b/ui/gfx/point.cc @@ -0,0 +1,56 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/gfx/point.h" + +#if defined(OS_WIN) +#include <windows.h> +#endif + +#include "base/stringprintf.h" + +namespace gfx { + +Point::Point() : x_(0), y_(0) { +} + +Point::Point(int x, int y) : x_(x), y_(y) { +} + +#if defined(OS_WIN) +Point::Point(DWORD point) { + POINTS points = MAKEPOINTS(point); + x_ = points.x; + y_ = points.y; +} + +Point::Point(const POINT& point) : x_(point.x), y_(point.y) { +} + +Point& Point::operator=(const POINT& point) { + x_ = point.x; + y_ = point.y; + return *this; +} + +POINT Point::ToPOINT() const { + POINT p; + p.x = x_; + p.y = y_; + return p; +} +#elif defined(OS_MACOSX) +Point::Point(const CGPoint& point) : x_(point.x), y_(point.y) { +} + +CGPoint Point::ToCGPoint() const { + return CGPointMake(x_, y_); +} +#endif + +std::string Point::ToString() const { + return base::StringPrintf("%d,%d", x_, y_); +} + +} // namespace gfx diff --git a/ui/gfx/point.h b/ui/gfx/point.h new file mode 100644 index 0000000..fe39e3b --- /dev/null +++ b/ui/gfx/point.h @@ -0,0 +1,107 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_GFX_POINT_H_ +#define UI_GFX_POINT_H_ +#pragma once + +#include <string> + +#include "build/build_config.h" +#include "ui/base/ui_export.h" + +#if defined(OS_WIN) +typedef unsigned long DWORD; +typedef struct tagPOINT POINT; +#elif defined(OS_MACOSX) +#include <ApplicationServices/ApplicationServices.h> +#endif + +namespace gfx { + +// A point has an x and y coordinate. +class UI_EXPORT Point { + public: + Point(); + Point(int x, int y); +#if defined(OS_WIN) + // |point| is a DWORD value that contains a coordinate. The x-coordinate is + // the low-order short and the y-coordinate is the high-order short. This + // value is commonly acquired from GetMessagePos/GetCursorPos. + explicit Point(DWORD point); + explicit Point(const POINT& point); + Point& operator=(const POINT& point); +#elif defined(OS_MACOSX) + explicit Point(const CGPoint& point); +#endif + + ~Point() {} + + int x() const { return x_; } + int y() const { return y_; } + + void SetPoint(int x, int y) { + x_ = x; + y_ = y; + } + + void set_x(int x) { x_ = x; } + void set_y(int y) { y_ = y; } + + void Offset(int delta_x, int delta_y) { + x_ += delta_x; + y_ += delta_y; + } + + Point Add(const Point& other) const{ + Point copy = *this; + copy.Offset(other.x_, other.y_); + return copy; + } + + Point Subtract(const Point& other) const { + Point copy = *this; + copy.Offset(-other.x_, -other.y_); + return copy; + } + + Point Middle(const Point& other) const { + return Point((x_ + other.x_) / 2, (y_ + other.y_) / 2); + } + + bool operator==(const Point& rhs) const { + return x_ == rhs.x_ && y_ == rhs.y_; + } + + bool operator!=(const Point& rhs) const { + return !(*this == rhs); + } + + // A point is less than another point if its y-value is closer + // to the origin. If the y-values are the same, then point with + // the x-value closer to the origin is considered less than the + // other. + // This comparison is required to use Points in sets, or sorted + // vectors. + bool operator<(const Point& rhs) const { + return (y_ == rhs.y_) ? (x_ < rhs.x_) : (y_ < rhs.y_); + } + +#if defined(OS_WIN) + POINT ToPOINT() const; +#elif defined(OS_MACOSX) + CGPoint ToCGPoint() const; +#endif + + // Returns a string representation of point. + std::string ToString() const; + + private: + int x_; + int y_; +}; + +} // namespace gfx + +#endif // UI_GFX_POINT_H_ |