Merge cedar into mozilla-central

This commit is contained in:
Ehsan Akhgari 2011-03-31 14:11:37 -04:00
Родитель d81092ad84 1a910b7e61
Коммит ccf9ef9334
203 изменённых файлов: 2794 добавлений и 1060 удалений

Просмотреть файл

@ -656,10 +656,10 @@ PrivateBrowsingService.prototype = {
"AND state NOT IN (?2, ?3, ?4)" "AND state NOT IN (?2, ?3, ?4)"
); );
let pattern = stmt.escapeStringForLIKE(aDomain, "/"); let pattern = stmt.escapeStringForLIKE(aDomain, "/");
stmt.bindStringParameter(0, "%" + pattern + "%"); stmt.bindByIndex(0, "%" + pattern + "%");
stmt.bindInt32Parameter(1, Ci.nsIDownloadManager.DOWNLOAD_DOWNLOADING); stmt.bindByIndex(1, Ci.nsIDownloadManager.DOWNLOAD_DOWNLOADING);
stmt.bindInt32Parameter(2, Ci.nsIDownloadManager.DOWNLOAD_PAUSED); stmt.bindByIndex(2, Ci.nsIDownloadManager.DOWNLOAD_PAUSED);
stmt.bindInt32Parameter(3, Ci.nsIDownloadManager.DOWNLOAD_QUEUED); stmt.bindByIndex(3, Ci.nsIDownloadManager.DOWNLOAD_QUEUED);
try { try {
stmt.execute(); stmt.execute();
} }
@ -719,7 +719,7 @@ PrivateBrowsingService.prototype = {
"WHERE name LIKE ?1 ESCAPE '/'" "WHERE name LIKE ?1 ESCAPE '/'"
); );
let pattern = stmt.escapeStringForLIKE(aDomain, "/"); let pattern = stmt.escapeStringForLIKE(aDomain, "/");
stmt.bindStringParameter(0, "%" + pattern); stmt.bindByIndex(0, "%" + pattern);
try { try {
while (stmt.executeStep()) while (stmt.executeStep())
if (stmt.getString(0).hasRootDomain(aDomain)) if (stmt.getString(0).hasRootDomain(aDomain))

Просмотреть файл

@ -9,7 +9,7 @@
!define AppName "Firefox" !define AppName "Firefox"
!define AppVersion "@APP_VERSION@" !define AppVersion "@APP_VERSION@"
#ifdef HAVE_64BIT_OS #ifdef HAVE_64BIT_OS
// differentiate 64-bit builds, we do the same in widget. ; differentiate 64-bit builds, we do the same in widget.
!define AppUserModelID "${AppVendor}.${AppName}.${AppVersion}.Win64" !define AppUserModelID "${AppVendor}.${AppName}.${AppVersion}.Win64"
#else #else
!define AppUserModelID "${AppVendor}.${AppName}.${AppVersion}" !define AppUserModelID "${AppVendor}.${AppName}.${AppVersion}"

Просмотреть файл

@ -441,6 +441,7 @@ PBBUILD_BIN = @PBBUILD@
SDP = @SDP@ SDP = @SDP@
NSINSTALL_BIN = @NSINSTALL_BIN@ NSINSTALL_BIN = @NSINSTALL_BIN@
WGET = @WGET@ WGET = @WGET@
RPMBUILD = @RPMBUILD@
ifdef MOZ_NATIVE_JPEG ifdef MOZ_NATIVE_JPEG
JPEG_CFLAGS = @JPEG_CFLAGS@ JPEG_CFLAGS = @JPEG_CFLAGS@

0
config/find_OOM_errors.py Executable file → Normal file
Просмотреть файл

Просмотреть файл

@ -130,7 +130,7 @@ GCONF_VERSION=1.2.1
GIO_VERSION=2.0 GIO_VERSION=2.0
STARTUP_NOTIFICATION_VERSION=0.8 STARTUP_NOTIFICATION_VERSION=0.8
DBUS_VERSION=0.60 DBUS_VERSION=0.60
SQLITE_VERSION=3.7.4 SQLITE_VERSION=3.7.5
LIBNOTIFY_VERSION=0.4 LIBNOTIFY_VERSION=0.4
MSMANIFEST_TOOL= MSMANIFEST_TOOL=
@ -1011,6 +1011,9 @@ if test -z "$XARGS" -o "$XARGS" = ":"; then
AC_MSG_ERROR([xargs not found in \$PATH .]) AC_MSG_ERROR([xargs not found in \$PATH .])
fi fi
MOZ_PATH_PROG(RPMBUILD, rpmbuild, :)
AC_SUBST(RPMBUILD)
if test "$COMPILE_ENVIRONMENT"; then if test "$COMPILE_ENVIRONMENT"; then
dnl ======================================================== dnl ========================================================

Просмотреть файл

@ -560,6 +560,7 @@ GK_ATOM(member, "member")
GK_ATOM(menu, "menu") GK_ATOM(menu, "menu")
GK_ATOM(menubar, "menubar") GK_ATOM(menubar, "menubar")
GK_ATOM(menubutton, "menubutton") GK_ATOM(menubutton, "menubutton")
GK_ATOM(menuButton, "menu-button")
GK_ATOM(menugenerated, "menugenerated") GK_ATOM(menugenerated, "menugenerated")
GK_ATOM(menuitem, "menuitem") GK_ATOM(menuitem, "menuitem")
GK_ATOM(menulist, "menulist") GK_ATOM(menulist, "menulist")
@ -915,6 +916,7 @@ GK_ATOM(span, "span")
GK_ATOM(spellcheck, "spellcheck") GK_ATOM(spellcheck, "spellcheck")
GK_ATOM(spinner, "spinner") GK_ATOM(spinner, "spinner")
GK_ATOM(split, "split") GK_ATOM(split, "split")
GK_ATOM(splitmenu, "splitmenu")
GK_ATOM(splitter, "splitter") GK_ATOM(splitter, "splitter")
GK_ATOM(spring, "spring") GK_ATOM(spring, "spring")
GK_ATOM(src, "src") GK_ATOM(src, "src")

Просмотреть файл

@ -375,24 +375,24 @@ nsXULTemplateQueryProcessorStorage::CompileQuery(nsIXULTemplateBuilder* aBuilder
case 1: case 1:
typeError = PR_sscanf(NS_ConvertUTF16toUTF8(value).get(),"%d",&valInt32); typeError = PR_sscanf(NS_ConvertUTF16toUTF8(value).get(),"%d",&valInt32);
if (typeError > 0) if (typeError > 0)
rv = statement->BindInt32Parameter(index, valInt32); rv = statement->BindInt32ByIndex(index, valInt32);
break; break;
case 2: case 2:
typeError = PR_sscanf(NS_ConvertUTF16toUTF8(value).get(),"%lld",&valInt64); typeError = PR_sscanf(NS_ConvertUTF16toUTF8(value).get(),"%lld",&valInt64);
if (typeError > 0) if (typeError > 0)
rv = statement->BindInt64Parameter(index, valInt64); rv = statement->BindInt64ByIndex(index, valInt64);
break; break;
case 3: case 3:
rv = statement->BindNullParameter(index); rv = statement->BindNullByIndex(index);
break; break;
case 4: case 4:
typeError = PR_sscanf(NS_ConvertUTF16toUTF8(value).get(),"%lf",&valFloat); typeError = PR_sscanf(NS_ConvertUTF16toUTF8(value).get(),"%lf",&valFloat);
if (typeError > 0) if (typeError > 0)
rv = statement->BindDoubleParameter(index, valFloat); rv = statement->BindDoubleByIndex(index, valFloat);
break; break;
case 5: case 5:
case nsIContent::ATTR_MISSING: case nsIContent::ATTR_MISSING:
rv = statement->BindStringParameter(index, value); rv = statement->BindStringByIndex(index, value);
break; break;
default: default:
typeError = 0; typeError = 0;

Просмотреть файл

@ -1,6 +1,6 @@
This is sqlite 3.7.4 This is sqlite 3.7.5
-- Paul OShannessy <paul@oshannessy.com>, 01/2011 -- Shawn Wilsher <me@shawnwilsher.com>, 03/2011
See http://www.sqlite.org/ for more info. See http://www.sqlite.org/ for more info.

Просмотреть файл

@ -84,6 +84,7 @@ EXPORTS
sqlite3_data_count sqlite3_data_count
sqlite3_db_handle sqlite3_db_handle
sqlite3_db_mutex sqlite3_db_mutex
sqlite3_db_status
sqlite3_declare_vtab sqlite3_declare_vtab
sqlite3_enable_load_extension sqlite3_enable_load_extension
sqlite3_enable_shared_cache sqlite3_enable_shared_cache

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -107,9 +107,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()]. ** [sqlite_version()] and [sqlite_source_id()].
*/ */
#define SQLITE_VERSION "3.7.4" #define SQLITE_VERSION "3.7.5"
#define SQLITE_VERSION_NUMBER 3007004 #define SQLITE_VERSION_NUMBER 3007005
#define SQLITE_SOURCE_ID "2010-12-07 20:14:09 a586a4deeb25330037a49df295b36aaf624d0f45" #define SQLITE_SOURCE_ID "2011-01-28 17:03:50 ed759d5a9edb3bba5f48f243df47be29e3fe8cd7"
/* /*
** CAPI3REF: Run-Time Library Version Numbers ** CAPI3REF: Run-Time Library Version Numbers
@ -390,7 +390,7 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/ #define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/
#define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */ #define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */
#define SQLITE_CORRUPT 11 /* The database disk image is malformed */ #define SQLITE_CORRUPT 11 /* The database disk image is malformed */
#define SQLITE_NOTFOUND 12 /* NOT USED. Table or record not found */ #define SQLITE_NOTFOUND 12 /* Unknown opcode in sqlite3_file_control() */
#define SQLITE_FULL 13 /* Insertion failed because database is full */ #define SQLITE_FULL 13 /* Insertion failed because database is full */
#define SQLITE_CANTOPEN 14 /* Unable to open the database file */ #define SQLITE_CANTOPEN 14 /* Unable to open the database file */
#define SQLITE_PROTOCOL 15 /* Database lock protocol error */ #define SQLITE_PROTOCOL 15 /* Database lock protocol error */
@ -622,7 +622,9 @@ struct sqlite3_file {
** core reserves all opcodes less than 100 for its own use. ** core reserves all opcodes less than 100 for its own use.
** A [SQLITE_FCNTL_LOCKSTATE | list of opcodes] less than 100 is available. ** A [SQLITE_FCNTL_LOCKSTATE | list of opcodes] less than 100 is available.
** Applications that define a custom xFileControl method should use opcodes ** Applications that define a custom xFileControl method should use opcodes
** greater than 100 to avoid conflicts. ** greater than 100 to avoid conflicts. VFS implementations should
** return [SQLITE_NOTFOUND] for file control opcodes that they do not
** recognize.
** **
** The xSectorSize() method returns the sector size of the ** The xSectorSize() method returns the sector size of the
** device that underlies the file. The sector size is the ** device that underlies the file. The sector size is the
@ -715,6 +717,21 @@ struct sqlite3_io_methods {
** for the nominated database. Allocating database file space in large ** for the nominated database. Allocating database file space in large
** chunks (say 1MB at a time), may reduce file-system fragmentation and ** chunks (say 1MB at a time), may reduce file-system fragmentation and
** improve performance on some systems. ** improve performance on some systems.
**
** The [SQLITE_FCNTL_FILE_POINTER] opcode is used to obtain a pointer
** to the [sqlite3_file] object associated with a particular database
** connection. See the [sqlite3_file_control()] documentation for
** additional information.
**
** ^(The [SQLITE_FCNTL_SYNC_OMITTED] opcode is generated internally by
** SQLite and sent to all VFSes in place of a call to the xSync method
** when the database connection has [PRAGMA synchronous] set to OFF.)^
** Some specialized VFSes need this signal in order to operate correctly
** when [PRAGMA synchronous | PRAGMA synchronous=OFF] is set, but most
** VFSes do not need this signal and should silently ignore this opcode.
** Applications should not call [sqlite3_file_control()] with this
** opcode as doing so may disrupt the operation of the specilized VFSes
** that do require it.
*/ */
#define SQLITE_FCNTL_LOCKSTATE 1 #define SQLITE_FCNTL_LOCKSTATE 1
#define SQLITE_GET_LOCKPROXYFILE 2 #define SQLITE_GET_LOCKPROXYFILE 2
@ -723,6 +740,7 @@ struct sqlite3_io_methods {
#define SQLITE_FCNTL_SIZE_HINT 5 #define SQLITE_FCNTL_SIZE_HINT 5
#define SQLITE_FCNTL_CHUNK_SIZE 6 #define SQLITE_FCNTL_CHUNK_SIZE 6
#define SQLITE_FCNTL_FILE_POINTER 7 #define SQLITE_FCNTL_FILE_POINTER 7
#define SQLITE_FCNTL_SYNC_OMITTED 8
/* /*
@ -1842,7 +1860,7 @@ SQLITE_API void sqlite3_free_table(char **result);
** NULL pointer if [sqlite3_malloc()] is unable to allocate enough ** NULL pointer if [sqlite3_malloc()] is unable to allocate enough
** memory to hold the resulting string. ** memory to hold the resulting string.
** **
** ^(In sqlite3_snprintf() routine is similar to "snprintf()" from ** ^(The sqlite3_snprintf() routine is similar to "snprintf()" from
** the standard C library. The result is written into the ** the standard C library. The result is written into the
** buffer supplied as the second parameter whose size is given by ** buffer supplied as the second parameter whose size is given by
** the first parameter. Note that the order of the ** the first parameter. Note that the order of the
@ -1861,6 +1879,8 @@ SQLITE_API void sqlite3_free_table(char **result);
** the zero terminator. So the longest string that can be completely ** the zero terminator. So the longest string that can be completely
** written will be n-1 characters. ** written will be n-1 characters.
** **
** ^The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf().
**
** These routines all implement some additional formatting ** These routines all implement some additional formatting
** options that are useful for constructing SQL statements. ** options that are useful for constructing SQL statements.
** All of the usual printf() formatting options apply. In addition, there ** All of the usual printf() formatting options apply. In addition, there
@ -1924,6 +1944,7 @@ SQLITE_API void sqlite3_free_table(char **result);
SQLITE_API char *sqlite3_mprintf(const char*,...); SQLITE_API char *sqlite3_mprintf(const char*,...);
SQLITE_API char *sqlite3_vmprintf(const char*, va_list); SQLITE_API char *sqlite3_vmprintf(const char*, va_list);
SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...); SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...);
SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
/* /*
** CAPI3REF: Memory Allocation Subsystem ** CAPI3REF: Memory Allocation Subsystem
@ -2301,7 +2322,7 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
** case the database must already exist, otherwise an error is returned.</dd>)^ ** case the database must already exist, otherwise an error is returned.</dd>)^
** **
** ^(<dt>[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]</dt> ** ^(<dt>[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]</dt>
** <dd>The database is opened for reading and writing, and is creates it if ** <dd>The database is opened for reading and writing, and is created if
** it does not already exist. This is the behavior that is always used for ** it does not already exist. This is the behavior that is always used for
** sqlite3_open() and sqlite3_open16().</dd>)^ ** sqlite3_open() and sqlite3_open16().</dd>)^
** </dl> ** </dl>
@ -2650,14 +2671,31 @@ SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt);
/* /*
** CAPI3REF: Determine If An SQL Statement Writes The Database ** CAPI3REF: Determine If An SQL Statement Writes The Database
** **
** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if ** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if
** the [prepared statement] X is [SELECT] statement and false (zero) if ** and only if the [prepared statement] X makes no direct changes to
** X is an [INSERT], [UPDATE], [DELETE], CREATE, DROP, [ANALYZE], ** the content of the database file.
** [ALTER], or [REINDEX] statement. **
** If X is a NULL pointer or any other kind of statement, including but ** Note that [application-defined SQL functions] or
** not limited to [ATTACH], [DETACH], [COMMIT], [ROLLBACK], [RELEASE], ** [virtual tables] might change the database indirectly as a side effect.
** [SAVEPOINT], [PRAGMA], or [VACUUM] the result of sqlite3_stmt_readonly(X) is ** ^(For example, if an application defines a function "eval()" that
** undefined. ** calls [sqlite3_exec()], then the following SQL statement would
** change the database file through side-effects:
**
** <blockquote><pre>
** SELECT eval('DELETE FROM t1') FROM t2;
** </pre></blockquote>
**
** But because the [SELECT] statement does not change the database file
** directly, sqlite3_stmt_readonly() would still return true.)^
**
** ^Transaction control statements such as [BEGIN], [COMMIT], [ROLLBACK],
** [SAVEPOINT], and [RELEASE] cause sqlite3_stmt_readonly() to return true,
** since the statements themselves do not actually modify the database but
** rather they control the timing of when other statements modify the
** database. ^The [ATTACH] and [DETACH] statements also cause
** sqlite3_stmt_readonly() to return true since, while those statements
** change the configuration of a database connection, they do not make
** changes to the content of the database files on disk.
*/ */
SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt); SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
@ -3051,13 +3089,17 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
** be the case that the same database connection is being used by two or ** be the case that the same database connection is being used by two or
** more threads at the same moment in time. ** more threads at the same moment in time.
** **
** For all versions of SQLite up to and including 3.6.23.1, it was required ** For all versions of SQLite up to and including 3.6.23.1, a call to
** after sqlite3_step() returned anything other than [SQLITE_ROW] that ** [sqlite3_reset()] was required after sqlite3_step() returned anything
** [sqlite3_reset()] be called before any subsequent invocation of ** other than [SQLITE_ROW] before any subsequent invocation of
** sqlite3_step(). Failure to invoke [sqlite3_reset()] in this way would ** sqlite3_step(). Failure to reset the prepared statement using
** result in an [SQLITE_MISUSE] return from sqlite3_step(). But after ** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from
** version 3.6.23.1, sqlite3_step() began calling [sqlite3_reset()] ** sqlite3_step(). But after version 3.6.23.1, sqlite3_step() began
** automatically in this circumstance rather than returning [SQLITE_MISUSE]. ** calling [sqlite3_reset()] automatically in this circumstance rather
** than returning [SQLITE_MISUSE]. This is not considered a compatibility
** break because any application that ever receives an SQLITE_MISUSE error
** is broken by definition. The [SQLITE_OMIT_AUTORESET] compile-time option
** can be used to restore the legacy behavior.
** **
** <b>Goofy Interface Alert:</b> In the legacy interface, the sqlite3_step() ** <b>Goofy Interface Alert:</b> In the legacy interface, the sqlite3_step()
** API always returns a generic error code, [SQLITE_ERROR], following any ** API always returns a generic error code, [SQLITE_ERROR], following any
@ -3394,7 +3436,7 @@ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
** ^(The fifth parameter is an arbitrary pointer. The implementation of the ** ^(The fifth parameter is an arbitrary pointer. The implementation of the
** function can gain access to this pointer using [sqlite3_user_data()].)^ ** function can gain access to this pointer using [sqlite3_user_data()].)^
** **
** ^The seventh, eighth and ninth parameters, xFunc, xStep and xFinal, are ** ^The sixth, seventh and eighth parameters, xFunc, xStep and xFinal, are
** pointers to C-language functions that implement the SQL function or ** pointers to C-language functions that implement the SQL function or
** aggregate. ^A scalar SQL function requires an implementation of the xFunc ** aggregate. ^A scalar SQL function requires an implementation of the xFunc
** callback only; NULL pointers must be passed as the xStep and xFinal ** callback only; NULL pointers must be passed as the xStep and xFinal
@ -3403,7 +3445,7 @@ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
** SQL function or aggregate, pass NULL poiners for all three function ** SQL function or aggregate, pass NULL poiners for all three function
** callbacks. ** callbacks.
** **
** ^(If the tenth parameter to sqlite3_create_function_v2() is not NULL, ** ^(If the ninth parameter to sqlite3_create_function_v2() is not NULL,
** then it is destructor for the application data pointer. ** then it is destructor for the application data pointer.
** The destructor is invoked when the function is deleted, either by being ** The destructor is invoked when the function is deleted, either by being
** overloaded or when the database connection closes.)^ ** overloaded or when the database connection closes.)^
@ -3507,7 +3549,7 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** The xFunc (for scalar functions) or xStep (for aggregates) parameters ** The xFunc (for scalar functions) or xStep (for aggregates) parameters
** to [sqlite3_create_function()] and [sqlite3_create_function16()] ** to [sqlite3_create_function()] and [sqlite3_create_function16()]
** define callbacks that implement the SQL functions and aggregates. ** define callbacks that implement the SQL functions and aggregates.
** The 4th parameter to these callbacks is an array of pointers to ** The 3rd parameter to these callbacks is an array of pointers to
** [protected sqlite3_value] objects. There is one [sqlite3_value] object for ** [protected sqlite3_value] objects. There is one [sqlite3_value] object for
** each parameter to the SQL function. These routines are used to ** each parameter to the SQL function. These routines are used to
** extract values from the [sqlite3_value] objects. ** extract values from the [sqlite3_value] objects.
@ -5235,7 +5277,8 @@ SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
#define SQLITE_MUTEX_STATIC_OPEN 4 /* sqlite3BtreeOpen() */ #define SQLITE_MUTEX_STATIC_OPEN 4 /* sqlite3BtreeOpen() */
#define SQLITE_MUTEX_STATIC_PRNG 5 /* sqlite3_random() */ #define SQLITE_MUTEX_STATIC_PRNG 5 /* sqlite3_random() */
#define SQLITE_MUTEX_STATIC_LRU 6 /* lru page list */ #define SQLITE_MUTEX_STATIC_LRU 6 /* lru page list */
#define SQLITE_MUTEX_STATIC_LRU2 7 /* lru page list */ #define SQLITE_MUTEX_STATIC_LRU2 7 /* NOT USED */
#define SQLITE_MUTEX_STATIC_PMEM 7 /* sqlite3PageMalloc() */
/* /*
** CAPI3REF: Retrieve the mutex for a database connection ** CAPI3REF: Retrieve the mutex for a database connection
@ -5386,7 +5429,8 @@ SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetF
** The value written into the *pCurrent parameter is undefined.</dd>)^ ** The value written into the *pCurrent parameter is undefined.</dd>)^
** **
** ^(<dt>SQLITE_STATUS_MALLOC_COUNT</dt> ** ^(<dt>SQLITE_STATUS_MALLOC_COUNT</dt>
** <dd>This parameter records the number of separate memory allocations.</dd>)^ ** <dd>This parameter records the number of separate memory allocations
** currently checked out.</dd>)^
** **
** ^(<dt>SQLITE_STATUS_PAGECACHE_USED</dt> ** ^(<dt>SQLITE_STATUS_PAGECACHE_USED</dt>
** <dd>This parameter returns the number of pages used out of the ** <dd>This parameter returns the number of pages used out of the
@ -5492,6 +5536,28 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** <dd>This parameter returns the number of lookaside memory slots currently ** <dd>This parameter returns the number of lookaside memory slots currently
** checked out.</dd>)^ ** checked out.</dd>)^
** **
** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt>
** <dd>This parameter returns the number malloc attempts that were
** satisfied using lookaside memory. Only the high-water value is meaningful;
** the current value is always zero.
** checked out.</dd>)^
**
** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</dt>
** <dd>This parameter returns the number malloc attempts that might have
** been satisfied using lookaside memory but failed due to the amount of
** memory requested being larger than the lookaside slot size.
** Only the high-water value is meaningful;
** the current value is always zero.
** checked out.</dd>)^
**
** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</dt>
** <dd>This parameter returns the number malloc attempts that might have
** been satisfied using lookaside memory but failed due to all lookaside
** memory already being in use.
** Only the high-water value is meaningful;
** the current value is always zero.
** checked out.</dd>)^
**
** ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt> ** ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt>
** <dd>This parameter returns the approximate number of of bytes of heap ** <dd>This parameter returns the approximate number of of bytes of heap
** memory used by all pager caches associated with the database connection.)^ ** memory used by all pager caches associated with the database connection.)^
@ -5514,11 +5580,14 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** </dd> ** </dd>
** </dl> ** </dl>
*/ */
#define SQLITE_DBSTATUS_LOOKASIDE_USED 0 #define SQLITE_DBSTATUS_LOOKASIDE_USED 0
#define SQLITE_DBSTATUS_CACHE_USED 1 #define SQLITE_DBSTATUS_CACHE_USED 1
#define SQLITE_DBSTATUS_SCHEMA_USED 2 #define SQLITE_DBSTATUS_SCHEMA_USED 2
#define SQLITE_DBSTATUS_STMT_USED 3 #define SQLITE_DBSTATUS_STMT_USED 3
#define SQLITE_DBSTATUS_MAX 3 /* Largest defined DBSTATUS */ #define SQLITE_DBSTATUS_LOOKASIDE_HIT 4
#define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE 5
#define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL 6
#define SQLITE_DBSTATUS_MAX 6 /* Largest defined DBSTATUS */
/* /*
@ -5646,11 +5715,13 @@ typedef struct sqlite3_pcache sqlite3_pcache;
** first parameter, szPage, is the size in bytes of the pages that must ** first parameter, szPage, is the size in bytes of the pages that must
** be allocated by the cache. ^szPage will not be a power of two. ^szPage ** be allocated by the cache. ^szPage will not be a power of two. ^szPage
** will the page size of the database file that is to be cached plus an ** will the page size of the database file that is to be cached plus an
** increment (here called "R") of about 100 or 200. SQLite will use the ** increment (here called "R") of less than 250. SQLite will use the
** extra R bytes on each page to store metadata about the underlying ** extra R bytes on each page to store metadata about the underlying
** database page on disk. The value of R depends ** database page on disk. The value of R depends
** on the SQLite version, the target platform, and how SQLite was compiled. ** on the SQLite version, the target platform, and how SQLite was compiled.
** ^R is constant for a particular build of SQLite. ^The second argument to ** ^(R is constant for a particular build of SQLite. Except, there are two
** distinct values of R when SQLite is compiled with the proprietary
** ZIPVFS extension.)^ ^The second argument to
** xCreate(), bPurgeable, is true if the cache being created will ** xCreate(), bPurgeable, is true if the cache being created will
** be used to cache database pages of a file stored on disk, or ** be used to cache database pages of a file stored on disk, or
** false if it is used for an in-memory database. The cache implementation ** false if it is used for an in-memory database. The cache implementation
@ -5682,7 +5753,7 @@ typedef struct sqlite3_pcache sqlite3_pcache;
** If the requested page is already in the page cache, then the page cache ** If the requested page is already in the page cache, then the page cache
** implementation must return a pointer to the page buffer with its content ** implementation must return a pointer to the page buffer with its content
** intact. If the requested page is not already in the cache, then the ** intact. If the requested page is not already in the cache, then the
** behavior of the cache implementation should use the value of the createFlag ** cache implementation should use the value of the createFlag
** parameter to help it determined what action to take: ** parameter to help it determined what action to take:
** **
** <table border=1 width=85% align=center> ** <table border=1 width=85% align=center>
@ -5766,11 +5837,12 @@ typedef struct sqlite3_backup sqlite3_backup;
** **
** See Also: [Using the SQLite Online Backup API] ** See Also: [Using the SQLite Online Backup API]
** **
** ^Exclusive access is required to the destination database for the ** ^SQLite holds a write transaction open on the destination database file
** duration of the operation. ^However the source database is only ** for the duration of the backup operation.
** read-locked while it is actually being read; it is not locked ** ^The source database is read-locked only while it is being read;
** continuously for the entire backup operation. ^Thus, the backup may be ** it is not locked continuously for the entire backup operation.
** performed on a live source database without preventing other users from ** ^Thus, the backup may be performed on a live source database without
** preventing other database connections from
** reading or writing to the source database while the backup is underway. ** reading or writing to the source database while the backup is underway.
** **
** ^(To perform a backup operation: ** ^(To perform a backup operation:
@ -5797,11 +5869,11 @@ typedef struct sqlite3_backup sqlite3_backup;
** sqlite3_backup_init(D,N,S,M) identify the [database connection] ** sqlite3_backup_init(D,N,S,M) identify the [database connection]
** and database name of the source database, respectively. ** and database name of the source database, respectively.
** ^The source and destination [database connections] (parameters S and D) ** ^The source and destination [database connections] (parameters S and D)
** must be different or else sqlite3_backup_init(D,N,S,M) will file with ** must be different or else sqlite3_backup_init(D,N,S,M) will fail with
** an error. ** an error.
** **
** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is ** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
** returned and an error code and error message are store3d in the ** returned and an error code and error message are stored in the
** destination [database connection] D. ** destination [database connection] D.
** ^The error code and message for the failed call to sqlite3_backup_init() ** ^The error code and message for the failed call to sqlite3_backup_init()
** can be retrieved using the [sqlite3_errcode()], [sqlite3_errmsg()], and/or ** can be retrieved using the [sqlite3_errcode()], [sqlite3_errmsg()], and/or
@ -5818,7 +5890,7 @@ typedef struct sqlite3_backup sqlite3_backup;
** the source and destination databases specified by [sqlite3_backup] object B. ** the source and destination databases specified by [sqlite3_backup] object B.
** ^If N is negative, all remaining source pages are copied. ** ^If N is negative, all remaining source pages are copied.
** ^If sqlite3_backup_step(B,N) successfully copies N pages and there ** ^If sqlite3_backup_step(B,N) successfully copies N pages and there
** are still more pages to be copied, then the function resturns [SQLITE_OK]. ** are still more pages to be copied, then the function returns [SQLITE_OK].
** ^If sqlite3_backup_step(B,N) successfully finishes copying all pages ** ^If sqlite3_backup_step(B,N) successfully finishes copying all pages
** from source to destination, then it returns [SQLITE_DONE]. ** from source to destination, then it returns [SQLITE_DONE].
** ^If an error occurs while running sqlite3_backup_step(B,N), ** ^If an error occurs while running sqlite3_backup_step(B,N),
@ -5832,7 +5904,7 @@ typedef struct sqlite3_backup sqlite3_backup;
** <li> the destination database was opened read-only, or ** <li> the destination database was opened read-only, or
** <li> the destination database is using write-ahead-log journaling ** <li> the destination database is using write-ahead-log journaling
** and the destination and source page sizes differ, or ** and the destination and source page sizes differ, or
** <li> The destination database is an in-memory database and the ** <li> the destination database is an in-memory database and the
** destination and source page sizes differ. ** destination and source page sizes differ.
** </ol>)^ ** </ol>)^
** **
@ -6163,7 +6235,8 @@ SQLITE_API void *sqlite3_wal_hook(
** from SQL. ** from SQL.
** **
** ^Every new [database connection] defaults to having the auto-checkpoint ** ^Every new [database connection] defaults to having the auto-checkpoint
** enabled with a threshold of 1000 pages. The use of this interface ** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT]
** pages. The use of this interface
** is only necessary if the default setting is found to be suboptimal ** is only necessary if the default setting is found to be suboptimal
** for a particular application. ** for a particular application.
*/ */

Просмотреть файл

@ -50,7 +50,7 @@
* http://www.w3.org/TR/DOM-Level-2-Style * http://www.w3.org/TR/DOM-Level-2-Style
*/ */
[scriptable, uuid(abedfd52-9821-4311-b50c-7ef229b43abf)] [scriptable, uuid(6b8fda8f-94f6-4d5c-aa77-17c5270f36c7)]
interface nsIDOMCSS2Properties : nsISupports interface nsIDOMCSS2Properties : nsISupports
{ {
attribute DOMString azimuth; attribute DOMString azimuth;
@ -734,6 +734,12 @@ interface nsIDOMCSS2Properties : nsISupports
attribute DOMString backgroundSize; attribute DOMString backgroundSize;
// raises(DOMException) on setting // raises(DOMException) on setting
attribute DOMString MozTextDecorationColor;
// raises(DOMException) on setting
attribute DOMString MozTextDecorationStyle;
// raises(DOMException) on setting
attribute DOMString MozTransitionProperty; attribute DOMString MozTransitionProperty;
// raises(DOMException) on setting // raises(DOMException) on setting

Просмотреть файл

@ -46,7 +46,6 @@ MODULE = editor
GRE_MODULE = 1 GRE_MODULE = 1
XPIDLSRCS = \ XPIDLSRCS = \
nsICiter.idl \
nsIDocumentStateListener.idl \ nsIDocumentStateListener.idl \
nsIEditActionListener.idl \ nsIEditActionListener.idl \
nsIEditor.idl \ nsIEditor.idl \

Просмотреть файл

@ -1,61 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsISupports.idl"
#include "domstubs.idl"
%{C++
#include "nsString.h"
%}
/** Handle plaintext citations, as in mail quoting.
* Used by the editor but not dependant on it.
*/
[scriptable, uuid(a6cf9102-15b3-11d2-932e-00805f8add32)]
interface nsICiter : nsISupports
{
DOMString GetCiteString(in DOMString aInString);
DOMString StripCites(in DOMString aInString);
DOMString Rewrap(in DOMString aInString,
in unsigned long aWrapCol, in unsigned long aFirstLineOffset,
in boolean aRespectNewlines);
};

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -58,18 +58,7 @@ const PRUnichar cr('\r');
/** Mail citations using the Internet style: > This is a citation /** Mail citations using the Internet style: > This is a citation
*/ */
nsresult
nsInternetCiter::nsInternetCiter()
{
}
nsInternetCiter::~nsInternetCiter()
{
}
NS_IMPL_ISUPPORTS1(nsInternetCiter, nsICiter)
NS_IMETHODIMP
nsInternetCiter::GetCiteString(const nsAString& aInString, nsAString& aOutString) nsInternetCiter::GetCiteString(const nsAString& aInString, nsAString& aOutString)
{ {
aOutString.Truncate(); aOutString.Truncate();
@ -155,7 +144,7 @@ nsInternetCiter::StripCitesAndLinebreaks(const nsAString& aInString,
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsresult
nsInternetCiter::StripCites(const nsAString& aInString, nsAString& aOutString) nsInternetCiter::StripCites(const nsAString& aInString, nsAString& aOutString)
{ {
return StripCitesAndLinebreaks(aInString, aOutString, PR_FALSE, 0); return StripCitesAndLinebreaks(aInString, aOutString, PR_FALSE, 0);
@ -188,7 +177,7 @@ static inline PRBool IsSpace(PRUnichar c)
return (nsCRT::IsAsciiSpace(c) || (c == nl) || (c == cr) || (c == nbsp)); return (nsCRT::IsAsciiSpace(c) || (c == nl) || (c == cr) || (c == nbsp));
} }
NS_IMETHODIMP nsresult
nsInternetCiter::Rewrap(const nsAString& aInString, nsInternetCiter::Rewrap(const nsAString& aInString,
PRUint32 aWrapCol, PRUint32 aFirstLineOffset, PRUint32 aWrapCol, PRUint32 aFirstLineOffset,
PRBool aRespectNewlines, PRBool aRespectNewlines,

Просмотреть файл

@ -38,33 +38,25 @@
#ifndef nsInternetCiter_h__ #ifndef nsInternetCiter_h__
#define nsInternetCiter_h__ #define nsInternetCiter_h__
#include "nsICiter.h"
#include "nsString.h" #include "nsString.h"
/** Mail citations using standard Internet style. /** Mail citations using standard Internet style.
*/ */
class nsInternetCiter : public nsICiter class nsInternetCiter
{ {
public: public:
nsInternetCiter(); static nsresult GetCiteString(const nsAString & aInString, nsAString & aOutString);
virtual ~nsInternetCiter();
//Interfaces for addref and release and queryinterface
//NOTE: Use NS_DECL_ISUPPORTS_INHERITED in any class inherited from nsEditor
NS_DECL_ISUPPORTS
NS_IMETHOD GetCiteString(const nsAString & aInString, nsAString & aOutString); static nsresult StripCites(const nsAString & aInString, nsAString & aOutString);
NS_IMETHOD StripCites(const nsAString & aInString, nsAString & aOutString); static nsresult Rewrap(const nsAString & aInString,
PRUint32 aWrapCol, PRUint32 aFirstLineOffset,
NS_IMETHOD Rewrap(const nsAString & aInString, PRBool aRespectNewlines,
PRUint32 aWrapCol, PRUint32 aFirstLineOffset, nsAString & aOutString);
PRBool aRespectNewlines,
nsAString & aOutString);
protected: protected:
nsresult StripCitesAndLinebreaks(const nsAString& aInString, nsAString& aOutString, static nsresult StripCitesAndLinebreaks(const nsAString& aInString, nsAString& aOutString,
PRBool aLinebreaksToo, PRInt32* aCiteLevel); PRBool aLinebreaksToo, PRInt32* aCiteLevel);
}; };
#endif //nsInternetCiter_h__ #endif //nsInternetCiter_h__

Просмотреть файл

@ -1530,12 +1530,9 @@ nsPlaintextEditor::InsertAsQuotation(const nsAString& aQuotedText,
// Protect the edit rules object from dying // Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> kungFuDeathGrip(mRules); nsCOMPtr<nsIEditRules> kungFuDeathGrip(mRules);
// We have the text. Cite it appropriately:
nsCOMPtr<nsICiter> citer = new nsInternetCiter();
// Let the citer quote it for us: // Let the citer quote it for us:
nsString quotedStuff; nsString quotedStuff;
nsresult rv = citer->GetCiteString(aQuotedText, quotedStuff); nsresult rv = nsInternetCiter::GetCiteString(aQuotedText, quotedStuff);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
// It's best to put a blank line after the quoted text so that mails // It's best to put a blank line after the quoted text so that mails
@ -1630,13 +1627,9 @@ nsPlaintextEditor::Rewrap(PRBool aRespectNewlines)
&isCollapsed, current); &isCollapsed, current);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsICiter> citer = new nsInternetCiter();
NS_ENSURE_SUCCESS(rv, rv);
NS_ENSURE_TRUE(citer, NS_ERROR_UNEXPECTED);
nsString wrapped; nsString wrapped;
PRUint32 firstLineOffset = 0; // XXX need to reset this if there is a selection PRUint32 firstLineOffset = 0; // XXX need to reset this if there is a selection
rv = citer->Rewrap(current, wrapCol, firstLineOffset, aRespectNewlines, rv = nsInternetCiter::Rewrap(current, wrapCol, firstLineOffset, aRespectNewlines,
wrapped); wrapped);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
@ -1659,11 +1652,8 @@ nsPlaintextEditor::StripCites()
&isCollapsed, current); &isCollapsed, current);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsICiter> citer = new nsInternetCiter();
NS_ENSURE_TRUE(citer, NS_ERROR_UNEXPECTED);
nsString stripped; nsString stripped;
rv = citer->StripCites(current, stripped); rv = nsInternetCiter::StripCites(current, stripped);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
if (isCollapsed) // rewrap the whole document if (isCollapsed) // rewrap the whole document

Просмотреть файл

@ -935,10 +935,10 @@ nsPermissionManager::Read()
getter_AddRefs(stmtDeleteExpired)); getter_AddRefs(stmtDeleteExpired));
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
rv = stmtDeleteExpired->BindInt32Parameter(0, nsIPermissionManager::EXPIRE_TIME); rv = stmtDeleteExpired->BindInt32ByIndex(0, nsIPermissionManager::EXPIRE_TIME);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
rv = stmtDeleteExpired->BindInt64Parameter(1, PR_Now() / 1000); rv = stmtDeleteExpired->BindInt64ByIndex(1, PR_Now() / 1000);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
PRBool hasResult; PRBool hasResult;
@ -1111,43 +1111,43 @@ nsPermissionManager::UpdateDB(OperationType aOp,
switch (aOp) { switch (aOp) {
case eOperationAdding: case eOperationAdding:
{ {
rv = aStmt->BindInt64Parameter(0, aID); rv = aStmt->BindInt64ByIndex(0, aID);
if (NS_FAILED(rv)) break; if (NS_FAILED(rv)) break;
rv = aStmt->BindUTF8StringParameter(1, aHost); rv = aStmt->BindUTF8StringByIndex(1, aHost);
if (NS_FAILED(rv)) break; if (NS_FAILED(rv)) break;
rv = aStmt->BindUTF8StringParameter(2, aType); rv = aStmt->BindUTF8StringByIndex(2, aType);
if (NS_FAILED(rv)) break; if (NS_FAILED(rv)) break;
rv = aStmt->BindInt32Parameter(3, aPermission); rv = aStmt->BindInt32ByIndex(3, aPermission);
if (NS_FAILED(rv)) break; if (NS_FAILED(rv)) break;
rv = aStmt->BindInt32Parameter(4, aExpireType); rv = aStmt->BindInt32ByIndex(4, aExpireType);
if (NS_FAILED(rv)) break; if (NS_FAILED(rv)) break;
rv = aStmt->BindInt64Parameter(5, aExpireTime); rv = aStmt->BindInt64ByIndex(5, aExpireTime);
break; break;
} }
case eOperationRemoving: case eOperationRemoving:
{ {
rv = aStmt->BindInt64Parameter(0, aID); rv = aStmt->BindInt64ByIndex(0, aID);
break; break;
} }
case eOperationChanging: case eOperationChanging:
{ {
rv = aStmt->BindInt64Parameter(0, aID); rv = aStmt->BindInt64ByIndex(0, aID);
if (NS_FAILED(rv)) break; if (NS_FAILED(rv)) break;
rv = aStmt->BindInt32Parameter(1, aPermission); rv = aStmt->BindInt32ByIndex(1, aPermission);
if (NS_FAILED(rv)) break; if (NS_FAILED(rv)) break;
rv = aStmt->BindInt32Parameter(2, aExpireType); rv = aStmt->BindInt32ByIndex(2, aExpireType);
if (NS_FAILED(rv)) break; if (NS_FAILED(rv)) break;
rv = aStmt->BindInt64Parameter(3, aExpireTime); rv = aStmt->BindInt64ByIndex(3, aExpireTime);
break; break;
} }

Просмотреть файл

@ -3404,35 +3404,36 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
Decl(listenertype, listenervar.name) ], Decl(listenertype, listenervar.name) ],
virtual=1)) virtual=1))
switchontype = StmtSwitch(pvar) if not len(p.managesStmts):
for managee in p.managesStmts: removemanagee.addstmts([ _runtimeAbort('unreached'), StmtReturn() ])
case = StmtBlock() else:
actorvar = ExprVar('actor') switchontype = StmtSwitch(pvar)
manageeipdltype = managee.decl.type for managee in p.managesStmts:
manageecxxtype = _cxxBareType(ipdl.type.ActorType(manageeipdltype), case = StmtBlock()
self.side) actorvar = ExprVar('actor')
manageearray = p.managedVar(manageeipdltype, self.side) manageeipdltype = managee.decl.type
manageecxxtype = _cxxBareType(ipdl.type.ActorType(manageeipdltype),
self.side)
manageearray = p.managedVar(manageeipdltype, self.side)
case.addstmts([ case.addstmts([
StmtDecl(Decl(manageecxxtype, actorvar.name), StmtDecl(Decl(manageecxxtype, actorvar.name),
ExprCast(listenervar, manageecxxtype, static=1)), ExprCast(listenervar, manageecxxtype, static=1)),
_abortIfFalse( _abortIfFalse(
_cxxArrayHasElementSorted(manageearray, actorvar), _cxxArrayHasElementSorted(manageearray, actorvar),
"actor not managed by this!"), "actor not managed by this!"),
Whitespace.NL, Whitespace.NL,
StmtExpr(_callCxxArrayRemoveSorted(manageearray, actorvar)), StmtExpr(_callCxxArrayRemoveSorted(manageearray, actorvar)),
StmtExpr(ExprCall(_deallocMethod(manageeipdltype), StmtExpr(ExprCall(_deallocMethod(manageeipdltype),
args=[ actorvar ])), args=[ actorvar ])),
StmtReturn() StmtReturn()
]) ])
switchontype.addcase(CaseLabel(_protocolId(manageeipdltype).name), switchontype.addcase(CaseLabel(_protocolId(manageeipdltype).name),
case) case)
default = StmtBlock()
default = StmtBlock() default.addstmts([ _runtimeAbort('unreached'), StmtReturn() ])
default.addstmts([ _runtimeAbort('unreached'), StmtReturn() ]) switchontype.addcase(DefaultLabel(), default)
switchontype.addcase(DefaultLabel(), default) removemanagee.addstmt(switchontype)
removemanagee.addstmt(switchontype)
return [ register, return [ register,
registerid, registerid,

0
js/src/config/find_OOM_errors.py Executable file → Normal file
Просмотреть файл

Просмотреть файл

@ -3415,7 +3415,7 @@ nsCSSRendering::PaintDecorationLine(gfxContext* aGfxContext,
const PRUint8 aStyle, const PRUint8 aStyle,
const gfxFloat aDescentLimit) const gfxFloat aDescentLimit)
{ {
NS_ASSERTION(aStyle != DECORATION_STYLE_NONE, "aStyle is none"); NS_ASSERTION(aStyle != NS_STYLE_TEXT_DECORATION_STYLE_NONE, "aStyle is none");
gfxRect rect = gfxRect rect =
GetTextDecorationRectInternal(aPt, aLineSize, aAscent, aOffset, GetTextDecorationRectInternal(aPt, aLineSize, aAscent, aOffset,
@ -3438,12 +3438,12 @@ nsCSSRendering::PaintDecorationLine(gfxContext* aGfxContext,
nsRefPtr<gfxPattern> oldPattern; nsRefPtr<gfxPattern> oldPattern;
switch (aStyle) { switch (aStyle) {
case DECORATION_STYLE_SOLID: case NS_STYLE_TEXT_DECORATION_STYLE_SOLID:
case DECORATION_STYLE_DOUBLE: case NS_STYLE_TEXT_DECORATION_STYLE_DOUBLE:
oldLineWidth = aGfxContext->CurrentLineWidth(); oldLineWidth = aGfxContext->CurrentLineWidth();
oldPattern = aGfxContext->GetPattern(); oldPattern = aGfxContext->GetPattern();
break; break;
case DECORATION_STYLE_DASHED: { case NS_STYLE_TEXT_DECORATION_STYLE_DASHED: {
aGfxContext->Save(); aGfxContext->Save();
contextIsSaved = PR_TRUE; contextIsSaved = PR_TRUE;
aGfxContext->Clip(rect); aGfxContext->Clip(rect);
@ -3455,7 +3455,7 @@ nsCSSRendering::PaintDecorationLine(gfxContext* aGfxContext,
rect.size.width += dashWidth; rect.size.width += dashWidth;
break; break;
} }
case DECORATION_STYLE_DOTTED: { case NS_STYLE_TEXT_DECORATION_STYLE_DOTTED: {
aGfxContext->Save(); aGfxContext->Save();
contextIsSaved = PR_TRUE; contextIsSaved = PR_TRUE;
aGfxContext->Clip(rect); aGfxContext->Clip(rect);
@ -3474,7 +3474,7 @@ nsCSSRendering::PaintDecorationLine(gfxContext* aGfxContext,
rect.size.width += dashWidth; rect.size.width += dashWidth;
break; break;
} }
case DECORATION_STYLE_WAVY: case NS_STYLE_TEXT_DECORATION_STYLE_WAVY:
aGfxContext->Save(); aGfxContext->Save();
contextIsSaved = PR_TRUE; contextIsSaved = PR_TRUE;
aGfxContext->Clip(rect); aGfxContext->Clip(rect);
@ -3498,13 +3498,13 @@ nsCSSRendering::PaintDecorationLine(gfxContext* aGfxContext,
aGfxContext->SetColor(gfxRGBA(aColor)); aGfxContext->SetColor(gfxRGBA(aColor));
aGfxContext->SetLineWidth(lineHeight); aGfxContext->SetLineWidth(lineHeight);
switch (aStyle) { switch (aStyle) {
case DECORATION_STYLE_SOLID: case NS_STYLE_TEXT_DECORATION_STYLE_SOLID:
aGfxContext->NewPath(); aGfxContext->NewPath();
aGfxContext->MoveTo(rect.TopLeft()); aGfxContext->MoveTo(rect.TopLeft());
aGfxContext->LineTo(rect.TopRight()); aGfxContext->LineTo(rect.TopRight());
aGfxContext->Stroke(); aGfxContext->Stroke();
break; break;
case DECORATION_STYLE_DOUBLE: case NS_STYLE_TEXT_DECORATION_STYLE_DOUBLE:
/** /**
* We are drawing double line as: * We are drawing double line as:
* *
@ -3527,14 +3527,14 @@ nsCSSRendering::PaintDecorationLine(gfxContext* aGfxContext,
aGfxContext->LineTo(rect.BottomRight()); aGfxContext->LineTo(rect.BottomRight());
aGfxContext->Stroke(); aGfxContext->Stroke();
break; break;
case DECORATION_STYLE_DOTTED: case NS_STYLE_TEXT_DECORATION_STYLE_DOTTED:
case DECORATION_STYLE_DASHED: case NS_STYLE_TEXT_DECORATION_STYLE_DASHED:
aGfxContext->NewPath(); aGfxContext->NewPath();
aGfxContext->MoveTo(rect.TopLeft()); aGfxContext->MoveTo(rect.TopLeft());
aGfxContext->LineTo(rect.TopRight()); aGfxContext->LineTo(rect.TopRight());
aGfxContext->Stroke(); aGfxContext->Stroke();
break; break;
case DECORATION_STYLE_WAVY: { case NS_STYLE_TEXT_DECORATION_STYLE_WAVY: {
/** /**
* We are drawing wavy line as: * We are drawing wavy line as:
* *
@ -3616,7 +3616,7 @@ nsCSSRendering::GetTextDecorationRect(nsPresContext* aPresContext,
const gfxFloat aDescentLimit) const gfxFloat aDescentLimit)
{ {
NS_ASSERTION(aPresContext, "aPresContext is null"); NS_ASSERTION(aPresContext, "aPresContext is null");
NS_ASSERTION(aStyle != DECORATION_STYLE_NONE, "aStyle is none"); NS_ASSERTION(aStyle != NS_STYLE_TEXT_DECORATION_STYLE_NONE, "aStyle is none");
gfxRect rect = gfxRect rect =
GetTextDecorationRectInternal(gfxPoint(0, 0), aLineSize, aAscent, aOffset, GetTextDecorationRectInternal(gfxPoint(0, 0), aLineSize, aAscent, aOffset,
@ -3639,9 +3639,10 @@ nsCSSRendering::GetTextDecorationRectInternal(const gfxPoint& aPt,
const PRUint8 aStyle, const PRUint8 aStyle,
const gfxFloat aDescentLimit) const gfxFloat aDescentLimit)
{ {
NS_ASSERTION(aStyle <= DECORATION_STYLE_WAVY, "Invalid aStyle value"); NS_ASSERTION(aStyle <= NS_STYLE_TEXT_DECORATION_STYLE_WAVY,
"Invalid aStyle value");
if (aStyle == DECORATION_STYLE_NONE) if (aStyle == NS_STYLE_TEXT_DECORATION_STYLE_NONE)
return gfxRect(0, 0, 0, 0); return gfxRect(0, 0, 0, 0);
PRBool canLiftUnderline = aDescentLimit >= 0.0; PRBool canLiftUnderline = aDescentLimit >= 0.0;
@ -3658,7 +3659,7 @@ nsCSSRendering::GetTextDecorationRectInternal(const gfxPoint& aPt,
gfxFloat suggestedMaxRectHeight = NS_MAX(NS_MIN(ascent, descentLimit), 1.0); gfxFloat suggestedMaxRectHeight = NS_MAX(NS_MIN(ascent, descentLimit), 1.0);
r.size.height = lineHeight; r.size.height = lineHeight;
if (aStyle == DECORATION_STYLE_DOUBLE) { if (aStyle == NS_STYLE_TEXT_DECORATION_STYLE_DOUBLE) {
/** /**
* We will draw double line as: * We will draw double line as:
* *
@ -3684,7 +3685,7 @@ nsCSSRendering::GetTextDecorationRectInternal(const gfxPoint& aPt,
r.size.height = NS_MAX(suggestedMaxRectHeight, lineHeight * 2.0 + 1.0); r.size.height = NS_MAX(suggestedMaxRectHeight, lineHeight * 2.0 + 1.0);
} }
} }
} else if (aStyle == DECORATION_STYLE_WAVY) { } else if (aStyle == NS_STYLE_TEXT_DECORATION_STYLE_WAVY) {
/** /**
* We will draw wavy line as: * We will draw wavy line as:
* *

Просмотреть файл

@ -286,15 +286,6 @@ struct nsCSSRendering {
PRUint8 aEndBevelSide = 0, PRUint8 aEndBevelSide = 0,
nscoord aEndBevelOffset = 0); nscoord aEndBevelOffset = 0);
enum {
DECORATION_STYLE_NONE = 0,
DECORATION_STYLE_SOLID = 1,
DECORATION_STYLE_DOTTED = 2,
DECORATION_STYLE_DASHED = 3,
DECORATION_STYLE_DOUBLE = 4,
DECORATION_STYLE_WAVY = 5
};
/** /**
* Function for painting the decoration lines for the text. * Function for painting the decoration lines for the text.
* NOTE: aPt, aLineSize, aAscent and aOffset are non-rounded device pixels, * NOTE: aPt, aLineSize, aAscent and aOffset are non-rounded device pixels,
@ -313,8 +304,8 @@ struct nsCSSRendering {
* NS_STYLE_TEXT_DECORATION_UNDERLINE or * NS_STYLE_TEXT_DECORATION_UNDERLINE or
* NS_STYLE_TEXT_DECORATION_OVERLINE or * NS_STYLE_TEXT_DECORATION_OVERLINE or
* NS_STYLE_TEXT_DECORATION_LINE_THROUGH. * NS_STYLE_TEXT_DECORATION_LINE_THROUGH.
* @param aStyle the style of the decoration line (See above * @param aStyle the style of the decoration line such as
* enum names). * NS_STYLE_TEXT_DECORATION_STYLE_*.
* @param aDescentLimit If aDescentLimit is zero or larger and the * @param aDescentLimit If aDescentLimit is zero or larger and the
* underline overflows from the descent space, * underline overflows from the descent space,
* the underline should be lifted up as far as * the underline should be lifted up as far as
@ -353,8 +344,8 @@ struct nsCSSRendering {
* NS_STYLE_TEXT_DECORATION_UNDERLINE or * NS_STYLE_TEXT_DECORATION_UNDERLINE or
* NS_STYLE_TEXT_DECORATION_OVERLINE or * NS_STYLE_TEXT_DECORATION_OVERLINE or
* NS_STYLE_TEXT_DECORATION_LINE_THROUGH. * NS_STYLE_TEXT_DECORATION_LINE_THROUGH.
* @param aStyle the style of the decoration line (See above * @param aStyle the style of the decoration line such as
* enum names). * NS_STYLE_TEXT_DECORATION_STYLE_*.
* @param aDescentLimit If aDescentLimit is zero or larger and the * @param aDescentLimit If aDescentLimit is zero or larger and the
* underline overflows from the descent space, * underline overflows from the descent space,
* the underline should be lifted up as far as * the underline should be lifted up as far as

Просмотреть файл

@ -626,6 +626,15 @@ static inline mozilla::css::Side operator++(mozilla::css::Side& side, int) {
#define NS_STYLE_TEXT_DECORATION_OVERRIDE_ALL 0x20 #define NS_STYLE_TEXT_DECORATION_OVERRIDE_ALL 0x20
#define NS_STYLE_TEXT_DECORATION_LINES_MASK (NS_STYLE_TEXT_DECORATION_UNDERLINE | NS_STYLE_TEXT_DECORATION_OVERLINE | NS_STYLE_TEXT_DECORATION_LINE_THROUGH) #define NS_STYLE_TEXT_DECORATION_LINES_MASK (NS_STYLE_TEXT_DECORATION_UNDERLINE | NS_STYLE_TEXT_DECORATION_OVERLINE | NS_STYLE_TEXT_DECORATION_LINE_THROUGH)
// See nsStyleText
#define NS_STYLE_TEXT_DECORATION_STYLE_NONE 0 // not in CSS spec, mapped to -moz-none
#define NS_STYLE_TEXT_DECORATION_STYLE_DOTTED 1
#define NS_STYLE_TEXT_DECORATION_STYLE_DASHED 2
#define NS_STYLE_TEXT_DECORATION_STYLE_SOLID 3
#define NS_STYLE_TEXT_DECORATION_STYLE_DOUBLE 4
#define NS_STYLE_TEXT_DECORATION_STYLE_WAVY 5
#define NS_STYLE_TEXT_DECORATION_STYLE_MAX NS_STYLE_TEXT_DECORATION_STYLE_WAVY
// See nsStyleText // See nsStyleText
#define NS_STYLE_TEXT_TRANSFORM_NONE 0 #define NS_STYLE_TEXT_TRANSFORM_NONE 0
#define NS_STYLE_TEXT_TRANSFORM_CAPITALIZE 1 #define NS_STYLE_TEXT_TRANSFORM_CAPITALIZE 1

Просмотреть файл

@ -239,6 +239,8 @@ input > .anonymous-div {
/* XXXldb I'm not sure if we really want the 'text-decoration: inherit', /* XXXldb I'm not sure if we really want the 'text-decoration: inherit',
but it's needed to make 'text-decoration' "work" on text inputs. */ but it's needed to make 'text-decoration' "work" on text inputs. */
text-decoration: inherit; text-decoration: inherit;
-moz-text-decoration-color: inherit;
-moz-text-decoration-style: inherit;
} }
input:disabled, input:disabled,

Просмотреть файл

@ -6076,6 +6076,7 @@ nsBlockFrame::PaintTextDecorationLine(gfxContext* aCtx,
const nsPoint& aPt, const nsPoint& aPt,
nsLineBox* aLine, nsLineBox* aLine,
nscolor aColor, nscolor aColor,
PRUint8 aStyle,
gfxFloat aOffset, gfxFloat aOffset,
gfxFloat aAscent, gfxFloat aAscent,
gfxFloat aSize, gfxFloat aSize,
@ -6096,7 +6097,7 @@ nsBlockFrame::PaintTextDecorationLine(gfxContext* aCtx,
nsCSSRendering::PaintDecorationLine( nsCSSRendering::PaintDecorationLine(
aCtx, aColor, pt, size, aCtx, aColor, pt, size,
PresContext()->AppUnitsToGfxUnits(aLine->GetAscent()), PresContext()->AppUnitsToGfxUnits(aLine->GetAscent()),
aOffset, aDecoration, nsCSSRendering::DECORATION_STYLE_SOLID); aOffset, aDecoration, aStyle);
} }
} }

Просмотреть файл

@ -369,6 +369,7 @@ protected:
const nsPoint& aPt, const nsPoint& aPt,
nsLineBox* aLine, nsLineBox* aLine,
nscolor aColor, nscolor aColor,
PRUint8 aStyle,
gfxFloat aOffset, gfxFloat aOffset,
gfxFloat aAscent, gfxFloat aAscent,
gfxFloat aSize, gfxFloat aSize,

Просмотреть файл

@ -75,9 +75,9 @@ class nsDisplayTextDecoration : public nsDisplayItem {
public: public:
nsDisplayTextDecoration(nsDisplayListBuilder* aBuilder, nsDisplayTextDecoration(nsDisplayListBuilder* aBuilder,
nsHTMLContainerFrame* aFrame, PRUint8 aDecoration, nsHTMLContainerFrame* aFrame, PRUint8 aDecoration,
nscolor aColor, nsLineBox* aLine) nscolor aColor, PRUint8 aStyle, nsLineBox* aLine)
: nsDisplayItem(aBuilder, aFrame), mLine(aLine), mColor(aColor), : nsDisplayItem(aBuilder, aFrame), mLine(aLine), mColor(aColor),
mDecoration(aDecoration) { mDecoration(aDecoration), mStyle(aStyle) {
MOZ_COUNT_CTOR(nsDisplayTextDecoration); MOZ_COUNT_CTOR(nsDisplayTextDecoration);
} }
#ifdef NS_BUILD_REFCNT_LOGGING #ifdef NS_BUILD_REFCNT_LOGGING
@ -100,6 +100,7 @@ private:
nsLineBox* mLine; nsLineBox* mLine;
nscolor mColor; nscolor mColor;
PRUint8 mDecoration; PRUint8 mDecoration;
PRUint8 mStyle;
}; };
void void
@ -136,16 +137,16 @@ nsDisplayTextDecoration::Paint(nsDisplayListBuilder* aBuilder,
if (mDecoration == NS_STYLE_TEXT_DECORATION_UNDERLINE) { if (mDecoration == NS_STYLE_TEXT_DECORATION_UNDERLINE) {
gfxFloat underlineOffset = fontGroup->GetUnderlineOffset(); gfxFloat underlineOffset = fontGroup->GetUnderlineOffset();
f->PaintTextDecorationLine(aCtx->ThebesContext(), pt, mLine, mColor, f->PaintTextDecorationLine(aCtx->ThebesContext(), pt, mLine, mColor,
underlineOffset, ascent, mStyle, underlineOffset, ascent,
metrics.underlineSize, mDecoration); metrics.underlineSize, mDecoration);
} else if (mDecoration == NS_STYLE_TEXT_DECORATION_OVERLINE) { } else if (mDecoration == NS_STYLE_TEXT_DECORATION_OVERLINE) {
f->PaintTextDecorationLine(aCtx->ThebesContext(), pt, mLine, mColor, f->PaintTextDecorationLine(aCtx->ThebesContext(), pt, mLine, mColor,
metrics.maxAscent, ascent, mStyle, metrics.maxAscent, ascent,
metrics.underlineSize, mDecoration); metrics.underlineSize, mDecoration);
} else { } else {
f->PaintTextDecorationLine(aCtx->ThebesContext(), pt, mLine, mColor, f->PaintTextDecorationLine(aCtx->ThebesContext(), pt, mLine, mColor,
metrics.strikeoutOffset, ascent, mStyle, metrics.strikeoutOffset,
metrics.strikeoutSize, mDecoration); ascent, metrics.strikeoutSize, mDecoration);
} }
} }
@ -159,10 +160,12 @@ class nsDisplayTextShadow : public nsDisplayItem {
public: public:
nsDisplayTextShadow(nsDisplayListBuilder* aBuilder, nsDisplayTextShadow(nsDisplayListBuilder* aBuilder,
nsHTMLContainerFrame* aFrame, nsHTMLContainerFrame* aFrame,
const PRUint8 aDecoration, const PRUint8 aDecoration, PRUint8 aUnderlineStyle,
PRUint8 aOverlineStyle, PRUint8 aStrikeThroughStyle,
nsLineBox* aLine) nsLineBox* aLine)
: nsDisplayItem(aBuilder, aFrame), mLine(aLine), : nsDisplayItem(aBuilder, aFrame), mLine(aLine),
mDecorationFlags(aDecoration) { mDecorationFlags(aDecoration), mUnderlineStyle(aUnderlineStyle),
mOverlineStyle(aOverlineStyle), mStrikeThroughStyle(aStrikeThroughStyle) {
MOZ_COUNT_CTOR(nsDisplayTextShadow); MOZ_COUNT_CTOR(nsDisplayTextShadow);
} }
virtual ~nsDisplayTextShadow() { virtual ~nsDisplayTextShadow() {
@ -176,6 +179,9 @@ public:
private: private:
nsLineBox* mLine; nsLineBox* mLine;
PRUint8 mDecorationFlags; PRUint8 mDecorationFlags;
PRUint8 mUnderlineStyle;
PRUint8 mOverlineStyle;
PRUint8 mStrikeThroughStyle;
}; };
void void
@ -243,22 +249,20 @@ nsDisplayTextShadow::Paint(nsDisplayListBuilder* aBuilder,
gfxSize size(lineWidth, metrics.underlineSize); gfxSize size(lineWidth, metrics.underlineSize);
underlineRect = nsCSSRendering::GetTextDecorationRect(presContext, size, underlineRect = nsCSSRendering::GetTextDecorationRect(presContext, size,
ascent, underlineOffset, ascent, underlineOffset,
NS_STYLE_TEXT_DECORATION_UNDERLINE, NS_STYLE_TEXT_DECORATION_UNDERLINE, mUnderlineStyle);
nsCSSRendering::DECORATION_STYLE_SOLID);
} }
if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_OVERLINE) { if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_OVERLINE) {
gfxSize size(lineWidth, metrics.underlineSize); gfxSize size(lineWidth, metrics.underlineSize);
overlineRect = nsCSSRendering::GetTextDecorationRect(presContext, size, overlineRect = nsCSSRendering::GetTextDecorationRect(presContext, size,
ascent, metrics.maxAscent, ascent, metrics.maxAscent,
NS_STYLE_TEXT_DECORATION_OVERLINE, NS_STYLE_TEXT_DECORATION_OVERLINE, mOverlineStyle);
nsCSSRendering::DECORATION_STYLE_SOLID);
} }
if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_LINE_THROUGH) { if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_LINE_THROUGH) {
gfxSize size(lineWidth, metrics.strikeoutSize); gfxSize size(lineWidth, metrics.strikeoutSize);
lineThroughRect = nsCSSRendering::GetTextDecorationRect(presContext, size, lineThroughRect = nsCSSRendering::GetTextDecorationRect(presContext, size,
ascent, metrics.strikeoutOffset, ascent, metrics.strikeoutOffset,
NS_STYLE_TEXT_DECORATION_LINE_THROUGH, NS_STYLE_TEXT_DECORATION_LINE_THROUGH,
nsCSSRendering::DECORATION_STYLE_SOLID); mStrikeThroughStyle);
} }
for (PRUint32 i = shadowList->Length(); i > 0; --i) { for (PRUint32 i = shadowList->Length(); i > 0; --i) {
@ -302,18 +306,19 @@ nsDisplayTextShadow::Paint(nsDisplayListBuilder* aBuilder,
if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_UNDERLINE) { if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_UNDERLINE) {
f->PaintTextDecorationLine(shadowCtx, pt, mLine, shadowColor, f->PaintTextDecorationLine(shadowCtx, pt, mLine, shadowColor,
underlineOffset, ascent, mUnderlineStyle, underlineOffset, ascent,
metrics.underlineSize, NS_STYLE_TEXT_DECORATION_UNDERLINE); metrics.underlineSize, NS_STYLE_TEXT_DECORATION_UNDERLINE);
} }
if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_OVERLINE) { if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_OVERLINE) {
f->PaintTextDecorationLine(shadowCtx, pt, mLine, shadowColor, f->PaintTextDecorationLine(shadowCtx, pt, mLine, shadowColor,
metrics.maxAscent, ascent, mOverlineStyle, metrics.maxAscent, ascent,
metrics.underlineSize, NS_STYLE_TEXT_DECORATION_OVERLINE); metrics.underlineSize, NS_STYLE_TEXT_DECORATION_OVERLINE);
} }
if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_LINE_THROUGH) { if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_LINE_THROUGH) {
f->PaintTextDecorationLine(shadowCtx, pt, mLine, shadowColor, f->PaintTextDecorationLine(shadowCtx, pt, mLine, shadowColor,
metrics.strikeoutOffset, ascent, mStrikeThroughStyle, metrics.strikeoutOffset,
metrics.strikeoutSize, NS_STYLE_TEXT_DECORATION_LINE_THROUGH); ascent, metrics.strikeoutSize,
NS_STYLE_TEXT_DECORATION_LINE_THROUGH);
} }
contextBoxBlur.DoPaint(); contextBoxBlur.DoPaint();
@ -350,9 +355,11 @@ nsHTMLContainerFrame::DisplayTextDecorations(nsDisplayListBuilder* aBuilder,
// behind children, line-through in front. For Quirks mode, see // behind children, line-through in front. For Quirks mode, see
// nsTextFrame::PaintTextDecorations. (See bug 1777.) // nsTextFrame::PaintTextDecorations. (See bug 1777.)
nscolor underColor, overColor, strikeColor; nscolor underColor, overColor, strikeColor;
PRUint8 underStyle, overStyle, strikeStyle;
PRUint8 decorations = NS_STYLE_TEXT_DECORATION_NONE; PRUint8 decorations = NS_STYLE_TEXT_DECORATION_NONE;
GetTextDecorations(PresContext(), aLine != nsnull, decorations, underColor, GetTextDecorations(PresContext(), aLine != nsnull, decorations, underColor,
overColor, strikeColor); overColor, strikeColor, underStyle, overStyle,
strikeStyle);
if (decorations == NS_STYLE_TEXT_DECORATION_NONE) if (decorations == NS_STYLE_TEXT_DECORATION_NONE)
return NS_OK; return NS_OK;
@ -362,26 +369,27 @@ nsHTMLContainerFrame::DisplayTextDecorations(nsDisplayListBuilder* aBuilder,
// list, underneath the text and all decorations. // list, underneath the text and all decorations.
if (GetStyleText()->mTextShadow) { if (GetStyleText()->mTextShadow) {
rv = aBelowTextDecorations->AppendNewToTop(new (aBuilder) rv = aBelowTextDecorations->AppendNewToTop(new (aBuilder)
nsDisplayTextShadow(aBuilder, this, decorations, aLine)); nsDisplayTextShadow(aBuilder, this, decorations, underStyle, overStyle,
strikeStyle, aLine));
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
} }
if (decorations & NS_STYLE_TEXT_DECORATION_UNDERLINE) { if (decorations & NS_STYLE_TEXT_DECORATION_UNDERLINE) {
rv = aBelowTextDecorations->AppendNewToTop(new (aBuilder) rv = aBelowTextDecorations->AppendNewToTop(new (aBuilder)
nsDisplayTextDecoration(aBuilder, this, NS_STYLE_TEXT_DECORATION_UNDERLINE, nsDisplayTextDecoration(aBuilder, this, NS_STYLE_TEXT_DECORATION_UNDERLINE,
underColor, aLine)); underColor, underStyle, aLine));
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
} }
if (decorations & NS_STYLE_TEXT_DECORATION_OVERLINE) { if (decorations & NS_STYLE_TEXT_DECORATION_OVERLINE) {
rv = aBelowTextDecorations->AppendNewToTop(new (aBuilder) rv = aBelowTextDecorations->AppendNewToTop(new (aBuilder)
nsDisplayTextDecoration(aBuilder, this, NS_STYLE_TEXT_DECORATION_OVERLINE, nsDisplayTextDecoration(aBuilder, this, NS_STYLE_TEXT_DECORATION_OVERLINE,
overColor, aLine)); overColor, overStyle, aLine));
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
} }
if (decorations & NS_STYLE_TEXT_DECORATION_LINE_THROUGH) { if (decorations & NS_STYLE_TEXT_DECORATION_LINE_THROUGH) {
rv = aAboveTextDecorations->AppendNewToTop(new (aBuilder) rv = aAboveTextDecorations->AppendNewToTop(new (aBuilder)
nsDisplayTextDecoration(aBuilder, this, NS_STYLE_TEXT_DECORATION_LINE_THROUGH, nsDisplayTextDecoration(aBuilder, this, NS_STYLE_TEXT_DECORATION_LINE_THROUGH,
strikeColor, aLine)); strikeColor, strikeStyle, aLine));
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
} }
return NS_OK; return NS_OK;
@ -424,6 +432,7 @@ nsHTMLContainerFrame::PaintTextDecorationLine(
const nsPoint& aPt, const nsPoint& aPt,
nsLineBox* aLine, nsLineBox* aLine,
nscolor aColor, nscolor aColor,
PRUint8 aStyle,
gfxFloat aOffset, gfxFloat aOffset,
gfxFloat aAscent, gfxFloat aAscent,
gfxFloat aSize, gfxFloat aSize,
@ -442,7 +451,7 @@ nsHTMLContainerFrame::PaintTextDecorationLine(
PresContext()->AppUnitsToGfxUnits(bp.top + aPt.y)); PresContext()->AppUnitsToGfxUnits(bp.top + aPt.y));
gfxSize size(PresContext()->AppUnitsToGfxUnits(innerWidth), aSize); gfxSize size(PresContext()->AppUnitsToGfxUnits(innerWidth), aSize);
nsCSSRendering::PaintDecorationLine(aCtx, aColor, pt, size, aAscent, aOffset, nsCSSRendering::PaintDecorationLine(aCtx, aColor, pt, size, aAscent, aOffset,
aDecoration, nsCSSRendering::DECORATION_STYLE_SOLID); aDecoration, aStyle);
} }
/*virtual*/ void /*virtual*/ void
@ -461,7 +470,10 @@ nsHTMLContainerFrame::GetTextDecorations(nsPresContext* aPresContext,
PRUint8& aDecorations, PRUint8& aDecorations,
nscolor& aUnderColor, nscolor& aUnderColor,
nscolor& aOverColor, nscolor& aOverColor,
nscolor& aStrikeColor) nscolor& aStrikeColor,
PRUint8& aUnderStyle,
PRUint8& aOverStyle,
PRUint8& aStrikeStyle)
{ {
aDecorations = NS_STYLE_TEXT_DECORATION_NONE; aDecorations = NS_STYLE_TEXT_DECORATION_NONE;
if (!mStyleContext->HasTextDecorations()) { if (!mStyleContext->HasTextDecorations()) {
@ -471,13 +483,15 @@ nsHTMLContainerFrame::GetTextDecorations(nsPresContext* aPresContext,
} }
if (!aIsBlock) { if (!aIsBlock) {
aDecorations = this->GetStyleTextReset()->mTextDecoration & const nsStyleTextReset* styleTextReset = this->GetStyleTextReset();
aDecorations = styleTextReset->mTextDecoration &
NS_STYLE_TEXT_DECORATION_LINES_MASK; NS_STYLE_TEXT_DECORATION_LINES_MASK;
if (aDecorations) { if (aDecorations) {
nscolor color = this->GetVisitedDependentColor(eCSSProperty_color); nscolor color =
aUnderColor = color; this->GetVisitedDependentColor(eCSSProperty_text_decoration_color);
aOverColor = color; aUnderColor = aOverColor = aStrikeColor = color;
aStrikeColor = color; aUnderStyle = aOverStyle = aStrikeStyle =
styleTextReset->GetDecorationStyle();
} }
} }
else { else {
@ -491,23 +505,29 @@ nsHTMLContainerFrame::GetTextDecorations(nsPresContext* aPresContext,
// walk tree // walk tree
for (nsIFrame* frame = this; frame; frame = frame->GetParent()) { for (nsIFrame* frame = this; frame; frame = frame->GetParent()) {
PRUint8 decors = frame->GetStyleTextReset()->mTextDecoration & decorMask; const nsStyleTextReset* styleTextReset = frame->GetStyleTextReset();
PRUint8 decors = styleTextReset->mTextDecoration & decorMask;
if (decors) { if (decors) {
// A *new* text-decoration is found. // A *new* text-decoration is found.
nscolor color = frame->GetVisitedDependentColor(eCSSProperty_color); nscolor color = frame->GetVisitedDependentColor(
eCSSProperty_text_decoration_color);
PRUint8 style = styleTextReset->GetDecorationStyle();
if (NS_STYLE_TEXT_DECORATION_UNDERLINE & decors) { if (NS_STYLE_TEXT_DECORATION_UNDERLINE & decors) {
aUnderColor = color; aUnderColor = color;
aUnderStyle = style;
decorMask &= ~NS_STYLE_TEXT_DECORATION_UNDERLINE; decorMask &= ~NS_STYLE_TEXT_DECORATION_UNDERLINE;
aDecorations |= NS_STYLE_TEXT_DECORATION_UNDERLINE; aDecorations |= NS_STYLE_TEXT_DECORATION_UNDERLINE;
} }
if (NS_STYLE_TEXT_DECORATION_OVERLINE & decors) { if (NS_STYLE_TEXT_DECORATION_OVERLINE & decors) {
aOverColor = color; aOverColor = color;
aOverStyle = style;
decorMask &= ~NS_STYLE_TEXT_DECORATION_OVERLINE; decorMask &= ~NS_STYLE_TEXT_DECORATION_OVERLINE;
aDecorations |= NS_STYLE_TEXT_DECORATION_OVERLINE; aDecorations |= NS_STYLE_TEXT_DECORATION_OVERLINE;
} }
if (NS_STYLE_TEXT_DECORATION_LINE_THROUGH & decors) { if (NS_STYLE_TEXT_DECORATION_LINE_THROUGH & decors) {
aStrikeColor = color; aStrikeColor = color;
aStrikeStyle = style;
decorMask &= ~NS_STYLE_TEXT_DECORATION_LINE_THROUGH; decorMask &= ~NS_STYLE_TEXT_DECORATION_LINE_THROUGH;
aDecorations |= NS_STYLE_TEXT_DECORATION_LINE_THROUGH; aDecorations |= NS_STYLE_TEXT_DECORATION_LINE_THROUGH;
} }

Просмотреть файл

@ -144,6 +144,18 @@ protected:
* in aDecoration is set. It is undefined otherwise. * in aDecoration is set. It is undefined otherwise.
* @param aStrikeColor The color of strike-through if the appropriate bit * @param aStrikeColor The color of strike-through if the appropriate bit
* in aDecoration is set. It is undefined otherwise. * in aDecoration is set. It is undefined otherwise.
* @param aUnderStyle The style of underline if the appropriate bit
* in aDecoration is set. It is undefined otherwise.
* The style is one of
* NS_STYLE_TEXT_DECORATION_STYLE_* consts.
* @param aOverStyle The style of overline if the appropriate bit
* in aDecoration is set. It is undefined otherwise.
* The style is one of
* NS_STYLE_TEXT_DECORATION_STYLE_* consts.
* @param aStrikeStyle The style of strike-through if the appropriate bit
* in aDecoration is set. It is undefined otherwise.
* The style is one of
* NS_STYLE_TEXT_DECORATION_STYLE_* consts.
* NOTE: This function assigns NS_STYLE_TEXT_DECORATION_NONE to * NOTE: This function assigns NS_STYLE_TEXT_DECORATION_NONE to
* aDecorations for text-less frames. See bug 20163 for * aDecorations for text-less frames. See bug 20163 for
* details. * details.
@ -153,7 +165,10 @@ protected:
PRUint8& aDecorations, PRUint8& aDecorations,
nscolor& aUnderColor, nscolor& aUnderColor,
nscolor& aOverColor, nscolor& aOverColor,
nscolor& aStrikeColor); nscolor& aStrikeColor,
PRUint8& aUnderStyle,
PRUint8& aOverStyle,
PRUint8& aStrikeStyle);
/** /**
* Function that does the actual drawing of the textdecoration. * Function that does the actual drawing of the textdecoration.
@ -161,6 +176,8 @@ protected:
* @param aCtx the Thebes graphics context to draw on * @param aCtx the Thebes graphics context to draw on
* @param aLine the line, or nsnull if this is an inline frame * @param aLine the line, or nsnull if this is an inline frame
* @param aColor the color of the text-decoration * @param aColor the color of the text-decoration
* @param aStyle the style of the text-decoration, i.e., one of
* NS_STYLE_TEXT_DECORATION_STYLE_* consts.
* @param aAscent ascent of the font from which the * @param aAscent ascent of the font from which the
* text-decoration was derived. * text-decoration was derived.
* @param aOffset distance *above* baseline where the * @param aOffset distance *above* baseline where the
@ -177,6 +194,7 @@ protected:
const nsPoint& aPt, const nsPoint& aPt,
nsLineBox* aLine, nsLineBox* aLine,
nscolor aColor, nscolor aColor,
PRUint8 aStyle,
gfxFloat aOffset, gfxFloat aOffset,
gfxFloat aAscent, gfxFloat aAscent,
gfxFloat aSize, gfxFloat aSize,

Просмотреть файл

@ -432,13 +432,19 @@ protected:
struct TextDecorations { struct TextDecorations {
PRUint8 mDecorations; PRUint8 mDecorations;
PRUint8 mOverStyle;
PRUint8 mUnderStyle;
PRUint8 mStrikeStyle;
nscolor mOverColor; nscolor mOverColor;
nscolor mUnderColor; nscolor mUnderColor;
nscolor mStrikeColor; nscolor mStrikeColor;
TextDecorations() : TextDecorations() :
mDecorations(0), mOverColor(NS_RGB(0, 0, 0)), mDecorations(0), mOverStyle(NS_STYLE_TEXT_DECORATION_STYLE_SOLID),
mUnderColor(NS_RGB(0, 0, 0)), mStrikeColor(NS_RGB(0, 0, 0)) mUnderStyle(NS_STYLE_TEXT_DECORATION_STYLE_SOLID),
mStrikeStyle(NS_STYLE_TEXT_DECORATION_STYLE_SOLID),
mOverColor(NS_RGB(0, 0, 0)), mUnderColor(NS_RGB(0, 0, 0)),
mStrikeColor(NS_RGB(0, 0, 0))
{ } { }
PRBool HasDecorationlines() { PRBool HasDecorationlines() {

Просмотреть файл

@ -3465,15 +3465,6 @@ static StyleIDs SelectionStyleIDs[] = {
nsILookAndFeel::eMetricFloat_SpellCheckerUnderlineRelativeSize } nsILookAndFeel::eMetricFloat_SpellCheckerUnderlineRelativeSize }
}; };
static PRUint8 sUnderlineStyles[] = {
nsCSSRendering::DECORATION_STYLE_NONE, // NS_UNDERLINE_STYLE_NONE 0
nsCSSRendering::DECORATION_STYLE_DOTTED, // NS_UNDERLINE_STYLE_DOTTED 1
nsCSSRendering::DECORATION_STYLE_DASHED, // NS_UNDERLINE_STYLE_DASHED 2
nsCSSRendering::DECORATION_STYLE_SOLID, // NS_UNDERLINE_STYLE_SOLID 3
nsCSSRendering::DECORATION_STYLE_DOUBLE, // NS_UNDERLINE_STYLE_DOUBLE 4
nsCSSRendering::DECORATION_STYLE_WAVY // NS_UNDERLINE_STYLE_WAVY 5
};
void void
nsTextPaintStyle::InitSelectionStyle(PRInt32 aIndex) nsTextPaintStyle::InitSelectionStyle(PRInt32 aIndex)
{ {
@ -3546,9 +3537,9 @@ nsTextPaintStyle::GetSelectionUnderline(nsPresContext* aPresContext,
look->GetColor(styleID.mLine, color); look->GetColor(styleID.mLine, color);
look->GetMetric(styleID.mLineStyle, style); look->GetMetric(styleID.mLineStyle, style);
if (!NS_IS_VALID_UNDERLINE_STYLE(style)) { if (style > NS_STYLE_TEXT_DECORATION_STYLE_MAX) {
NS_ERROR("Invalid underline style value is specified"); NS_ERROR("Invalid underline style value is specified");
style = NS_UNDERLINE_STYLE_SOLID; style = NS_STYLE_TEXT_DECORATION_STYLE_SOLID;
} }
look->GetMetric(styleID.mLineRelativeSize, size); look->GetMetric(styleID.mLineRelativeSize, size);
@ -3558,9 +3549,9 @@ nsTextPaintStyle::GetSelectionUnderline(nsPresContext* aPresContext,
*aLineColor = color; *aLineColor = color;
} }
*aRelativeSize = size; *aRelativeSize = size;
*aStyle = sUnderlineStyles[style]; *aStyle = style;
return sUnderlineStyles[style] != nsCSSRendering::DECORATION_STYLE_NONE && return style != NS_STYLE_TEXT_DECORATION_STYLE_NONE &&
color != NS_TRANSPARENT && color != NS_TRANSPARENT &&
size > 0.0f; size > 0.0f;
} }
@ -4270,13 +4261,15 @@ nsTextFrame::GetTextDecorations(nsPresContext* aPresContext)
// This handles the <a href="blah.html"><font color="green">La // This handles the <a href="blah.html"><font color="green">La
// la la</font></a> case. The link underline should be green. // la la</font></a> case. The link underline should be green.
useOverride = PR_TRUE; useOverride = PR_TRUE;
overrideColor = context->GetVisitedDependentColor(eCSSProperty_color); overrideColor = context->GetVisitedDependentColor(
eCSSProperty_text_decoration_color);
} }
// FIXME: see above (remove this check) // FIXME: see above (remove this check)
PRUint8 useDecorations = decorMask & styleText->mTextDecoration; PRUint8 useDecorations = decorMask & styleText->mTextDecoration;
if (useDecorations) {// a decoration defined here if (useDecorations) {// a decoration defined here
nscolor color = context->GetVisitedDependentColor(eCSSProperty_color); nscolor color = context->GetVisitedDependentColor(
eCSSProperty_text_decoration_color);
// FIXME: We also need to record the thickness and position // FIXME: We also need to record the thickness and position
// metrics appropriate to this element (at least in standards // metrics appropriate to this element (at least in standards
@ -4289,16 +4282,19 @@ nsTextFrame::GetTextDecorations(nsPresContext* aPresContext)
// This way we move the decorations for relative positioning. // This way we move the decorations for relative positioning.
if (NS_STYLE_TEXT_DECORATION_UNDERLINE & useDecorations) { if (NS_STYLE_TEXT_DECORATION_UNDERLINE & useDecorations) {
decorations.mUnderColor = useOverride ? overrideColor : color; decorations.mUnderColor = useOverride ? overrideColor : color;
decorations.mUnderStyle = styleText->GetDecorationStyle();
decorMask &= ~NS_STYLE_TEXT_DECORATION_UNDERLINE; decorMask &= ~NS_STYLE_TEXT_DECORATION_UNDERLINE;
decorations.mDecorations |= NS_STYLE_TEXT_DECORATION_UNDERLINE; decorations.mDecorations |= NS_STYLE_TEXT_DECORATION_UNDERLINE;
} }
if (NS_STYLE_TEXT_DECORATION_OVERLINE & useDecorations) { if (NS_STYLE_TEXT_DECORATION_OVERLINE & useDecorations) {
decorations.mOverColor = useOverride ? overrideColor : color; decorations.mOverColor = useOverride ? overrideColor : color;
decorations.mOverStyle = styleText->GetDecorationStyle();
decorMask &= ~NS_STYLE_TEXT_DECORATION_OVERLINE; decorMask &= ~NS_STYLE_TEXT_DECORATION_OVERLINE;
decorations.mDecorations |= NS_STYLE_TEXT_DECORATION_OVERLINE; decorations.mDecorations |= NS_STYLE_TEXT_DECORATION_OVERLINE;
} }
if (NS_STYLE_TEXT_DECORATION_LINE_THROUGH & useDecorations) { if (NS_STYLE_TEXT_DECORATION_LINE_THROUGH & useDecorations) {
decorations.mStrikeColor = useOverride ? overrideColor : color; decorations.mStrikeColor = useOverride ? overrideColor : color;
decorations.mStrikeStyle = styleText->GetDecorationStyle();
decorMask &= ~NS_STYLE_TEXT_DECORATION_LINE_THROUGH; decorMask &= ~NS_STYLE_TEXT_DECORATION_LINE_THROUGH;
decorations.mDecorations |= NS_STYLE_TEXT_DECORATION_LINE_THROUGH; decorations.mDecorations |= NS_STYLE_TEXT_DECORATION_LINE_THROUGH;
} }
@ -4393,8 +4389,7 @@ nsTextFrame::PaintTextDecorations(gfxContext* aCtx, const gfxRect& aDirtyRect,
size.height = fontMetrics.underlineSize; size.height = fontMetrics.underlineSize;
nsCSSRendering::PaintDecorationLine( nsCSSRendering::PaintDecorationLine(
aCtx, lineColor, pt, size, ascent, fontMetrics.maxAscent, aCtx, lineColor, pt, size, ascent, fontMetrics.maxAscent,
NS_STYLE_TEXT_DECORATION_OVERLINE, NS_STYLE_TEXT_DECORATION_OVERLINE, decorations.mOverStyle);
nsCSSRendering::DECORATION_STYLE_SOLID);
} }
if (decorations.HasUnderline()) { if (decorations.HasUnderline()) {
lineColor = aOverrideColor ? *aOverrideColor : decorations.mUnderColor; lineColor = aOverrideColor ? *aOverrideColor : decorations.mUnderColor;
@ -4402,8 +4397,7 @@ nsTextFrame::PaintTextDecorations(gfxContext* aCtx, const gfxRect& aDirtyRect,
gfxFloat offset = aProvider.GetFontGroup()->GetUnderlineOffset(); gfxFloat offset = aProvider.GetFontGroup()->GetUnderlineOffset();
nsCSSRendering::PaintDecorationLine( nsCSSRendering::PaintDecorationLine(
aCtx, lineColor, pt, size, ascent, offset, aCtx, lineColor, pt, size, ascent, offset,
NS_STYLE_TEXT_DECORATION_UNDERLINE, NS_STYLE_TEXT_DECORATION_UNDERLINE, decorations.mUnderStyle);
nsCSSRendering::DECORATION_STYLE_SOLID);
} }
if (decorations.HasStrikeout()) { if (decorations.HasStrikeout()) {
lineColor = aOverrideColor ? *aOverrideColor : decorations.mStrikeColor; lineColor = aOverrideColor ? *aOverrideColor : decorations.mStrikeColor;
@ -4411,8 +4405,7 @@ nsTextFrame::PaintTextDecorations(gfxContext* aCtx, const gfxRect& aDirtyRect,
gfxFloat offset = fontMetrics.strikeoutOffset; gfxFloat offset = fontMetrics.strikeoutOffset;
nsCSSRendering::PaintDecorationLine( nsCSSRendering::PaintDecorationLine(
aCtx, lineColor, pt, size, ascent, offset, aCtx, lineColor, pt, size, ascent, offset,
NS_STYLE_TEXT_DECORATION_LINE_THROUGH, NS_STYLE_TEXT_DECORATION_LINE_THROUGH, decorations.mStrikeStyle);
nsCSSRendering::DECORATION_STYLE_SOLID);
} }
} }
@ -4440,30 +4433,6 @@ static const SelectionType SelectionTypesWithDecorations =
nsISelectionController::SELECTION_IME_CONVERTEDTEXT | nsISelectionController::SELECTION_IME_CONVERTEDTEXT |
nsISelectionController::SELECTION_IME_SELECTEDCONVERTEDTEXT; nsISelectionController::SELECTION_IME_SELECTEDCONVERTEDTEXT;
static PRUint8
GetTextDecorationStyle(const nsTextRangeStyle &aRangeStyle)
{
NS_PRECONDITION(aRangeStyle.IsLineStyleDefined(),
"aRangeStyle.mLineStyle have to be defined");
switch (aRangeStyle.mLineStyle) {
case nsTextRangeStyle::LINESTYLE_NONE:
return nsCSSRendering::DECORATION_STYLE_NONE;
case nsTextRangeStyle::LINESTYLE_SOLID:
return nsCSSRendering::DECORATION_STYLE_SOLID;
case nsTextRangeStyle::LINESTYLE_DOTTED:
return nsCSSRendering::DECORATION_STYLE_DOTTED;
case nsTextRangeStyle::LINESTYLE_DASHED:
return nsCSSRendering::DECORATION_STYLE_DASHED;
case nsTextRangeStyle::LINESTYLE_DOUBLE:
return nsCSSRendering::DECORATION_STYLE_DOUBLE;
case nsTextRangeStyle::LINESTYLE_WAVY:
return nsCSSRendering::DECORATION_STYLE_WAVY;
default:
NS_WARNING("Requested underline style is not valid");
return nsCSSRendering::DECORATION_STYLE_SOLID;
}
}
static gfxFloat static gfxFloat
ComputeSelectionUnderlineHeight(nsPresContext* aPresContext, ComputeSelectionUnderlineHeight(nsPresContext* aPresContext,
const gfxFont::Metrics& aFontMetrics, const gfxFont::Metrics& aFontMetrics,
@ -4549,7 +4518,7 @@ static void DrawSelectionDecorations(gfxContext* aContext, SelectionType aType,
if (aRangeStyle.mLineStyle == nsTextRangeStyle::LINESTYLE_NONE) { if (aRangeStyle.mLineStyle == nsTextRangeStyle::LINESTYLE_NONE) {
return; return;
} }
style = GetTextDecorationStyle(aRangeStyle); style = aRangeStyle.mLineStyle;
relativeSize = aRangeStyle.mIsBoldLine ? 2.0f : 1.0f; relativeSize = aRangeStyle.mIsBoldLine ? 2.0f : 1.0f;
} else if (!weDefineSelectionUnderline) { } else if (!weDefineSelectionUnderline) {
// There is no underline style definition. // There is no underline style definition.
@ -5358,7 +5327,7 @@ nsTextFrame::CombineSelectionUnderlineRect(nsPresContext* aPresContext,
rangeStyle.mLineStyle == nsTextRangeStyle::LINESTYLE_NONE) { rangeStyle.mLineStyle == nsTextRangeStyle::LINESTYLE_NONE) {
continue; continue;
} }
style = GetTextDecorationStyle(rangeStyle); style = rangeStyle.mLineStyle;
relativeSize = rangeStyle.mIsBoldLine ? 2.0f : 1.0f; relativeSize = rangeStyle.mIsBoldLine ? 2.0f : 1.0f;
} else if (!nsTextPaintStyle::GetSelectionUnderline(aPresContext, index, } else if (!nsTextPaintStyle::GetSelectionUnderline(aPresContext, index,
nsnull, &relativeSize, nsnull, &relativeSize,

Просмотреть файл

@ -21,7 +21,7 @@ include backgrounds/reftest.list
include bidi/reftest.list include bidi/reftest.list
# border-image # border-image
include border-image/reftest.list skip-if(Android) include border-image/reftest.list
# border-radius/ # border-radius/
include border-radius/reftest.list include border-radius/reftest.list
@ -33,10 +33,10 @@ include box-ordinal/reftest.list
include box-properties/reftest.list include box-properties/reftest.list
# box-shadow/ # box-shadow/
include box-shadow/reftest.list skip-if(Android) include box-shadow/reftest.list
# bugs/ # bugs/
include bugs/reftest.list skip-if(Android) include bugs/reftest.list
# canvas 2D # canvas 2D
include canvas/reftest.list include canvas/reftest.list
@ -51,10 +51,10 @@ include css-charset/reftest.list
include css-default/reftest.list include css-default/reftest.list
# css :disable tests # css :disable tests
include css-disabled/reftest.list skip-if(Android) include css-disabled/reftest.list
# css :enable tests # css :enable tests
include css-enabled/reftest.list skip-if(Android) include css-enabled/reftest.list
# css @import tests # css @import tests
include css-import/reftest.list include css-import/reftest.list
@ -81,10 +81,10 @@ include css-required/reftest.list
include css-optional/reftest.list include css-optional/reftest.list
# css valid # css valid
include css-valid/reftest.list skip-if(Android) include css-valid/reftest.list
# css invalid # css invalid
include css-invalid/reftest.list skip-if(Android) include css-invalid/reftest.list
# css-submit-invalid # css-submit-invalid
include css-submit-invalid/reftest.list include css-submit-invalid/reftest.list
@ -93,10 +93,10 @@ include css-submit-invalid/reftest.list
include css-transitions/reftest.list include css-transitions/reftest.list
# css :-moz-ui-invalid # css :-moz-ui-invalid
include css-ui-invalid/reftest.list skip-if(Android) include css-ui-invalid/reftest.list
# css :-moz-ui-valid # css :-moz-ui-valid
include css-ui-valid/reftest.list skip-if(Android) include css-ui-valid/reftest.list
# css values and units # css values and units
include css-valuesandunits/reftest.list include css-valuesandunits/reftest.list
@ -129,7 +129,7 @@ include editor/reftest.list
include generated-content/reftest.list include generated-content/reftest.list
# first-letter/ # first-letter/
include first-letter/reftest.list skip-if(Android) include first-letter/reftest.list
# first-line/ # first-line/
include first-line/reftest.list include first-line/reftest.list
@ -147,7 +147,7 @@ include font-features/reftest.list
include font-matching/reftest.list include font-matching/reftest.list
# forms # forms
include forms/reftest.list skip-if(Android) include forms/reftest.list
# gfx # gfx
include ../../gfx/tests/reftest/reftest.list include ../../gfx/tests/reftest/reftest.list
@ -186,7 +186,7 @@ include margin-collapsing/reftest.list
include marquee/reftest.list include marquee/reftest.list
# native-theme/ # native-theme/
include native-theme/reftest.list skip-if(Android) include native-theme/reftest.list
# netwerk/ # netwerk/
include ../../netwerk/test/reftest/reftest.list include ../../netwerk/test/reftest/reftest.list
@ -250,7 +250,7 @@ include text-decoration/reftest.list
include text-indent/reftest.list include text-indent/reftest.list
# text-shadow/ # text-shadow/
include text-shadow/reftest.list skip-if(Android) include text-shadow/reftest.list
# theme (pinstripe) # theme (pinstripe)
include ../../toolkit/themes/pinstripe/reftests/reftest.list include ../../toolkit/themes/pinstripe/reftests/reftest.list

Просмотреть файл

@ -0,0 +1,65 @@
<p style="color: #008000;
text-decoration: underline line-through overline;">
<span style="color: #0000FF;">This blue text has green decoration lines</span>
</p>
<p style="color: yellow;
text-decoration: underline line-through overline;">
<span style="color: red;">This red text has yellow decoration lines</span>
</p>
<p style="color: red; text-decoration: underline line-through overline;">
<span style="color: #0000FF">This blue text has red lines</span>
</p>
<p style="color: orange;">
This orange text has transparent lines
</p>
<p>
Here is no decoration lines, but
<span style="font-size: 2em;
color: green;
text-decoration: underline line-through overline;">
<span style="color: blue;">
this blue text has green decoration lines</span></span>,
and here is no decoration lines too.
</p>
<p style="color: red;">
This is red paragraph and here is no decoration lines, but
<span style="font-size: 2em;
color: green;
text-decoration: underline line-through overline;">
<span style="color: red;">here are green decoration lines</span></span>,
and here is no decoration lines too.
</p>
<p style="color: purple;
text-decoration: underline line-through overline;">
This is purple paragraph and here are decoration lines of current color, but
<span style="font-size: 2em;
color: red;
text-decoration: underline line-through overline;">
<span style="color: purple;">here are red decoration lines</span></span>,
and here are current color decoration lines.
</p>
<p style="color: green;
text-decoration: underline line-through overline;">
This is green paragraph and here are decoration lines of current color, and
<span style="font-size: 2em;">
here is specified red decoration color but has current color lines</span>,
and here are current color decoration lines.
</p>
<p style="color: blue;">
This is blue paragraph,
<span style="font-size:2em;
color: red;
text-decoration: underline line-through overline;
-moz-text-decoration-color: blue;">
here is red text with blue decoration lines</span>,
and here is blue text without decoration lines.
</p>
<p style="color: blue;">
This is blue paragraph and decoration color is specified as green,
<span style="font-size:2em;
color: red;
text-decoration: underline line-through overline;
-moz-text-decoration-color: green;">
here is red text with green decoration lines</span>,
and here is blue text without decoration lines.
</p>

Просмотреть файл

@ -0,0 +1,73 @@
<p style="color: blue;
text-decoration: underline line-through overline;
-moz-text-decoration-color: green;">
This blue text has green decoration lines
</p>
<p style="color: #ff0000;
text-decoration: underline line-through overline;
-moz-text-decoration-color: #ffff00;">
This red text has yellow decoration lines
</p>
<p style="color: rgb(0%, 0%, 100%);
text-decoration: underline line-through overline;
-moz-text-decoration-color: rgb(100%, 0%, 0%);">
This blue text has red lines
</p>
<p style="color: orange;
text-decoration: underline line-through overline;
-moz-text-decoration-color: transparent;">
This orange text has transparent lines
</p>
<p>
Here is no decoration lines, but
<span style="font-size: 2em;
color: blue;
text-decoration: underline line-through overline;
-moz-text-decoration-color: green;">
this blue text has green decoration lines</span>,
and here is no decoration lines too.
</p>
<p style="color: red;">
This is red paragraph and here is no decoration lines, but
<span style="font-size: 2em;
text-decoration: underline line-through overline;
-moz-text-decoration-color: green;">
here are green decoration lines</span>,
and here is no decoration lines too.
</p>
<p style="color: purple;
text-decoration: underline line-through overline;">
This is purple paragraph and here are decoration lines of current color, but
<span style="font-size: 2em;
text-decoration: underline line-through overline;
-moz-text-decoration-color: red;">
here are red decoration lines</span>,
and here are current color decoration lines.
</p>
<p style="color: green;
text-decoration: underline line-through overline;">
This is green paragraph and here are decoration lines of current color, and
<span style="font-size: 2em;
-moz-text-decoration-color: red;">
here is specified red decoration color but has current color lines</span>,
and here are current color decoration lines.
</p>
<p style="color: blue;">
This is blue paragraph,
<span style="font-size:2em;
color: red;
text-decoration: underline line-through overline;
-moz-text-decoration-color: inherit;">
here is red text with blue decoration lines</span>,
and here is blue text without decoration lines.
</p>
<p style="color: blue;
-moz-text-decoration-color: green;">
This is blue paragraph and decoration color is specified as green,
<span style="font-size:2em;
color: red;
text-decoration: underline line-through overline;
-moz-text-decoration-color: inherit;">
here is red text with green decoration lines</span>,
and here is blue text without decoration lines.
</p>

Просмотреть файл

@ -0,0 +1,67 @@
<!DOCTYPE html>
<p style="color: #008000;
text-decoration: underline line-through overline;">
<span style="color: #0000FF;">This blue text has green decoration lines</span>
</p>
<p style="color: yellow;
text-decoration: underline line-through overline;">
<span style="color: red;">This red text has yellow decoration lines</span>
</p>
<p style="color: red;
text-decoration: underline line-through overline;">
<span style="color: #0000FF">This blue text has red lines</span>
</p>
<p style="color: orange;">
This orange text has transparent lines
</p>
<p>
Here is no decoration lines, but
<span style="font-size: 2em;
color: green;
text-decoration: underline line-through overline;">
<span style="color: blue;">
this blue text has green decoration lines</span></span>,
and here is no decoration lines too.
</p>
<p style="color: red;">
This is red paragraph and here is no decoration lines, but
<span style="font-size: 2em;
color: green;
text-decoration: underline line-through overline;">
<span style="color: red;">here are green decoration lines</span></span>,
and here is no decoration lines too.
</p>
<p style="color: purple;
text-decoration: underline line-through overline;">
This is purple paragraph and here are decoration lines of current color, but
<span style="font-size: 2em;
color: red;
text-decoration: underline line-through overline;">
<span style="color: purple;">here are red decoration lines</span></span>,
and here are current color decoration lines.
</p>
<p style="color: green;
text-decoration: underline line-through overline;">
This is green paragraph and here are decoration lines of current color, and
<span style="font-size: 2em;">
here is specified red decoration color but has current color lines</span>,
and here are current color decoration lines.
</p>
<p style="color: blue;">
This is blue paragraph,
<span style="font-size:2em;
color: red;
text-decoration: underline line-through overline;
-moz-text-decoration-color: blue;">
here is red text with blue decoration lines</span>,
and here is blue text without decoration lines.
</p>
<p style="color: blue;">
This is blue paragraph and decoration color is specified as green,
<span style="font-size:2em;
color: red;
text-decoration: underline line-through overline;
-moz-text-decoration-color: green;">
here is red text with green decoration lines</span>,
and here is blue text without decoration lines.
</p>

Просмотреть файл

@ -0,0 +1,72 @@
<!DOCTYPE html>
<p style="color: blue;
text-decoration: underline line-through overline;
-moz-text-decoration-color: green;">
This blue text has green decoration lines
</p>
<p style="color: #ff0000;
text-decoration: underline line-through overline;
-moz-text-decoration-color: #ffff00;">
This red text has yellow decoration lines
</p>
<p style="color: rgb(0%, 0%, 100%);
text-decoration: underline line-through overline;
-moz-text-decoration-color: rgb(100%, 0%, 0%);">
This blue text has red lines
</p>
<p style="color: orange;
text-decoration: underline line-through overline;
-moz-text-decoration-color: transparent;">
This orange text has transparent lines
</p>
<p>
Here is no decoration lines, but
<span style="font-size: 2em; color: blue;
text-decoration: underline line-through overline;
-moz-text-decoration-color: green;">
this blue text has green decoration lines</span>,
and here is no decoration lines too.
</p>
<p style="color: red;">
This is red paragraph and here is no decoration lines, but
<span style="font-size: 2em;
text-decoration: underline line-through overline;
-moz-text-decoration-color: green;">
here are green decoration lines</span>,
and here is no decoration lines too.</p>
<p style="color: purple;
text-decoration: underline line-through overline;">
This is purple paragraph and here are decoration lines of current color, but
<span style="font-size: 2em;
text-decoration: underline line-through overline;
-moz-text-decoration-color: red;">
here are red decoration lines</span>,
and here are current color decoration lines.
</p>
<p style="color: green;
text-decoration: underline line-through overline;">
This is green paragraph and here are decoration lines of current color, and
<span style="font-size: 2em;
-moz-text-decoration-color: red;">
here is specified red decoration color but has current color lines</span>,
and here are current color decoration lines.
</p>
<p style="color: blue;">
This is blue paragraph,
<span style="font-size:2em;
color: red;
text-decoration: underline line-through overline;
-moz-text-decoration-color: inherit;">
here is red text with blue decoration lines</span>,
and here is blue text without decoration lines.
</p>
<p style="color: blue;
-moz-text-decoration-color: green;">
This is blue paragraph and decoration color is specified as green,
<span style="font-size:2em;
color: red;
text-decoration: underline line-through overline;
-moz-text-decoration-color: inherit;">
here is red text with green decoration lines</span>,
and here is blue text without decoration lines.
</p>

Просмотреть файл

@ -0,0 +1,42 @@
<p>
Here is specified the decoration style as dotted but no decoration lines,
however,
<span style="font-size: 2em;
text-decoration: underline line-through overline;
-moz-text-decoration: solid;">
here has solid decoration lines</span>,
and here has no decoration lines.
</p>
<p>
Here is specified the decoration style as dashed but no decoration lines,
however,
<span style="font-size: 2em;
text-decoration: underline line-through overline;
-moz-text-decoration-style: dashed;">
here has inherited decoration lines</span>,
and here has no decoration lines.
</p>
<p>
<span style="text-decoration: underline line-through overline;
-moz-text-decoration-style: dotted;">
Here has dotted decoration lines,
</span><span style="font-size: 2em;
text-decoration: underline line-through overline;
-moz-text-decoration-style: wavy;">
here has wavy decoration
lines</span><span style="text-decoration: underline line-through overline;
-moz-text-decoration-style: dotted;">,
and here has dotted decoration lines.</span>
</p>
<p>
<span style="text-decoration: underline line-through overline;
-moz-text-decoration-style: double;">
Here has double decoration lines,
</span><span style="font-size: 2em;
text-decoration: underline line-through overline;
-moz-text-decoration-style: double;">
here is specified as dashed decoration lines but should be
ignored</span><span style="text-decoration: underline line-through overline;
-moz-text-decoration-style: double;">,
and here has double decoration lines.</span>
</p>

Просмотреть файл

@ -0,0 +1,33 @@
<p style="-moz-text-decoration-style: dotted;">
Here is specified the decoration style as dotted but no decoration lines, however,
<span style="font-size: 2em;
text-decoration: underline line-through overline;">
here has solid decoration lines</span>,
and here has no decoration lines.
</p>
<p style="-moz-text-decoration-style: dashed;">
Here is specified the decoration style as dashed but no decoration lines,
however,
<span style="font-size: 2em;
text-decoration: underline line-through overline;
-moz-text-decoration-style: inherit;">
here has inherited decoration lines</span>,
and here has no decoration lines.
</p>
<p style="text-decoration: underline line-through overline;
-moz-text-decoration-style: dotted;">
Here has dotted decoration lines,
<span style="font-size: 2em;
text-decoration: underline line-through overline;
-moz-text-decoration-style: wavy;">
here has wavy decoration lines</span>,
and here has dotted decoration lines.
</p>
<p style="text-decoration: underline line-through overline;
-moz-text-decoration-style: double;">
Here has double decoration lines,
<span style="font-size: 2em;
-moz-text-decoration-style: dashed;">
here is specified as dashed decoration lines but should be ignored</span>,
and here has double decoration lines.
</p>

Просмотреть файл

@ -0,0 +1,27 @@
<!DOCTYPE html>
<p>
Here is specified the decoration style as dotted but no decoration lines,
however,
<span style="font-size: 2em;
text-decoration: underline line-through overline;
-moz-text-decoration: solid;">
here has solid decoration lines</span>,
and here has no decoration lines.
</p>
<p>
Here is specified the decoration style as dashed but no decoration lines,
however,
<span style="font-size: 2em;
text-decoration: underline line-through overline;
-moz-text-decoration-style: dashed;">
here has inherited decoration lines</span>,
and here has no decoration lines.
</p>
<p style="text-decoration: underline line-through overline;
-moz-text-decoration-style: double;">
Here has double decoration lines,
<span style="font-size: 2em;
text-decoration: none;">
here is specified as dashed decoration lines but should be ignored</span>,
and here has double decoration lines.
</p>

Просмотреть файл

@ -0,0 +1,25 @@
<!DOCTYPE html>
<p style="-moz-text-decoration-style: dotted;">
Here is specified the decoration style as dotted but no decoration lines,
however,
<span style="font-size: 2em;
text-decoration: underline line-through overline;">
here has solid decoration lines</span>, and here has no decoration lines.
</p>
<p style="-moz-text-decoration-style: dashed;">
Here is specified the decoration style as dashed but no decoration lines,
however,
<span style="font-size: 2em;
text-decoration: underline line-through overline;
-moz-text-decoration-style: inherit;">
here has inherited decoration lines</span>,
and here has no decoration lines.
</p>
<p style="text-decoration: underline line-through overline;
-moz-text-decoration-style: double;">
Here has double decoration lines,
<span style="font-size: 2em;
-moz-text-decoration-style: dashed;">
here is specified as dashed decoration lines but should be ignored</span>,
and here has double decoration lines.
</p>

Просмотреть файл

@ -0,0 +1 @@
<p style="text-decoration: line-through; -moz-text-decoration-style: dashed;">This paragraph has line-through</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p style="text-decoration: line-through; -moz-text-decoration-style: dashed;">This paragraph has line-through</p>

Просмотреть файл

@ -0,0 +1 @@
<p style="text-decoration: line-through; -moz-text-decoration-style: dotted;">This paragraph has line-through</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p style="text-decoration: line-through; -moz-text-decoration-style: dotted;">This paragraph has line-through</p>

Просмотреть файл

@ -0,0 +1 @@
<p style="text-decoration: line-through; -moz-text-decoration-style: double;">This paragraph has line-through</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p style="text-decoration: line-through; -moz-text-decoration-style: double;">This paragraph has line-through</p>

Просмотреть файл

@ -0,0 +1 @@
<p style="text-decoration: line-through;">This paragraph has line-through</p>

Просмотреть файл

@ -0,0 +1 @@
<p style="text-decoration: line-through; -moz-text-decoration-style: solid;">This paragraph has line-through</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p style="text-decoration: line-through; -moz-text-decoration-style: solid;">This paragraph has line-through</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p style="text-decoration: line-through;">This paragraph has line-through</p>

Просмотреть файл

@ -0,0 +1 @@
<p style="text-decoration: line-through; -moz-text-decoration-style: wavy;">This paragraph has line-through</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p style="text-decoration: line-through; -moz-text-decoration-style: wavy;">This paragraph has line-through</p>

Просмотреть файл

@ -0,0 +1 @@
<p>This paragraph has no decoration lines, but <span style="text-decoration: line-through; -moz-text-decoration-style: dashed;">here has line-through</span>, and here has no decoration lines.</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p>This paragraph has no decoration lines, but <span style="text-decoration: line-through; -moz-text-decoration-style: dashed;">here has line-through</span>, and here has no decoration lines.</p>

Просмотреть файл

@ -0,0 +1 @@
<p>This paragraph has no decoration lines, but <span style="text-decoration: line-through; -moz-text-decoration-style: dotted;">here has line-through</span>, and here has no decoration lines.</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p>This paragraph has no decoration lines, but <span style="text-decoration: line-through; -moz-text-decoration-style: dotted;">here has line-through</span>, and here has no decoration lines.</p>

Просмотреть файл

@ -0,0 +1 @@
<p>This paragraph has no decoration lines, but <span style="text-decoration: line-through; -moz-text-decoration-style: double;">here has line-through</span>, and here has no decoration lines.</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p>This paragraph has no decoration lines, but <span style="text-decoration: line-through; -moz-text-decoration-style: double;">here has line-through</span>, and here has no decoration lines.</p>

Просмотреть файл

@ -0,0 +1 @@
<p>This paragraph has no decoration lines, but <span style="text-decoration: line-through;">here has line-through</span>, and here has no decoration lines.</p>

Просмотреть файл

@ -0,0 +1 @@
<p>This paragraph has no decoration lines, but <span style="text-decoration: line-through; -moz-text-decoration-style: solid;">here has line-through</span>, and here has no decoration lines.</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p>This paragraph has no decoration lines, but <span style="text-decoration: line-through; -moz-text-decoration-style: solid;">here has line-through</span>, and here has no decoration lines.</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p>This paragraph has no decoration lines, but <span style="text-decoration: line-through;">here has line-through</span>, and here has no decoration lines.</p>

Просмотреть файл

@ -0,0 +1 @@
<p>This paragraph has no decoration lines, but <span style="text-decoration: line-through; -moz-text-decoration-style: wavy;">here has line-through</span>, and here has no decoration lines.</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p>This paragraph has no decoration lines, but <span style="text-decoration: line-through; -moz-text-decoration-style: wavy;">here has line-through</span>, and here has no decoration lines.</p>

Просмотреть файл

@ -0,0 +1 @@
<p style="text-decoration: overline; -moz-text-decoration-style: dashed;">This paragraph has overline</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p style="text-decoration: overline; -moz-text-decoration-style: dashed;">This paragraph has overline</p>

Просмотреть файл

@ -0,0 +1 @@
<p style="text-decoration: overline; -moz-text-decoration-style: dotted;">This paragraph has overline</p>

Просмотреть файл

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p style="text-decoration: overline; -moz-text-decoration-style: dotted;">This paragraph has overline</p>

Просмотреть файл

@ -0,0 +1 @@
<p style="text-decoration: overline; -moz-text-decoration-style: double;">This paragraph has overline</p>

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше