From 1ea0e706981006c48ad16a1ff8051df03610f20b Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Mon, 16 May 2011 11:28:00 +0200 Subject: qdoc: Fixed QTBUG-19338 --- tools/qdoc3/ditaxmlgenerator.cpp | 5 ++++- tools/qdoc3/generator.cpp | 11 +++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/tools/qdoc3/ditaxmlgenerator.cpp b/tools/qdoc3/ditaxmlgenerator.cpp index 342bb90..c45648b 100644 --- a/tools/qdoc3/ditaxmlgenerator.cpp +++ b/tools/qdoc3/ditaxmlgenerator.cpp @@ -1199,7 +1199,10 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, Just output the href as if the image is in the images directory... */ - fileName = QLatin1String("images/") + protectEnc(atom->string()); + if (atom->string()[0] == '/') + fileName = QLatin1String("images") + atom->string(); + else + fileName = QLatin1String("images/") + atom->string(); } if (currentTag() != DT_xref) diff --git a/tools/qdoc3/generator.cpp b/tools/qdoc3/generator.cpp index f05c030..81aba6b 100644 --- a/tools/qdoc3/generator.cpp +++ b/tools/qdoc3/generator.cpp @@ -783,10 +783,13 @@ QString Generator::imageFileName(const Node *relative, const QString& fileBase) if (filePath.isEmpty()) return QString(); - return QLatin1String("images/") - + Config::copyFile(relative->doc().location(), - filePath, userFriendlyFilePath, - outputDir() + QLatin1String("/images")); + QString path = Config::copyFile(relative->doc().location(), + filePath, + userFriendlyFilePath, + outputDir() + QLatin1String("/images")); + if (path[0] != '/') + return QLatin1String("images/") + path; + return QLatin1String("images") + path; } void Generator::setImageFileExtensions(const QStringList& extensions) -- cgit v0.12 From 1bd6f1bd280ee6e1ecd4de2291c8ccfb4d06b7a4 Mon Sep 17 00:00:00 2001 From: David Boddie <david.boddie@nokia.com> Date: Thu, 16 Jun 2011 16:10:38 +0200 Subject: Doc: Removed non-ASCII characters from the documentation. --- doc/src/platforms/supported-platforms.qdoc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/src/platforms/supported-platforms.qdoc b/doc/src/platforms/supported-platforms.qdoc index 9d47695..ba59c37 100644 --- a/doc/src/platforms/supported-platforms.qdoc +++ b/doc/src/platforms/supported-platforms.qdoc @@ -334,8 +334,8 @@ \section2 Advanced Text Layout Engine - Qt for Windows CE supports TrueType� and raster fonts. Qt also has - extended Unicode support and right-to-left languages. Qt�s rich text + Qt for Windows CE supports TrueType and raster fonts. Qt also has + extended Unicode support and right-to-left languages. Qt's rich text engine adds capabilities for complex text layouts including tables, path tracing and text which flows around shapes. @@ -373,7 +373,7 @@ by embedded Linux. You can use Qt to create highly memory efficient devices and applications that have completely unique user experiences. - Qt runs anywhere Linux runs. Qt�s intuitive API means fewer lines of + Qt runs anywhere Linux runs. Qt's intuitive API means fewer lines of code and higher level functionality in less time. Use the code from one single code-base and rebuild for all \l{Supported Platforms} {supported platforms}. @@ -410,7 +410,7 @@ frame buffer} that will match the physical device display, pixel for pixel. This gives the developer a realistic testing infrastructure testing on the desktop where the frame buffer simulates the physical - device display�s width, height and color depth. + device display's width, height and color depth. \section2 Inter-Process Communication (IPC) @@ -421,7 +421,7 @@ \section2 Extended Font Format Qt supports a wide range of font formats on embedded Linux including: - TrueType�, Postscript� Type1 and Qt pre-rendered fonts. Qt has + TrueType, Postscript Type1 and Qt pre-rendered fonts. Qt has extended Unicode support including automatic data extraction at build time and automatic update at runtime. @@ -681,7 +681,7 @@ \group platform-details Qt is a cross-platform application and UI framework. Using Qt, - you can write web-enabled applications once and deploy them + you can write GUI applications once and deploy them across desktop, mobile and embedded operating systems without rewriting the source code. -- cgit v0.12 From 26c29a2dd7efa4c66063d1255e1f694462cbae85 Mon Sep 17 00:00:00 2001 From: David Boddie <david.boddie@nokia.com> Date: Thu, 16 Jun 2011 20:20:50 +0200 Subject: Doc: Added more appropriate links to help reduce confusion. Task-number: QTBUG-19919 --- src/gui/widgets/qtextedit.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/widgets/qtextedit.cpp b/src/gui/widgets/qtextedit.cpp index 6757d77..b6661c9 100644 --- a/src/gui/widgets/qtextedit.cpp +++ b/src/gui/widgets/qtextedit.cpp @@ -2472,6 +2472,8 @@ bool QTextEdit::find(const QString &exp, QTextDocument::FindFlags options) and the text edit will try to guess the right format. Use setHtml() or setPlainText() directly to avoid text edit's guessing. + + \sa toPlainText(), toHtml() */ void QTextEdit::setText(const QString &text) { -- cgit v0.12 From 9ed61311bce15b8f1bb4b30ee9133f1a2355f41d Mon Sep 17 00:00:00 2001 From: David Boddie <david.boddie@nokia.com> Date: Thu, 16 Jun 2011 20:24:11 +0200 Subject: Doc: Added a simple introduction to Qt and fixed links. --- doc/src/declarative/declarativeui.qdoc | 2 +- doc/src/declarative/qtquick-intro.qdoc | 2 +- doc/src/index.qdoc | 4 +- doc/src/qt-features.qdoc | 204 +++++++++++++++++++++++++++++++++ doc/src/qt4-intro.qdoc | 2 +- 5 files changed, 209 insertions(+), 5 deletions(-) create mode 100644 doc/src/qt-features.qdoc diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index 56ab29f..d1d82d8 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -46,7 +46,7 @@ Qt applications. \section1 Getting Started \list -\o \l{Intro to Qt Quick}{Introduction to Qt Quick} +\o \l{Introduction to Qt Quick} \o \l{QML for Qt Programmers}{QML Programming for Qt Programmers} \o \l{Getting Started Programming with QML} diff --git a/doc/src/declarative/qtquick-intro.qdoc b/doc/src/declarative/qtquick-intro.qdoc index bdad2c3..4cd5db3 100644 --- a/doc/src/declarative/qtquick-intro.qdoc +++ b/doc/src/declarative/qtquick-intro.qdoc @@ -27,7 +27,7 @@ /*! \page qml-intro.html -\title Intro to Qt Quick +\title Introduction to Qt Quick Qt Quick is a collection of technologies that are designed to help developers create the kind of intuitive, modern, and fluid user interfaces that are diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc index 979c654..2ce6781 100644 --- a/doc/src/index.qdoc +++ b/doc/src/index.qdoc @@ -36,8 +36,8 @@ What is Qt \enddiv \list - \o \l{Qt Whitepaper}{Qt C++ Framework} - \o \l{Intro to Qt Quick}{Qt Quick} + \o \l{Qt Features Overview} + \o \l{Introduction to Qt Quick}{Qt Quick} \o \l{external: Qt Mobility Manual}{Qt Mobility} \o \l{Qt WebKit} \endlist diff --git a/doc/src/qt-features.qdoc b/doc/src/qt-features.qdoc new file mode 100644 index 0000000..0ae00b0 --- /dev/null +++ b/doc/src/qt-features.qdoc @@ -0,0 +1,204 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms +** and conditions contained in a signed written agreement between you +** and Nokia. +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qt-overview.html + \title Qt Features Overview + + This document provides a summary of the most important features of Qt, + providing links to other pages in the documentation that cover these + features in more detail. It is not intended to be a comprehensive + guide to Qt's features. + + \section1 Fundamental Technologies in Qt + + Qt is built upon a set of core technologies, provided by the \l QtCore + and \l QtGui modules. These include the following: + + \list + \o \l{The Tulip Container Classes}, a set of template container classes. + \o \l{The Arthur Paint System}, the Qt 4 painting framework. + \o \l{The Interview Framework}, a model/view architecture for item views + and the \l{QtSQL Module}, which also uses this architecture. + \o \l{The Scribe Classes}, a framework for creating text documents, + performing low-level text layout and writing OpenDocument files. + \o A collection of \l{Qt Widget Gallery}{common desktop widgets}, styled + to fit in on each supported platform. + \o \l{The Qt 4 Main Window Classes}, a main window, toolbar, menu, and + docking architecture. + \o The \l{Graphics View} framework provides a canvas for producing + interactive graphics. + \o The \l{QtNetwork Module} provides support for TCP, UDP and local + sockets that are integrated with Qt's event model, including support + for Secure Socket Layer (SSL) communications, + \l{QNetworkProxy}{network proxy} servers and + \l{Bearer Management}{network bearer management}. + \o Enhanced \l{qt4-threads.html}{thread support} allows + \l{Signals & Slots}{signal-slot} connections across threads and + per-thread event loops. + Additionally, \l{Thread Support in Qt}{a framework for concurrent programming} + using Qt paradigms makes common threading tasks easier. + \o A \l{resource system} for embedding images and other resource files + into executable files makes it easier to deploy applications. + \o A \l{QTestLib Manual}{unit testing framework} for Qt applications and + libraries. + \endlist + + The mature classes provided by these technologies have been used to build + robust, cross-platform desktop applications. They are augmented by a number + of additional technologies and improvements that have appeared over the + lifetime of Qt 4. + + \section1 Graphical User Interfaces + + \div{class="float-right"} + \inlineimage gtk-tabwidget.png + \enddiv + \div{class="float-right"} + \inlineimage gtk-progressbar.png + \br + \inlineimage gtk-checkbox.png + \br + \inlineimage plastique-combobox.png + \br + \inlineimage plastique-radiobutton.png + \enddiv + + Alongside the support for traditional desktop user interfaces, Qt includes + support for declarative UI development with \l{Qt Quick}, a set of + technologies for creating fluid, dynamic user interfaces. A starting point + for exploring this approach can be found in the \l{Introduction to Qt Quick} + guide. + + Qt provides a range of standard user interface elements, called widgets, + for each supported platform. Widgets can be used as containers for other + widgets, as windows, and as regular controls that the user interacts with. + Where the platform supports it, widgets can be made to appear partially + transparent, and may be styled with \l{Qt Style Sheets}. + + Support for \l{QTouchEvent}{touch input} and \l{Gestures Programming}{gestures} + enable widgets to be used to create intuitive user interfaces for + touch-enabled devices. + + User interfaces can also be created dynamically at run-time with the + features provided by the \l{QtUiTools} module. + + A selection of available widgets are shown in the \l{Qt Widget Gallery}. + An introduction to the concepts behind widgets can be found in the + \l{Widgets Tutorial}. + + \clearfloat + \section1 Painting, Printing and Rendering + + \div{class="float-left"} + \inlineimage qpainter-affinetransformations.png + \enddiv + + Widgets are just one of many kinds of paint device that Qt can render onto. + This support for unified painting makes it possible for applications to use + the same painting code for different tasks, as well as allowing Qt to be + extended to support additional file formats. + + Qt provides support for common bitmap image formats, + \l{QtSvg Module}{Scalable Vector Graphics} (SVG) drawings and animations, + Postscript and Portable Document Format (PDF) files. Postscript and PDF are + integrated with \l{Printing with Qt}{Qt's printing system}, which also + allows printed output to be previewed. + + Interactive graphics can be created with the + \l{The Animation Framework}{animation framework}, allowing animations to be + used with both widgets and graphics items. Animations can be used with the + \l{The State Machine Framework}{state machine framework}, which provides a + way to express application logic and integrate it with the user interface. + Animations can be enhanced with a collection of + \l{QGraphicsEffect}{graphics effects} that operate on graphics items and + can be applied individually or combined to create more complex effects. + + Qt supports integration with \l{QtOpenGL}{OpenGL} on a number of levels, + providing convenience functions for handling textures and colors, as well + as providing support for pixel and sample buffers. Future support for + higher level 3D integration is provided by Qt3D enablers which include + \l{QMatrix4x4}{matrix multiplication}, \l{QQuaternion}{quaternions}, and an + API for \l{QGLShader}{vertex and fragment shaders}. + + Two APIs are provided for multimedia. The + \l{Phonon Overview}{Phonon Multimedia Framework} has traditionally been + used on desktop platforms. A set of + \l{QtMultimedia Module}{multimedia services} provides low-level access to + the system's audio system and is often used on mobile devices. + + \clearfloat + \section1 Infrastructure + + \div{class="float-right"} + \inlineimage qtscript-context2d.png + \enddiv + + Facilities for Inter-Process Communication (IPC) and Remote Procedure + Calling (RPC) mechanisms are available on platforms that support the + \l{intro-to-dbus.html}{D-Bus} message bus system. + + An \l{Undo Framework}{Undo framework} based on the + \l{Books about GUI Design#Design Patterns}{Command pattern} is designed to + enable a consistent approach to handling data in editing applications. + + The \l{QtScript} and \l{QtScriptTools} modules provide support for + application scripting and debugging using the ECMAScript language. + + The \l{QtHelp Module} provides the foundations of an interactive help + system that can be used in conjunction with Qt Creator or integrated into + applications directly. + + XML handling is supported in a number of places in Qt. The \l QtCore module + provides classes for reading and writing XML streams. The \l QtXmlPatterns + module includes XQuery, XPath and XSLT support, providing facilities for + XML processing beyond that supported by the QtXml module, which contains + SAX and DOM parsers. XML schema validation in the QtXmlPatterns module + covers large parts of version 1.0 of the specification. + + \clearfloat + \section1 Web Client Integration + + Integration between \l{Webkit in Qt}{Qt and WebKit} makes it possible for + developers to use a fully-featured Web browser engine to display documents + and access online services. Developers can access the browser's environment + to create documents and run scripts within one or more browser widgets. + + A \l{QWebElement}{DOM access API} for QtWebKit provides a cleaner and safer + way to access elements and structures of Web pages without the use of + JavaScript. + + \section1 Further Reading + + Many of the technologies mentioned here, as well as other, more specific + features, are listed in the \l{What's New in Qt 4} document. A complete + list of Qt's modules can be found on the \l{All Modules} page, which + also includes more domain-specific technologies. + + The tools that are supplied with Qt are covered by the listing in the + \l{Qt's Tools} document. +*/ diff --git a/doc/src/qt4-intro.qdoc b/doc/src/qt4-intro.qdoc index 41d8b2e..d75bdca 100644 --- a/doc/src/qt4-intro.qdoc +++ b/doc/src/qt4-intro.qdoc @@ -132,7 +132,7 @@ In Qt 4.4: \list - \o \l{Webkit in QT}{Qt WebKit integration}, making it possible for developers + \o \l{WebKit in Qt}{Qt WebKit integration}, making it possible for developers to use a fully-featured Web browser to display documents and access online services. \o A multimedia API provided by the \l{Phonon Overview}{Phonon Multimedia Framework}. -- cgit v0.12 From 6a2f18140bbc41207eb2f5e2323b699600d89606 Mon Sep 17 00:00:00 2001 From: David Boddie <david.boddie@nokia.com> Date: Thu, 30 Jun 2011 19:08:43 +0200 Subject: Modified \since command behavior slightly to handle project and version. (The since argument can contain a project name and version, defaulting to the qdoc project if only a version number is specified.) Refactored common code into the Generator class. Fixed \sincelist HTML generation for tables containing only one item. --- tools/qdoc3/ditaxmlgenerator.cpp | 83 ----------------------- tools/qdoc3/ditaxmlgenerator.h | 11 --- tools/qdoc3/doc.cpp | 2 +- tools/qdoc3/generator.cpp | 142 +++++++++++++++++++++++++++++++++++++-- tools/qdoc3/generator.h | 12 ++++ tools/qdoc3/htmlgenerator.cpp | 103 +++++----------------------- tools/qdoc3/htmlgenerator.h | 11 --- tools/qdoc3/node.cpp | 10 +++ tools/qdoc3/node.h | 2 +- 9 files changed, 174 insertions(+), 202 deletions(-) diff --git a/tools/qdoc3/ditaxmlgenerator.cpp b/tools/qdoc3/ditaxmlgenerator.cpp index c49ff65..64f12d6 100644 --- a/tools/qdoc3/ditaxmlgenerator.cpp +++ b/tools/qdoc3/ditaxmlgenerator.cpp @@ -62,25 +62,6 @@ QT_BEGIN_NAMESPACE #define COMMAND_VERSION Doc::alias("version") int DitaXmlGenerator::id = 0; -QString DitaXmlGenerator::sinceTitles[] = - { - " New Namespaces", - " New Classes", - " New Member Functions", - " New Functions in Namespaces", - " New Global Functions", - " New Macros", - " New Enum Types", - " New Typedefs", - " New Properties", - " New Variables", - " New QML Elements", - " New Qml Properties", - " New Qml Signals", - " New Qml Methods", - "" - }; - /* The strings in this array must appear in the same order as the values in enum DitaXmlGenerator::DitaTag. @@ -3955,70 +3936,6 @@ void DitaXmlGenerator::findAllClasses(const InnerNode* node) } } -/*! - For generating the "New Classes... in 4.x" section on the - What's New in 4.x" page. - */ -void DitaXmlGenerator::findAllSince(const InnerNode* node) -{ - NodeList::const_iterator child = node->childNodes().constBegin(); - while (child != node->childNodes().constEnd()) { - QString sinceVersion = (*child)->since(); - if (((*child)->access() != Node::Private) && !sinceVersion.isEmpty()) { - NewSinceMaps::iterator nsmap = newSinceMaps.find(sinceVersion); - if (nsmap == newSinceMaps.end()) - nsmap = newSinceMaps.insert(sinceVersion,NodeMultiMap()); - NewClassMaps::iterator ncmap = newClassMaps.find(sinceVersion); - if (ncmap == newClassMaps.end()) - ncmap = newClassMaps.insert(sinceVersion,NodeMap()); - NewClassMaps::iterator nqcmap = newQmlClassMaps.find(sinceVersion); - if (nqcmap == newQmlClassMaps.end()) - nqcmap = newQmlClassMaps.insert(sinceVersion,NodeMap()); - - if ((*child)->type() == Node::Function) { - FunctionNode *func = static_cast<FunctionNode *>(*child); - if ((func->status() > Node::Obsolete) && - (func->metaness() != FunctionNode::Ctor) && - (func->metaness() != FunctionNode::Dtor)) { - nsmap.value().insert(func->name(),(*child)); - } - } - else if ((*child)->url().isEmpty()) { - if ((*child)->type() == Node::Class && !(*child)->doc().isEmpty()) { - QString className = (*child)->name(); - if ((*child)->parent() && - (*child)->parent()->type() == Node::Namespace && - !(*child)->parent()->name().isEmpty()) - className = (*child)->parent()->name()+"::"+className; - nsmap.value().insert(className,(*child)); - ncmap.value().insert(className,(*child)); - } - else if ((*child)->subType() == Node::QmlClass) { - QString className = (*child)->name(); - if ((*child)->parent() && - (*child)->parent()->type() == Node::Namespace && - !(*child)->parent()->name().isEmpty()) - className = (*child)->parent()->name()+"::"+className; - nsmap.value().insert(className,(*child)); - nqcmap.value().insert(className,(*child)); - } - } - else { - QString name = (*child)->name(); - if ((*child)->parent() && - (*child)->parent()->type() == Node::Namespace && - !(*child)->parent()->name().isEmpty()) - name = (*child)->parent()->name()+"::"+name; - nsmap.value().insert(name,(*child)); - } - if ((*child)->isInnerNode()) { - findAllSince(static_cast<InnerNode *>(*child)); - } - } - ++child; - } -} - void DitaXmlGenerator::findAllFunctions(const InnerNode* node) { NodeList::ConstIterator c = node->childNodes().begin(); diff --git a/tools/qdoc3/ditaxmlgenerator.h b/tools/qdoc3/ditaxmlgenerator.h index 408f46c..d8d3563 100644 --- a/tools/qdoc3/ditaxmlgenerator.h +++ b/tools/qdoc3/ditaxmlgenerator.h @@ -51,12 +51,6 @@ QT_BEGIN_NAMESPACE -typedef QMultiMap<QString, Node*> NodeMultiMap; -typedef QMap<QString, NodeMultiMap> NewSinceMaps; -typedef QMap<Node*, NodeMultiMap> ParentMaps; -typedef QMap<QString, const Node*> NodeMap; -typedef QMap<QString, NodeMap> NewClassMaps; - typedef QMap<QString, QString> GuidMap; typedef QMap<QString, GuidMap*> GuidMaps; @@ -418,7 +412,6 @@ class DitaXmlGenerator : public PageGenerator void findAllFunctions(const InnerNode *node); void findAllLegaleseTexts(const InnerNode *node); void findAllNamespaces(const InnerNode *node); - void findAllSince(const InnerNode *node); static int hOffset(const Node *node); static bool isThreeColumnEnumValueTable(const Atom *atom); virtual QString getLink(const Atom *atom, @@ -515,10 +508,6 @@ class DitaXmlGenerator : public PageGenerator #endif QMap<QString, NodeMap > funcIndex; QMap<Text, const Node*> legaleseTexts; - NewSinceMaps newSinceMaps; - static QString sinceTitles[]; - NewClassMaps newClassMaps; - NewClassMaps newQmlClassMaps; static int id; static QString ditaTags[]; QStack<QXmlStreamWriter*> xmlWriterStack; diff --git a/tools/qdoc3/doc.cpp b/tools/qdoc3/doc.cpp index 479931d..37f68f8 100644 --- a/tools/qdoc3/doc.cpp +++ b/tools/qdoc3/doc.cpp @@ -828,7 +828,7 @@ void DocParser::parse(const QString& source, append(Atom::AnnotatedList, getArgument()); break; case CMD_SINCELIST: - append(Atom::SinceList, getArgument()); + append(Atom::SinceList, getRestOfLine().simplified()); break; case CMD_GENERATELIST: append(Atom::GeneratedList, getArgument()); diff --git a/tools/qdoc3/generator.cpp b/tools/qdoc3/generator.cpp index 6c92e54..355c9b2 100644 --- a/tools/qdoc3/generator.cpp +++ b/tools/qdoc3/generator.cpp @@ -77,6 +77,25 @@ QString Generator::outDir; QString Generator::project; QHash<QString, QString> Generator::outputPrefixes; +QString Generator::sinceTitles[] = + { + " New Namespaces", + " New Classes", + " New Member Functions", + " New Functions in Namespaces", + " New Global Functions", + " New Macros", + " New Enum Types", + " New Typedefs", + " New Properties", + " New Variables", + " New QML Elements", + " New QML Properties", + " New QML Signals", + " New QML Methods", + "" + }; + static void singularPlural(Text& text, const NodeList& nodes) { if (nodes.count() == 1) @@ -760,8 +779,18 @@ QString Generator::typeString(const Node *node) case Node::Class: return "class"; case Node::Fake: - default: - return "documentation"; + { + switch (node->subType()) { + case Node::QmlClass: + return "element"; + case Node::QmlPropertyGroup: + return "property group"; + case Node::QmlBasicType: + return "type"; + default: + return "documentation"; + } + } case Node::Enum: return "enum"; case Node::Typedef: @@ -770,6 +799,8 @@ QString Generator::typeString(const Node *node) return "function"; case Node::Property: return "property"; + default: + return "documentation"; } } @@ -1094,11 +1125,21 @@ void Generator::generateSince(const Node *node, CodeMarker *marker) text << " was introduced or modified in "; else text << " was introduced in "; - if (project.isEmpty()) - text << "version"; - else - text << project; - text << " " << node->since() << "." << Atom::ParaRight; + + QStringList since = node->since().split(" "); + if (since.count() == 1) { + // Handle legacy use of \since <version>. + if (project.isEmpty()) + text << "version"; + else + text << project; + text << " " << since[0]; + } else { + // Reconstruct the <project> <version> string. + text << " " << since.join(" "); + } + + text << "." << Atom::ParaRight; generateText(text, node, marker); } } @@ -1349,4 +1390,91 @@ QStringList Generator::getMetadataElements(const InnerNode* inner, const QString return s; } +/*! + For generating the "New Classes... in 4.6" section on the + What's New in 4.6" page. + */ +void Generator::findAllSince(const InnerNode *node) +{ + NodeList::const_iterator child = node->childNodes().constBegin(); + + // Traverse the tree, starting at the node supplied. + + while (child != node->childNodes().constEnd()) { + + QString sinceString = (*child)->since(); + + if (((*child)->access() != Node::Private) && !sinceString.isEmpty()) { + + // Insert a new entry into each map for each new since string found. + NewSinceMaps::iterator nsmap = newSinceMaps.find(sinceString); + if (nsmap == newSinceMaps.end()) + nsmap = newSinceMaps.insert(sinceString,NodeMultiMap()); + + NewClassMaps::iterator ncmap = newClassMaps.find(sinceString); + if (ncmap == newClassMaps.end()) + ncmap = newClassMaps.insert(sinceString,NodeMap()); + + NewClassMaps::iterator nqcmap = newQmlClassMaps.find(sinceString); + if (nqcmap == newQmlClassMaps.end()) + nqcmap = newQmlClassMaps.insert(sinceString,NodeMap()); + + if ((*child)->type() == Node::Function) { + // Insert functions into the general since map. + FunctionNode *func = static_cast<FunctionNode *>(*child); + if ((func->status() > Node::Obsolete) && + (func->metaness() != FunctionNode::Ctor) && + (func->metaness() != FunctionNode::Dtor)) { + nsmap.value().insert(func->name(),(*child)); + } + } + else if ((*child)->url().isEmpty()) { + if ((*child)->type() == Node::Class && !(*child)->doc().isEmpty()) { + // Insert classes into the since and class maps. + QString className = (*child)->name(); + if ((*child)->parent() && + (*child)->parent()->type() == Node::Namespace && + !(*child)->parent()->name().isEmpty()) + className = (*child)->parent()->name()+"::"+className; + + nsmap.value().insert(className,(*child)); + ncmap.value().insert(className,(*child)); + } + else if ((*child)->subType() == Node::QmlClass) { + // Insert QML elements into the since and element maps. + QString className = (*child)->name(); + if ((*child)->parent() && + (*child)->parent()->type() == Node::Namespace && + !(*child)->parent()->name().isEmpty()) + className = (*child)->parent()->name()+"::"+className; + + nsmap.value().insert(className,(*child)); + nqcmap.value().insert(className,(*child)); + } + else if ((*child)->type() == Node::QmlProperty) { + // Insert QML properties into the since map. + QString propertyName = (*child)->name(); + nsmap.value().insert(propertyName,(*child)); + } + } + else { + // Insert external documents into the general since map. + QString name = (*child)->name(); + if ((*child)->parent() && + (*child)->parent()->type() == Node::Namespace && + !(*child)->parent()->name().isEmpty()) + name = (*child)->parent()->name()+"::"+name; + + nsmap.value().insert(name,(*child)); + } + + // Find child nodes with since commands. + if ((*child)->isInnerNode()) { + findAllSince(static_cast<InnerNode *>(*child)); + } + } + ++child; + } +} + QT_END_NAMESPACE diff --git a/tools/qdoc3/generator.h b/tools/qdoc3/generator.h index e5e9747..e66915b 100644 --- a/tools/qdoc3/generator.h +++ b/tools/qdoc3/generator.h @@ -57,6 +57,12 @@ QT_BEGIN_NAMESPACE +typedef QMap<QString, const Node*> NodeMap; +typedef QMultiMap<QString, Node*> NodeMultiMap; +typedef QMap<QString, NodeMultiMap> NewSinceMaps; +typedef QMap<Node*, NodeMultiMap> ParentMaps; +typedef QMap<QString, NodeMap> NewClassMaps; + class ClassNode; class Config; class CodeMarker; @@ -152,6 +158,7 @@ class Generator QString getMetadataElement(const InnerNode* inner, const QString& t); QStringList getMetadataElements(const InnerNode* inner, const QString& t); + void findAllSince(const InnerNode *node); private: void generateReimplementedFrom(const FunctionNode *func, @@ -180,6 +187,11 @@ class Generator const NodeList& subs, CodeMarker *marker); + static QString sinceTitles[]; + NewSinceMaps newSinceMaps; + NewClassMaps newClassMaps; + NewClassMaps newQmlClassMaps; + private: QString amp; QString lt; diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 52da178..655c3b4 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -66,25 +66,6 @@ bool HtmlGenerator::debugging_on = false; QString HtmlGenerator::divNavTop = ""; -QString HtmlGenerator::sinceTitles[] = - { - " New Namespaces", - " New Classes", - " New Member Functions", - " New Functions in Namespaces", - " New Global Functions", - " New Macros", - " New Enum Types", - " New Typedefs", - " New Properties", - " New Variables", - " New QML Elements", - " New QML Properties", - " New QML Signals", - " New QML Methods", - "" - }; - static bool showBrokenLinks = false; static QRegExp linkTag("(<@link node=\"([^\"]+)\">).*(</@link>)"); @@ -606,14 +587,18 @@ int HtmlGenerator::generateAtom(const Atom *atom, ncmap = newClassMaps.find(atom->string()); NewClassMaps::const_iterator nqcmap; nqcmap = newQmlClassMaps.find(atom->string()); + if ((nsmap != newSinceMaps.constEnd()) && !nsmap.value().isEmpty()) { QList<Section> sections; QList<Section>::ConstIterator s; + for (int i=0; i<LastSinceType; ++i) sections.append(Section(sinceTitle(i),QString(),QString(),QString())); NodeMultiMap::const_iterator n = nsmap.value().constBegin(); + while (n != nsmap.value().constEnd()) { + const Node* node = n.value(); switch (node->type()) { case Node::Fake: @@ -1346,6 +1331,7 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) // Generate brief text and status for modules. generateBrief(fake, marker); generateStatus(fake, marker); + generateSince(fake, marker); if (moduleNamespaceMap.contains(fake->name())) { out() << "<a name=\"" << registerRef("namespaces") << "\"></a>" << divNavTop << "\n"; @@ -1362,6 +1348,7 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) // Generate brief text and status for modules. generateBrief(fake, marker); generateStatus(fake, marker); + generateSince(fake, marker); out() << "<ul>\n"; @@ -1393,6 +1380,7 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) generateQmlInherits(qml_cn, marker); generateQmlInheritedBy(qml_cn, marker); generateQmlInstantiates(qml_cn, marker); + generateSince(qml_cn, marker); QString allQmlMembersLink = generateAllQmlMembersFile(qml_cn, marker); if (!allQmlMembersLink.isEmpty()) { @@ -2242,9 +2230,6 @@ void HtmlGenerator::generateCompactList(const Node *relative, for (int i=0; i<NumParagraphs; i++) // i = 0..36 paragraphOffset[i+1] = paragraphOffset[i] + paragraph[i].count(); - int curParNr = 0; - int curParOffset = 0; - /* Output the alphabet as a row of links. */ @@ -2262,8 +2247,12 @@ void HtmlGenerator::generateCompactList(const Node *relative, Output a <div> element to contain all the <dl> elements. */ out() << "<div class=\"flowListDiv\">\n"; + numTableRows = 0; + + int curParNr = 0; + int curParOffset = 0; - for (int i=0; i<classMap.count()-1; i++) { + for (int i=0; i<classMap.count(); i++) { while ((curParNr < NumParagraphs) && (curParOffset == paragraph[curParNr].count())) { ++curParNr; @@ -2324,7 +2313,9 @@ void HtmlGenerator::generateCompactList(const Node *relative, out() << "</dd>\n"; curParOffset++; } - out() << "</dl>\n"; + if (classMap.count() > 0) + out() << "</dl>\n"; + out() << "</div>\n"; } @@ -3357,70 +3348,6 @@ void HtmlGenerator::findAllClasses(const InnerNode *node) } } -/*! - For generating the "New Classes... in 4.6" section on the - What's New in 4.6" page. - */ -void HtmlGenerator::findAllSince(const InnerNode *node) -{ - NodeList::const_iterator child = node->childNodes().constBegin(); - while (child != node->childNodes().constEnd()) { - QString sinceVersion = (*child)->since(); - if (((*child)->access() != Node::Private) && !sinceVersion.isEmpty()) { - NewSinceMaps::iterator nsmap = newSinceMaps.find(sinceVersion); - if (nsmap == newSinceMaps.end()) - nsmap = newSinceMaps.insert(sinceVersion,NodeMultiMap()); - NewClassMaps::iterator ncmap = newClassMaps.find(sinceVersion); - if (ncmap == newClassMaps.end()) - ncmap = newClassMaps.insert(sinceVersion,NodeMap()); - NewClassMaps::iterator nqcmap = newQmlClassMaps.find(sinceVersion); - if (nqcmap == newQmlClassMaps.end()) - nqcmap = newQmlClassMaps.insert(sinceVersion,NodeMap()); - - if ((*child)->type() == Node::Function) { - FunctionNode *func = static_cast<FunctionNode *>(*child); - if ((func->status() > Node::Obsolete) && - (func->metaness() != FunctionNode::Ctor) && - (func->metaness() != FunctionNode::Dtor)) { - nsmap.value().insert(func->name(),(*child)); - } - } - else if ((*child)->url().isEmpty()) { - if ((*child)->type() == Node::Class && !(*child)->doc().isEmpty()) { - QString className = (*child)->name(); - if ((*child)->parent() && - (*child)->parent()->type() == Node::Namespace && - !(*child)->parent()->name().isEmpty()) - className = (*child)->parent()->name()+"::"+className; - nsmap.value().insert(className,(*child)); - ncmap.value().insert(className,(*child)); - } - else if ((*child)->subType() == Node::QmlClass) { - QString className = (*child)->name(); - if ((*child)->parent() && - (*child)->parent()->type() == Node::Namespace && - !(*child)->parent()->name().isEmpty()) - className = (*child)->parent()->name()+"::"+className; - nsmap.value().insert(className,(*child)); - nqcmap.value().insert(className,(*child)); - } - } - else { - QString name = (*child)->name(); - if ((*child)->parent() && - (*child)->parent()->type() == Node::Namespace && - !(*child)->parent()->name().isEmpty()) - name = (*child)->parent()->name()+"::"+name; - nsmap.value().insert(name,(*child)); - } - if ((*child)->isInnerNode()) { - findAllSince(static_cast<InnerNode *>(*child)); - } - } - ++child; - } -} - void HtmlGenerator::findAllFunctions(const InnerNode *node) { NodeList::ConstIterator c = node->childNodes().begin(); diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h index 70ec0b7..e36c562 100644 --- a/tools/qdoc3/htmlgenerator.h +++ b/tools/qdoc3/htmlgenerator.h @@ -56,12 +56,6 @@ QT_BEGIN_NAMESPACE -typedef QMultiMap<QString, Node*> NodeMultiMap; -typedef QMap<QString, NodeMultiMap> NewSinceMaps; -typedef QMap<Node*, NodeMultiMap> ParentMaps; -typedef QMap<QString, const Node*> NodeMap; -typedef QMap<QString, NodeMap> NewClassMaps; - class HelpProjectWriter; class HtmlGenerator : public PageGenerator @@ -224,7 +218,6 @@ class HtmlGenerator : public PageGenerator void findAllFunctions(const InnerNode *node); void findAllLegaleseTexts(const InnerNode *node); void findAllNamespaces(const InnerNode *node); - void findAllSince(const InnerNode *node); static int hOffset(const Node *node); static bool isThreeColumnEnumValueTable(const Atom *atom); virtual QString getLink(const Atom *atom, @@ -292,10 +285,6 @@ class HtmlGenerator : public PageGenerator NodeMap qmlClasses; QMap<QString, NodeMap > funcIndex; QMap<Text, const Node *> legaleseTexts; - NewSinceMaps newSinceMaps; - static QString sinceTitles[]; - NewClassMaps newClassMaps; - NewClassMaps newQmlClassMaps; static int id; public: static bool debugging_on; diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp index 683c210..87bbd93 100644 --- a/tools/qdoc3/node.cpp +++ b/tools/qdoc3/node.cpp @@ -157,6 +157,16 @@ void Node::setLink(LinkType linkType, const QString &link, const QString &desc) } /*! + Sets the information about the project and version a node was introduced + in. The string is simplified, removing excess whitespace before being + stored. +*/ +void Node::setSince(const QString &since) +{ + sinc = since.simplified(); +} + +/*! Returns a string representing the access specifier. */ QString Node::accessString() const diff --git a/tools/qdoc3/node.h b/tools/qdoc3/node.h index e1e9440..cb16bea 100644 --- a/tools/qdoc3/node.h +++ b/tools/qdoc3/node.h @@ -151,7 +151,7 @@ class Node void setDoc(const Doc& doc, bool replace = false); void setStatus(Status status) { sta = status; } void setThreadSafeness(ThreadSafeness safeness) { saf = safeness; } - void setSince(const QString &since) { sinc = since; } + void setSince(const QString &since); void setRelates(InnerNode* pseudoParent); void setModuleName(const QString &module) { mod = module; } void setLink(LinkType linkType, const QString &link, const QString &desc); -- cgit v0.12 From 01b3f508d1f7e9951baf60f487feadfa98ba4751 Mon Sep 17 00:00:00 2001 From: David Boddie <david.boddie@nokia.com> Date: Thu, 30 Jun 2011 19:13:55 +0200 Subject: Doc: Removed whitespace. --- doc/src/qt4-intro.qdoc | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/src/qt4-intro.qdoc b/doc/src/qt4-intro.qdoc index d75bdca..1547a7c 100644 --- a/doc/src/qt4-intro.qdoc +++ b/doc/src/qt4-intro.qdoc @@ -610,7 +610,6 @@ introduced in Qt 4.7. \sincelist 4.7 - */ /*! -- cgit v0.12 From 609dc22f719ecb8d48349fd56f84960bbf46d731 Mon Sep 17 00:00:00 2001 From: David Boddie <david.boddie@nokia.com> Date: Thu, 30 Jun 2011 19:14:30 +0200 Subject: Doc: Standardized on QtQuick for \since declarations. --- src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp | 4 ++-- src/declarative/graphicsitems/qdeclarativeborderimage.cpp | 4 ++-- src/declarative/graphicsitems/qdeclarativeflickable.cpp | 4 ++-- src/declarative/graphicsitems/qdeclarativegridview.cpp | 2 +- src/declarative/graphicsitems/qdeclarativeimage.cpp | 4 ++-- src/declarative/graphicsitems/qdeclarativeitem.cpp | 2 +- src/declarative/graphicsitems/qdeclarativelistview.cpp | 2 +- src/declarative/graphicsitems/qdeclarativemousearea.cpp | 2 +- src/declarative/graphicsitems/qdeclarativepositioners.cpp | 6 +++--- src/declarative/graphicsitems/qdeclarativerepeater.cpp | 6 +++--- src/declarative/graphicsitems/qdeclarativetext.cpp | 8 ++++---- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 10 +++++----- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 8 ++++---- 13 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp b/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp index b7fcbb5..fb1bdf6 100644 --- a/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp @@ -88,7 +88,7 @@ QT_BEGIN_NAMESPACE /*! \qmlproperty bool AnimatedImage::cache - \since Quick 1.1 + \since QtQuick 1.1 Specifies whether the image should be cached. The default value is true. Setting \a cache to false is useful when dealing with large images, @@ -97,7 +97,7 @@ QT_BEGIN_NAMESPACE /*! \qmlproperty bool AnimatedImage::mirror - \since Quick 1.1 + \since QtQuick 1.1 This property holds whether the image should be horizontally inverted (effectively displaying a mirrored image). diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp index 836ad49..bd6405c 100644 --- a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp @@ -215,7 +215,7 @@ QDeclarativeBorderImage::~QDeclarativeBorderImage() /*! \qmlproperty bool BorderImage::cache - \since Quick 1.1 + \since QtQuick 1.1 Specifies whether the image should be cached. The default value is true. Setting \a cache to false is useful when dealing with large images, @@ -224,7 +224,7 @@ QDeclarativeBorderImage::~QDeclarativeBorderImage() /*! \qmlproperty bool BorderImage::mirror - \since Quick 1.1 + \since QtQuick 1.1 This property holds whether the image should be horizontally inverted (effectively displaying a mirrored image). diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index 4a465cc..93af16f 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -1414,7 +1414,7 @@ void QDeclarativeFlickable::setContentHeight(qreal h) /*! \qmlmethod Flickable::resizeContent(real width, real height, QPointF center) \preliminary - \since Quick 1.1 + \since QtQuick 1.1 Resizes the content to \a width x \a height about \a center. @@ -1454,7 +1454,7 @@ void QDeclarativeFlickable::resizeContent(qreal w, qreal h, QPointF center) /*! \qmlmethod Flickable::returnToBounds() \preliminary - \since Quick 1.1 + \since QtQuick 1.1 Ensures the content is within legal bounds. diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index afc3eac..5da3f77 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -2584,7 +2584,7 @@ void QDeclarativeGridView::positionViewAtIndex(int index, int mode) /*! \qmlmethod GridView::positionViewAtBeginning() \qmlmethod GridView::positionViewAtEnd() - \since Quick 1.1 + \since QtQuick 1.1 Positions the view at the beginning or end, taking into account any header or footer. diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index e6bb798..9b9d680 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -473,7 +473,7 @@ QRectF QDeclarativeImage::boundingRect() const /*! \qmlproperty bool Image::cache - \since Quick 1.1 + \since QtQuick 1.1 Specifies whether the image should be cached. The default value is true. Setting \a cache to false is useful when dealing with large images, @@ -482,7 +482,7 @@ QRectF QDeclarativeImage::boundingRect() const /*! \qmlproperty bool Image::mirror - \since Quick 1.1 + \since QtQuick 1.1 This property holds whether the image should be horizontally inverted (effectively displaying a mirrored image). diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index ccf0de0..ee2d19d 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -3444,7 +3444,7 @@ qreal QDeclarativeItem::implicitHeight() const /*! \qmlproperty real Item::implicitWidth \qmlproperty real Item::implicitHeight - \since Quick 1.1 + \since QtQuick 1.1 Defines the natural width or height of the Item if no \l width or \l height is specified. diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 8695bc6..16a76e2 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -3007,7 +3007,7 @@ void QDeclarativeListView::positionViewAtIndex(int index, int mode) /*! \qmlmethod ListView::positionViewAtBeginning() \qmlmethod ListView::positionViewAtEnd() - \since Quick 1.1 + \since QtQuick 1.1 Positions the view at the beginning or end, taking into account any header or footer. diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index 18f008a..0e06a4c 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -419,7 +419,7 @@ void QDeclarativeMouseArea::setEnabled(bool a) /*! \qmlproperty bool MouseArea::preventStealing - \since Quick 1.1 + \since QtQuick 1.1 This property holds whether the mouse events may be stolen from this MouseArea. diff --git a/src/declarative/graphicsitems/qdeclarativepositioners.cpp b/src/declarative/graphicsitems/qdeclarativepositioners.cpp index f3d1a68..483cad4 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners.cpp +++ b/src/declarative/graphicsitems/qdeclarativepositioners.cpp @@ -584,7 +584,7 @@ QDeclarativeRow::QDeclarativeRow(QDeclarativeItem *parent) /*! \qmlproperty enumeration Row::layoutDirection - \since Quick 1.1 + \since QtQuick 1.1 This property holds the layoutDirection of the row. @@ -878,7 +878,7 @@ void QDeclarativeGrid::setFlow(Flow flow) /*! \qmlproperty enumeration Grid::layoutDirection - \since Quick 1.1 + \since QtQuick 1.1 This property holds the layout direction of the layout. @@ -1236,7 +1236,7 @@ void QDeclarativeFlow::setFlow(Flow flow) /*! \qmlproperty enumeration Flow::layoutDirection - \since Quick 1.1 + \since QtQuick 1.1 This property holds the layout direction of the layout. diff --git a/src/declarative/graphicsitems/qdeclarativerepeater.cpp b/src/declarative/graphicsitems/qdeclarativerepeater.cpp index 813c255..e881b96 100644 --- a/src/declarative/graphicsitems/qdeclarativerepeater.cpp +++ b/src/declarative/graphicsitems/qdeclarativerepeater.cpp @@ -128,7 +128,7 @@ QDeclarativeRepeaterPrivate::~QDeclarativeRepeaterPrivate() /*! \qmlsignal Repeater::onItemAdded(int index, Item item) - \since Quick 1.1 + \since QtQuick 1.1 This handler is called when an item is added to the repeater. The \a index parameter holds the index at which the item has been inserted within the @@ -137,7 +137,7 @@ QDeclarativeRepeaterPrivate::~QDeclarativeRepeaterPrivate() /*! \qmlsignal Repeater::onItemRemoved(int index, Item item) - \since Quick 1.1 + \since QtQuick 1.1 This handler is called when an item is removed from the repeater. The \a index parameter holds the index at which the item was removed from the repeater, @@ -306,7 +306,7 @@ int QDeclarativeRepeater::count() const /*! \qmlmethod Item Repeater::itemAt(index) - \since Quick 1.1 + \since QtQuick 1.1 Returns the \l Item that has been created at the given \a index, or \c null if no item exists at \a index. diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 91c12d2..6d1b15d 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -1213,7 +1213,7 @@ void QDeclarativeText::setWrapMode(WrapMode mode) /*! \qmlproperty int Text::lineCount - \since Quick 1.1 + \since QtQuick 1.1 Returns the number of lines visible in the text item. @@ -1229,7 +1229,7 @@ int QDeclarativeText::lineCount() const /*! \qmlproperty bool Text::truncated - \since Quick 1.1 + \since QtQuick 1.1 Returns true if the text has been truncated due to \l maximumLineCount or \l elide. @@ -1246,7 +1246,7 @@ bool QDeclarativeText::truncated() const /*! \qmlproperty int Text::maximumLineCount - \since Quick 1.1 + \since QtQuick 1.1 Set this property to limit the number of lines that the text item will show. If elide is set to Text.ElideRight, the text will be elided appropriately. @@ -1480,7 +1480,7 @@ qreal QDeclarativeText::paintedHeight() const /*! \qmlproperty real Text::lineHeight - \since Quick 1.1 + \since QtQuick 1.1 Sets the line height for the text. The value can be in pixels or a multiplier depending on lineHeightMode. diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 42c520c..15a3cae 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -107,7 +107,7 @@ TextEdit { /*! \qmlsignal TextEdit::onLinkActivated(string link) - \since Quick 1.1 + \since QtQuick 1.1 This handler is called when the user clicks on a link embedded in the text. The link must be in rich text or HTML format and the @@ -616,7 +616,7 @@ void QDeclarativeTextEdit::setWrapMode(WrapMode mode) /*! \qmlproperty int TextEdit::lineCount - \since Quick 1.1 + \since QtQuick 1.1 Returns the total number of lines in the textEdit item. */ @@ -710,7 +710,7 @@ void QDeclarativeTextEdit::moveCursorSelection(int pos) /*! \qmlmethod void TextEdit::moveCursorSelection(int position, SelectionMode mode = TextEdit.SelectCharacters) - \since Quick 1.1 + \since QtQuick 1.1 Moves the cursor to \a position and updates the selection according to the optional \a mode parameter. (To only move the cursor, set the \l cursorPosition property.) @@ -1075,7 +1075,7 @@ void QDeclarativeTextEdit::setSelectByMouse(bool on) /*! \qmlproperty enum TextEdit::mouseSelectionMode - \since Quick 1.1 + \since QtQuick 1.1 Specifies how text should be selected using a mouse. @@ -1221,7 +1221,7 @@ void QDeclarativeTextEditPrivate::focusChanged(bool hasFocus) /*! \qmlmethod void TextEdit::deselect() - \since Quick 1.1 + \since QtQuick 1.1 Removes active text selection. */ diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index c59c919..1c64464 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -1014,7 +1014,7 @@ int QDeclarativeTextInput::positionAt(int x) const /*! \qmlmethod int TextInput::positionAt(int x, CursorPosition position = CursorBetweenCharacters) - \since Quick 1.1 + \since QtQuick 1.1 This function returns the character position at x pixels from the left of the textInput. Position 0 is before the @@ -1402,7 +1402,7 @@ QVariant QDeclarativeTextInput::inputMethodQuery(Qt::InputMethodQuery property) /*! \qmlmethod void TextInput::deselect() - \since Quick 1.1 + \since QtQuick 1.1 Removes active text selection. */ @@ -1574,7 +1574,7 @@ void QDeclarativeTextInput::setSelectByMouse(bool on) /*! \qmlproperty enum TextInput::mouseSelectionMode - \since Quick 1.1 + \since QtQuick 1.1 Specifies how text should be selected using a mouse. @@ -1622,7 +1622,7 @@ void QDeclarativeTextInput::moveCursorSelection(int position) /*! \qmlmethod void TextInput::moveCursorSelection(int position, SelectionMode mode = TextInput.SelectCharacters) - \since Quick 1.1 + \since QtQuick 1.1 Moves the cursor to \a position and updates the selection according to the optional \a mode parameter. (To only move the cursor, set the \l cursorPosition property.) -- cgit v0.12 From 358e018dbb4b4dbdbfc702a6d462f113a1357e1e Mon Sep 17 00:00:00 2001 From: David Boddie <david.boddie@nokia.com> Date: Thu, 30 Jun 2011 19:16:21 +0200 Subject: Doc: Fixed \since declarations. --- src/gui/kernel/qkeysequence.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index f8e4e57..8635bf2 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -934,7 +934,7 @@ QKeySequence::QKeySequence(const QString &key) } /*! - \since 4.x + \since 4.7 Creates a key sequence from the \a key string based on \a format. */ QKeySequence::QKeySequence(const QString &key, QKeySequence::SequenceFormat format) @@ -1131,7 +1131,7 @@ int QKeySequence::assign(const QString &ks) /*! \fn int QKeySequence::assign(const QString &keys, QKeySequence::SequenceFormat format) - \since 4.x + \since 4.7 Adds the given \a keys to the key sequence (based on \a format). \a keys may contain up to four key codes, provided they are -- cgit v0.12 From 86608d537eabc3cf7e1d1ddd1d0a2f90ccc2de2a Mon Sep 17 00:00:00 2001 From: David Boddie <david.boddie@nokia.com> Date: Thu, 30 Jun 2011 20:48:32 +0200 Subject: Doc: Clarified the range of return values from QLineF::angle(). Task-number: QTBUG-20197 --- src/corelib/tools/qline.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/corelib/tools/qline.cpp b/src/corelib/tools/qline.cpp index af3b7d5..0f67652 100644 --- a/src/corelib/tools/qline.cpp +++ b/src/corelib/tools/qline.cpp @@ -564,8 +564,9 @@ qreal QLineF::length() const Returns the angle of the line in degrees. - Positive values for the angles mean counter-clockwise while negative values - mean the clockwise direction. Zero degrees is at the 3 o'clock position. + The return value will be in the range of values from 0.0 up to but not + including 360.0. The angles are measured counter-clockwise from a point + on the x-axis to the right of the origin (x > 0). \sa setAngle() */ -- cgit v0.12 From ea0cb7ad2066d9c3dc695ab2ebe724249b05ca0f Mon Sep 17 00:00:00 2001 From: Ademar de Souza Reis Jr <ademar.reis@openbossa.org> Date: Tue, 9 Aug 2011 17:04:35 -0300 Subject: Updated WebKit to 66b76cdb8ef823f27a8229c5cae2d35e7f2d3c59 Signed-off-by: Ademar de Souza Reis Jr <ademar.reis@openbossa.org> --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/ChangeLog | 13 + .../webkit/Source/JavaScriptCore/ChangeLog | 157 + .../Source/JavaScriptCore/JavaScriptCore.pri | 2 +- src/3rdparty/webkit/Source/JavaScriptCore/jsc.cpp | 2 +- .../Source/JavaScriptCore/parser/JSParser.cpp | 63 +- .../Source/JavaScriptCore/runtime/JSONObject.cpp | 53 + .../webkit/Source/JavaScriptCore/wtf/ByteArray.h | 2 +- .../webkit/Source/JavaScriptCore/wtf/DateMath.cpp | 2 +- .../webkit/Source/JavaScriptCore/wtf/NullPtr.h | 2 +- .../JavaScriptCore/wtf/PageAllocatorSymbian.h | 2 +- .../webkit/Source/JavaScriptCore/wtf/Platform.h | 12 +- .../Source/JavaScriptCore/wtf/StackBounds.cpp | 6 +- .../Source/JavaScriptCore/wtf/text/AtomicString.h | 31 + .../JavaScriptCore/wtf/text/StringStatics.cpp | 31 +- .../webkit/Source/JavaScriptCore/wtf/wtf.pri | 10 +- .../webkit/Source/JavaScriptCore/yarr/YarrJIT.cpp | 3112 ++++++++++---------- .../Source/ThirdParty/gtest/codegear/gtest.cbproj | 274 +- .../ThirdParty/gtest/codegear/gtest.groupproj | 106 +- .../Source/ThirdParty/gtest/codegear/gtest_all.cc | 76 +- .../Source/ThirdParty/gtest/codegear/gtest_link.cc | 80 +- .../ThirdParty/gtest/codegear/gtest_main.cbproj | 164 +- .../gtest/codegear/gtest_unittest.cbproj | 174 +- src/3rdparty/webkit/Source/ThirdParty/gyp/gyp.bat | 10 +- .../Source/ThirdParty/gyp/samples/samples.bat | 10 +- .../ThirdParty/gyp/test/actions/gyptest-errors.py | 40 +- .../gyp/test/actions/src/subdir1/program.c | 24 +- .../actions/subdir1/actions-out/README.txt | 8 +- .../generator-output/actions/subdir1/program.c | 24 +- .../actions/subdir2/actions-out/README.txt | 8 +- .../rules/subdir2/rules-out/README.txt | 8 +- .../Source/ThirdParty/gyp/tools/pretty_gyp.py | 284 +- src/3rdparty/webkit/Source/WebCore/ChangeLog | 746 ++++- src/3rdparty/webkit/Source/WebCore/WebCore.exp.in | 8 + src/3rdparty/webkit/Source/WebCore/WebCore.pri | 12 +- src/3rdparty/webkit/Source/WebCore/WebCore.pro | 34 +- .../WebCore/bindings/generic/ActiveDOMCallback.cpp | 46 +- .../Source/WebCore/bindings/js/JSExceptionBase.h | 86 +- .../webkit/Source/WebCore/css/CSSStyleSelector.h | 2 +- .../webkit/Source/WebCore/css/CSSStyleSheet.cpp | 4 +- src/3rdparty/webkit/Source/WebCore/dom/Document.h | 2 +- src/3rdparty/webkit/Source/WebCore/dom/Element.cpp | 6 + src/3rdparty/webkit/Source/WebCore/dom/Range.cpp | 37 +- .../WebCore/editing/ReplaceSelectionCommand.cpp | 2 +- .../webkit/Source/WebCore/editing/TextIterator.cpp | 3 + src/3rdparty/webkit/Source/WebCore/features.pri | 24 +- .../webkit/Source/WebCore/generated/CSSGrammar.cpp | 1413 +++++---- .../webkit/Source/WebCore/generated/CSSGrammar.h | 14 +- .../Source/WebCore/generated/CSSPropertyNames.cpp | 2 +- .../Source/WebCore/generated/CSSValueKeywords.cpp | 2 +- .../webkit/Source/WebCore/generated/ColorData.cpp | 2 +- .../Source/WebCore/generated/DocTypeStrings.cpp | 2 +- .../WebCore/generated/JSWebGLRenderingContext.cpp | 76 + .../Source/WebCore/generated/XPathGrammar.cpp | 637 ++-- .../webkit/Source/WebCore/generated/XPathGrammar.h | 14 +- .../Source/WebCore/html/HTMLSourceElement.cpp | 6 +- .../Source/WebCore/html/HTMLTrackElement.cpp | 6 +- .../WebCore/html/shadow/MediaControlElements.cpp | 2 +- .../Source/WebCore/inspector/InspectorValues.cpp | 13 +- .../webkit/Source/WebCore/loader/FrameLoader.cpp | 27 +- .../webkit/Source/WebCore/loader/FrameLoader.h | 2 +- .../Source/WebCore/loader/cache/CachedResource.cpp | 5 +- .../webkit/Source/WebCore/make-hash-tools.pl | 15 +- .../webkit/Source/WebCore/page/DOMWindow.cpp | 10 +- .../webkit/Source/WebCore/page/FrameView.cpp | 2 +- .../webkit/Source/WebCore/page/Geolocation.cpp | 3 + .../webkit/Source/WebCore/page/Geolocation.h | 2 +- .../webkit/Source/WebCore/page/PrintContext.cpp | 7 + .../webkit/Source/WebCore/page/PrintContext.h | 4 + .../graphics/gstreamer/PlatformVideoWindowQt.cpp | 4 +- .../WebCore/platform/graphics/mac/FontCacheMac.mm | 15 +- .../WebCore/platform/mac/WebCoreSystemInterface.h | 20 + .../WebCore/platform/mac/WebCoreSystemInterface.mm | 4 + .../platform/mac/WebVideoFullscreenController.h | 72 + .../platform/mac/WebVideoFullscreenController.mm | 617 ++++ .../mac/WebVideoFullscreenHUDWindowController.h | 66 + .../mac/WebVideoFullscreenHUDWindowController.mm | 679 +++++ .../WebCore/platform/mac/WebWindowAnimation.h | 59 + .../WebCore/platform/mac/WebWindowAnimation.mm | 234 ++ .../WebCore/platform/network/HTTPHeaderMap.cpp | 12 + .../WebCore/platform/qt/WebCoreSystemInterface.h | 10 + .../WebCore/platform/qt/WebCoreSystemInterface.mm | 4 + .../webkit/Source/WebCore/plugins/PluginView.cpp | 5 +- .../Source/WebCore/rendering/RenderBlock.cpp | 2 +- .../WebCore/rendering/RenderBlockLineLayout.cpp | 2 +- .../webkit/Source/WebCore/rendering/RenderBox.cpp | 2 +- .../webkit/Source/WebCore/rendering/RenderBox.h | 2 + .../Source/WebCore/rendering/RenderFlexibleBox.cpp | 4 +- .../Source/WebCore/rendering/RenderIFrame.cpp | 5 +- .../Source/WebCore/rendering/RenderInline.cpp | 19 +- .../Source/WebCore/rendering/RenderLineBoxList.cpp | 15 +- .../webkit/Source/WebCore/rendering/RenderObject.h | 3 + .../Source/WebCore/rendering/RenderReplaced.cpp | 8 + .../Source/WebCore/rendering/RenderReplaced.h | 2 + .../Source/WebCore/rendering/RenderThemeWinCE.cpp | 2 +- .../Source/WebCore/rendering/RenderWidget.cpp | 4 + .../WebCore/rendering/svg/RenderSVGInline.cpp | 3 + .../WebCore/rendering/svg/SVGInlineFlowBox.cpp | 5 +- .../svg/SVGTextLayoutAttributesBuilder.cpp | 8 +- .../webkit/Source/WebCore/storage/IDBRequest.cpp | 7 +- .../Source/WebCore/svg/SVGElementInstance.cpp | 9 +- .../webkit/Source/WebCore/svg/SVGElementInstance.h | 1 + .../Source/WebCore/svg/SVGTextContentElement.cpp | 12 + .../Source/WebCore/svg/SVGTextContentElement.h | 1 + .../WebCore/svg/SVGTextPositioningElement.cpp | 38 +- .../Source/WebCore/svg/SVGTextPositioningElement.h | 1 - .../webkit/Source/WebCore/svg/SVGUseElement.cpp | 1 + .../webkit/Source/WebCore/xml/XPathFunctions.cpp | 30 +- .../webkit/Source/WebCore/xml/XPathPredicate.cpp | 16 +- .../webkit/Source/WebCore/xml/XPathResult.cpp | 8 +- src/3rdparty/webkit/Source/WebKit.pri | 1 + src/3rdparty/webkit/Source/WebKit/ChangeLog | 26 + .../webkit/Source/WebKit/qt/Api/qwebframe.cpp | 6 +- .../webkit/Source/WebKit/qt/Api/qwebview.cpp | 2 +- src/3rdparty/webkit/Source/WebKit/qt/ChangeLog | 249 ++ src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro | 26 +- .../WebKit/qt/WebCoreSupport/ChromeClientQt.cpp | 15 +- .../WebKit/qt/WebCoreSupport/ChromeClientQt.h | 5 +- .../qt/WebCoreSupport/FrameLoaderClientQt.cpp | 130 +- .../WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h | 10 +- .../WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp | 25 +- .../WebKit/qt/WebCoreSupport/FullScreenVideoQt.h | 6 + .../WebCoreSupport/QTKitFullScreenVideoHandler.h | 44 + .../WebCoreSupport/QTKitFullScreenVideoHandler.mm | 68 + .../WebKit/qt/WebCoreSupport/WebSystemInterface.mm | 4 + .../WebKit/qt/declarative/qdeclarativewebview.cpp | 2 + .../Source/WebKit/qt/symbian/bwins/QtWebKitu.def | 178 +- .../Source/WebKit/qt/symbian/eabi/QtWebKitu.def | 1727 +++++------ .../symbian/platformplugin/qss/OverlayWidget.qss | 116 +- .../MIMESniffing/resources/application_postscript | 272 +- .../qt/tests/MIMESniffing/resources/text_xml | 38 +- .../qt/tests/qwebframe/resources/testiframe.html | 104 +- .../qt/tests/qwebframe/resources/testiframe2.html | 38 +- .../WebKit/qt/tests/qwebframe/tst_qwebframe.cpp | 190 +- .../WebKit/qt/tests/qwebpage/tst_qwebpage.cpp | 30 + src/3rdparty/webkit/Source/WebKit2/ChangeLog | 27 + src/3rdparty/webkit/Source/WebKit2/WebKit2.pri | 2 +- .../WebKit2/WebProcess/Plugins/PluginView.cpp | 5 +- src/3rdparty/webkit/VERSION | 2 +- 139 files changed, 8670 insertions(+), 4759 deletions(-) create mode 100644 src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenController.h create mode 100644 src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenController.mm create mode 100644 src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.h create mode 100644 src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.mm create mode 100644 src/3rdparty/webkit/Source/WebCore/platform/mac/WebWindowAnimation.h create mode 100644 src/3rdparty/webkit/Source/WebCore/platform/mac/WebWindowAnimation.mm create mode 100644 src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/QTKitFullScreenVideoHandler.h create mode 100644 src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/QTKitFullScreenVideoHandler.mm diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index f786b78..2b42a20 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -a52dbae362a295e0adfb7ee4fdc21734ae4b7b45 +66b76cdb8ef823f27a8229c5cae2d35e7f2d3c59 diff --git a/src/3rdparty/webkit/ChangeLog b/src/3rdparty/webkit/ChangeLog index 96ef591..bc11b4d 100644 --- a/src/3rdparty/webkit/ChangeLog +++ b/src/3rdparty/webkit/ChangeLog @@ -1,3 +1,16 @@ +2011-08-06 Aron Rosenberg <arosenberg@logitech.com> + + Reviewed by Benjamin Poulain. + + [Qt] Fix build with Intel compiler on Windows + https://bugs.webkit.org/show_bug.cgi?id=65088 + + Disable Intel Compiler warning 873 - function "" has no corresponding operator + delete (to be called if an exception is thrown during initialization of an + allocated object). + + * Source/WebKit.pri: + 2011-06-27 Alexis Menard <alexis.menard@openbossa.org> Reviewed by Kenneth Rohde Christiansen. diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog index ae7ef60..3cc612a 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog +++ b/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog @@ -1,3 +1,160 @@ +2011-08-06 Aron Rosenberg <arosenberg@logitech.com> + + Reviewed by Benjamin Poulain. + + [Qt] Fix build with Intel compiler on Windows + https://bugs.webkit.org/show_bug.cgi?id=65088 + + Intel compiler needs .lib suffixes instead of .a + Intel compiler doesn't support nullptr + Intel compiler supports unsized arrays + + * JavaScriptCore.pri: + * jsc.cpp: + * wtf/ByteArray.h: + * wtf/NullPtr.h: + +2011-05-15 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen & Michael Saboff. + + https://bugs.webkit.org/show_bug.cgi?id=60860 + Simplify backtracking in YARR JIT + + YARR JIT currently performs a single pass of code generation over the pattern, + with special handling to allow the code generation for some backtracking code + out of line. We can simplify things by moving to a common mechanism whereby all + forwards matching code is generated in one pass, and all backtracking code is + generated in another. Backtracking code can be generated in reverse order, to + optimized the common fall-through case. + + To make it easier to walk over the pattern, we can first convert to a more + byte-code like format before JIT generating. In time we should unify this with + the YARR interpreter to more closely unify the two. + + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::jumpIfNoAvailableInput): + (JSC::Yarr::YarrGenerator::YarrOp::YarrOp): + (JSC::Yarr::YarrGenerator::BacktrackingState::BacktrackingState): + (JSC::Yarr::YarrGenerator::BacktrackingState::append): + (JSC::Yarr::YarrGenerator::BacktrackingState::fallthrough): + (JSC::Yarr::YarrGenerator::BacktrackingState::link): + (JSC::Yarr::YarrGenerator::BacktrackingState::linkTo): + (JSC::Yarr::YarrGenerator::BacktrackingState::takeBacktracksToJumpList): + (JSC::Yarr::YarrGenerator::BacktrackingState::isEmpty): + (JSC::Yarr::YarrGenerator::BacktrackingState::linkDataLabels): + (JSC::Yarr::YarrGenerator::BacktrackingState::ReturnAddressRecord::ReturnAddressRecord): + (JSC::Yarr::YarrGenerator::generateAssertionBOL): + (JSC::Yarr::YarrGenerator::backtrackAssertionBOL): + (JSC::Yarr::YarrGenerator::generateAssertionEOL): + (JSC::Yarr::YarrGenerator::backtrackAssertionEOL): + (JSC::Yarr::YarrGenerator::matchAssertionWordchar): + (JSC::Yarr::YarrGenerator::generateAssertionWordBoundary): + (JSC::Yarr::YarrGenerator::backtrackAssertionWordBoundary): + (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce): + (JSC::Yarr::YarrGenerator::backtrackPatternCharacterOnce): + (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed): + (JSC::Yarr::YarrGenerator::backtrackPatternCharacterFixed): + (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy): + (JSC::Yarr::YarrGenerator::backtrackPatternCharacterGreedy): + (JSC::Yarr::YarrGenerator::generatePatternCharacterNonGreedy): + (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy): + (JSC::Yarr::YarrGenerator::generateCharacterClassOnce): + (JSC::Yarr::YarrGenerator::backtrackCharacterClassOnce): + (JSC::Yarr::YarrGenerator::generateCharacterClassFixed): + (JSC::Yarr::YarrGenerator::backtrackCharacterClassFixed): + (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy): + (JSC::Yarr::YarrGenerator::backtrackCharacterClassGreedy): + (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy): + (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy): + (JSC::Yarr::YarrGenerator::generateTerm): + (JSC::Yarr::YarrGenerator::backtrackTerm): + (JSC::Yarr::YarrGenerator::generate): + (JSC::Yarr::YarrGenerator::backtrack): + (JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern): + (JSC::Yarr::YarrGenerator::opCompileParentheticalAssertion): + (JSC::Yarr::YarrGenerator::opCompileAlternative): + (JSC::Yarr::YarrGenerator::opCompileBody): + (JSC::Yarr::YarrGenerator::YarrGenerator): + (JSC::Yarr::YarrGenerator::compile): + +2011-06-08 Mikołaj Małecki <m.malecki@samsung.com> + + Reviewed by Pavel Feldman. + + Web Inspector: Crash by buffer overrun crash when serializing inspector object tree. + https://bugs.webkit.org/show_bug.cgi?id=52791 + + No new tests. The problem can be reproduced by trying to create InspectorValue + from 1.0e-100 and call ->toJSONString() on this. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + export 2 functions DecimalNumber::bufferLengthForStringExponential and + DecimalNumber::toStringExponential. + +2011-07-26 Alexis Menard <alexis.menard@openbossa.org> + + Unreviewed build fix for Qt/Linux. + + On platforms with no glib and gstreamer we should not build javascriptcore + with the Glib support. This is related to http://trac.webkit.org/changeset/91752. + + * wtf/wtf.pri: + +2011-07-26 Alexis Menard <alexis.menard@openbossa.org> + + Reviewed by Andreas Kling. + + [Qt] Change default backend to use GStreamer on Linux and QuickTime on Mac. + https://bugs.webkit.org/show_bug.cgi?id=63472 + + Enable the bits needed for GStreamer only when QtMultimedia is not used. + + * wtf/wtf.pri: + +2011-07-12 Hui Huang <Hui.2.Huang@nokia.com> + + Reviewed by Laszlo Gombos. + + [Qt] Fix compiling errors with QtWebkit 2.2 WINSCW build. + https://bugs.webkit.org/show_bug.cgi?id=64391 + + (QtWebKit-2.2 only, patch not in webkit trunk) + + * parser/JSParser.cpp: + * runtime/JSONObject.cpp: + * wtf/PageAllocatorSymbian.h: + * wtf/Platform.h: + * wtf/text/AtomicString.h: + * wtf/text/StringStatics.cpp: + + +2011-07-13 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> + + Reviewed by Andreas Kling. + + Broken build on QNX + https://bugs.webkit.org/show_bug.cgi?id=63717 + + QNX doesn't support pthread's SA_RESTART (required by + JSC_MULTIPLE_THREADS), JIT is broken at runtime and there a + few minor compilation errors here and there. + + Original patch by Ritt Konstantin <ritt.ks@gmail.com>, also + tested by him on QNX v6.5 (x86) + + * wtf/DateMath.cpp: fix usage of abs/labs + * wtf/Platform.h: Disable JIT and JSC_MULTIPLE_THREADS + * wtf/StackBounds.cpp: Add a couple of missing includes (and sort them) + +2011-07-09 Thouraya Andolsi <thouraya.andolsi@st.com> + + Fix unaligned userspace access for SH4 platforms. + https://bugs.webkit.org/show_bug.cgi?id=62993 + + * wtf/Platform.h: + 2011-05-23 Matthew Delaney <mdelaney@apple.com> Reviewed by Simon Fraser. diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri b/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri index f6d064f..d8290cf 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri +++ b/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri @@ -73,7 +73,7 @@ defineTest(prependJavaScriptCoreLib) { # Argument is the relative path to JavaScriptCore.pro's qmake output pathToJavaScriptCoreOutput = $$ARGS/$$JAVASCRIPTCORE_DESTDIR - win32-msvc*|wince* { + win32-msvc*|wince*|win32-icc { LIBS = -l$$JAVASCRIPTCORE_TARGET $$LIBS LIBS = -L$$pathToJavaScriptCoreOutput $$LIBS POST_TARGETDEPS += $${pathToJavaScriptCoreOutput}$${QMAKE_DIR_SEP}$${JAVASCRIPTCORE_TARGET}.lib diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/jsc.cpp b/src/3rdparty/webkit/Source/JavaScriptCore/jsc.cpp index 6ef8e18..5f63749 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/jsc.cpp +++ b/src/3rdparty/webkit/Source/JavaScriptCore/jsc.cpp @@ -312,7 +312,7 @@ EncodedJSValue JSC_HOST_CALL functionQuit(ExecState* exec) // be in a separate main function because the jscmain function requires object // unwinding. -#if COMPILER(MSVC) && !defined(_DEBUG) && !OS(WINCE) +#if COMPILER(MSVC) && !COMPILER(INTEL) && !defined(_DEBUG) && !OS(WINCE) #define TRY __try { #define EXCEPT(x) } __except (EXCEPTION_EXECUTE_HANDLER) { x; } #else diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/parser/JSParser.cpp b/src/3rdparty/webkit/Source/JavaScriptCore/parser/JSParser.cpp index f36c668..5f6d8cf 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/parser/JSParser.cpp +++ b/src/3rdparty/webkit/Source/JavaScriptCore/parser/JSParser.cpp @@ -215,13 +215,21 @@ private: template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseObjectLiteral(TreeBuilder&); template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseStrictObjectLiteral(TreeBuilder&); template <class TreeBuilder> ALWAYS_INLINE TreeArguments parseArguments(TreeBuilder&); +#if COMPILER(WINSCW) + template <bool strict, class TreeBuilder> ALWAYS_INLINE TreeProperty parseProperty(bool, TreeBuilder&); +#else template <bool strict, class TreeBuilder> ALWAYS_INLINE TreeProperty parseProperty(TreeBuilder&); +#endif template <class TreeBuilder> ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&); template <class TreeBuilder> ALWAYS_INLINE TreeFormalParameterList parseFormalParameters(TreeBuilder&); template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseVarDeclarationList(TreeBuilder&, int& declarations, const Identifier*& lastIdent, TreeExpression& lastInitializer, int& identStart, int& initStart, int& initEnd); template <class TreeBuilder> ALWAYS_INLINE TreeConstDeclList parseConstDeclarationList(TreeBuilder& context); enum FunctionRequirements { FunctionNoRequirements, FunctionNeedsName }; +#if COMPILER(WINSCW) + template <FunctionRequirements, bool nameIsInContainingScope, class TreeBuilder> bool parseFunctionInfo(FunctionRequirements, bool, TreeBuilder&, const Identifier*&, TreeFormalParameterList&, TreeFunctionBody&, int& openBrace, int& closeBrace, int& bodyStartLine); +#else template <FunctionRequirements, bool nameIsInContainingScope, class TreeBuilder> bool parseFunctionInfo(TreeBuilder&, const Identifier*&, TreeFormalParameterList&, TreeFunctionBody&, int& openBrace, int& closeBrace, int& bodyStartLine); +#endif ALWAYS_INLINE int isBinaryOperator(JSTokenType token); bool allowAutomaticSemicolon(); @@ -1290,7 +1298,11 @@ template <class TreeBuilder> TreeFunctionBody JSParser::parseFunctionBody(TreeBu return context.createFunctionBody(strictMode()); } +#if COMPILER(WINSCW) +template <JSParser::FunctionRequirements, bool, class TreeBuilder> bool JSParser::parseFunctionInfo(JSParser::FunctionRequirements requirements, bool nameIsInContainingScope, TreeBuilder& context, const Identifier*& name, TreeFormalParameterList& parameters, TreeFunctionBody& body, int& openBracePos, int& closeBracePos, int& bodyStartLine) +#else template <JSParser::FunctionRequirements requirements, bool nameIsInContainingScope, class TreeBuilder> bool JSParser::parseFunctionInfo(TreeBuilder& context, const Identifier*& name, TreeFormalParameterList& parameters, TreeFunctionBody& body, int& openBracePos, int& closeBracePos, int& bodyStartLine) +#endif { AutoPopScopeRef functionScope(this, pushScope()); functionScope->setIsFunction(); @@ -1371,7 +1383,11 @@ template <class TreeBuilder> TreeStatement JSParser::parseFunctionDeclaration(Tr int openBracePos = 0; int closeBracePos = 0; int bodyStartLine = 0; +#if COMPILER(WINSCW) + failIfFalse((parseFunctionInfo<FunctionNeedsName, true>(FunctionNeedsName, true, context, name, parameters, body, openBracePos, closeBracePos, bodyStartLine))); +#else failIfFalse((parseFunctionInfo<FunctionNeedsName, true>(context, name, parameters, body, openBracePos, closeBracePos, bodyStartLine))); +#endif failIfFalse(name); failIfFalseIfStrict(declareVariable(name)); return context.createFuncDeclStatement(name, body, parameters, openBracePos, closeBracePos, bodyStartLine, m_lastLine); @@ -1695,8 +1711,11 @@ template <class TreeBuilder> TreeExpression JSParser::parseBinaryExpression(Tree return context.popOperandStack(operandStackDepth); } - +#if COMPILER(WINSCW) +template <bool complete, class TreeBuilder> TreeProperty JSParser::parseProperty(bool complete, TreeBuilder& context) +#else template <bool complete, class TreeBuilder> TreeProperty JSParser::parseProperty(TreeBuilder& context) +#endif { bool wasIdent = false; switch (m_token.m_type) { @@ -1710,7 +1729,14 @@ template <bool complete, class TreeBuilder> TreeProperty JSParser::parseProperty next(); TreeExpression node = parseAssignmentExpression(context); failIfFalse(node); +#if COMPILER(WINSCW) + if (complete) + return context.template createProperty<true>(ident, node, PropertyNode::Constant); + else + return context.template createProperty<false>(ident, node, PropertyNode::Constant); +#else return context.template createProperty<complete>(ident, node, PropertyNode::Constant); +#endif } failIfFalse(wasIdent); matchOrFail(IDENT); @@ -1727,8 +1753,16 @@ template <bool complete, class TreeBuilder> TreeProperty JSParser::parseProperty type = PropertyNode::Setter; else fail(); +#if COMPILER(WINSCW) + failIfFalse((parseFunctionInfo<FunctionNeedsName, false>(FunctionNeedsName, false, context, accessorName, parameters, body, openBracePos, closeBracePos, bodyStartLine))); + if (complete) + return context.template createGetterOrSetterProperty<true>(type, accessorName, parameters, body, openBracePos, closeBracePos, bodyStartLine, m_lastLine); + else + return context.template createGetterOrSetterProperty<false>(type, accessorName, parameters, body, openBracePos, closeBracePos, bodyStartLine, m_lastLine); +#else failIfFalse((parseFunctionInfo<FunctionNeedsName, false>(context, accessorName, parameters, body, openBracePos, closeBracePos, bodyStartLine))); return context.template createGetterOrSetterProperty<complete>(type, accessorName, parameters, body, openBracePos, closeBracePos, bodyStartLine, m_lastLine); +#endif } case NUMBER: { double propertyName = m_token.m_data.doubleValue; @@ -1736,7 +1770,14 @@ template <bool complete, class TreeBuilder> TreeProperty JSParser::parseProperty consumeOrFail(COLON); TreeExpression node = parseAssignmentExpression(context); failIfFalse(node); +#if COMPILER(WINSCW) + if (complete) + return context.template createProperty<true>(m_globalData, propertyName, node, PropertyNode::Constant); + else + return context.template createProperty<false>(m_globalData, propertyName, node, PropertyNode::Constant); +#else return context.template createProperty<complete>(m_globalData, propertyName, node, PropertyNode::Constant); +#endif } default: failIfFalse(m_token.m_type & KeywordTokenFlag); @@ -1754,7 +1795,11 @@ template <class TreeBuilder> TreeExpression JSParser::parseObjectLiteral(TreeBui return context.createObjectLiteral(); } +#if COMPILER(WINSCW) + TreeProperty property = parseProperty<false>(false, context); +#else TreeProperty property = parseProperty<false>(context); +#endif failIfFalse(property); if (!m_syntaxAlreadyValidated && context.getType(property) != PropertyNode::Constant) { m_lexer->setOffset(startOffset); @@ -1768,7 +1813,11 @@ template <class TreeBuilder> TreeExpression JSParser::parseObjectLiteral(TreeBui // allow extra comma, see http://bugs.webkit.org/show_bug.cgi?id=5939 if (match(CLOSEBRACE)) break; +#if COMPILER(WINSCW) + property = parseProperty<false>(false, context); +#else property = parseProperty<false>(context); +#endif failIfFalse(property); if (!m_syntaxAlreadyValidated && context.getType(property) != PropertyNode::Constant) { m_lexer->setOffset(startOffset); @@ -1792,7 +1841,11 @@ template <class TreeBuilder> TreeExpression JSParser::parseStrictObjectLiteral(T return context.createObjectLiteral(); } +#if COMPILER(WINSCW) + TreeProperty property = parseProperty<true>(true, context); +#else TreeProperty property = parseProperty<true>(context); +#endif failIfFalse(property); typedef HashMap<RefPtr<StringImpl>, unsigned, IdentifierRepHash> ObjectValidationMap; @@ -1808,7 +1861,11 @@ template <class TreeBuilder> TreeExpression JSParser::parseStrictObjectLiteral(T // allow extra comma, see http://bugs.webkit.org/show_bug.cgi?id=5939 if (match(CLOSEBRACE)) break; +#if COMPILER(WINSCW) + property = parseProperty<true>(true, context); +#else property = parseProperty<true>(context); +#endif failIfFalse(property); if (!m_syntaxAlreadyValidated) { std::pair<ObjectValidationMap::iterator, bool> propertyEntryIter = objectValidator.add(context.getName(property).impl(), context.getType(property)); @@ -1987,7 +2044,11 @@ template <class TreeBuilder> TreeExpression JSParser::parseMemberExpression(Tree int closeBracePos = 0; int bodyStartLine = 0; next(); +#if COMPILER(WINSCW) + failIfFalse((parseFunctionInfo<FunctionNoRequirements, false>(FunctionNoRequirements, false, context, name, parameters, body, openBracePos, closeBracePos, bodyStartLine))); +#else failIfFalse((parseFunctionInfo<FunctionNoRequirements, false>(context, name, parameters, body, openBracePos, closeBracePos, bodyStartLine))); +#endif base = context.createFunctionExpr(name, body, parameters, openBracePos, closeBracePos, bodyStartLine, m_lastLine); } else base = parsePrimaryExpression(context); diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/runtime/JSONObject.cpp b/src/3rdparty/webkit/Source/JavaScriptCore/runtime/JSONObject.cpp index 8742fdc..27a508a 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/runtime/JSONObject.cpp +++ b/src/3rdparty/webkit/Source/JavaScriptCore/runtime/JSONObject.cpp @@ -76,8 +76,13 @@ private: class Stringifier { WTF_MAKE_NONCOPYABLE(Stringifier); public: +#if COMPILER(WINSCW) + Stringifier(ExecState*, const Local<Unknown>* replacer, const Local<Unknown>* space); + Local<Unknown> stringify(Handle<Unknown>*); +#else Stringifier(ExecState*, const Local<Unknown>& replacer, const Local<Unknown>& space); Local<Unknown> stringify(Handle<Unknown>); +#endif void visitAggregate(SlotVisitor&); @@ -197,6 +202,15 @@ JSValue PropertyNameForFunctionCall::value(ExecState* exec) const // ------------------------------ Stringifier -------------------------------- +#if COMPILER(WINSCW) +Stringifier::Stringifier(ExecState* exec, const Local<Unknown>* replacer, const Local<Unknown>* space) + : m_exec(exec) + , m_replacer(*replacer) + , m_usingArrayReplacer(false) + , m_arrayReplacerPropertyNames(exec) + , m_replacerCallType(CallTypeNone) + , m_gap(gap(exec, space->get())) +#else Stringifier::Stringifier(ExecState* exec, const Local<Unknown>& replacer, const Local<Unknown>& space) : m_exec(exec) , m_replacer(replacer) @@ -204,6 +218,7 @@ Stringifier::Stringifier(ExecState* exec, const Local<Unknown>& replacer, const , m_arrayReplacerPropertyNames(exec) , m_replacerCallType(CallTypeNone) , m_gap(gap(exec, space.get())) +#endif { if (!m_replacer.isObject()) return; @@ -244,17 +259,29 @@ Stringifier::Stringifier(ExecState* exec, const Local<Unknown>& replacer, const m_replacerCallType = m_replacer.asObject()->getCallData(m_replacerCallData); } +#if COMPILER(WINSCW) +Local<Unknown> Stringifier::stringify(Handle<Unknown>* value) +#else Local<Unknown> Stringifier::stringify(Handle<Unknown> value) +#endif { JSObject* object = constructEmptyObject(m_exec); if (m_exec->hadException()) return Local<Unknown>(m_exec->globalData(), jsNull()); PropertyNameForFunctionCall emptyPropertyName(m_exec->globalData().propertyNames->emptyIdentifier); +#if COMPILER(WINSCW) + object->putDirect(m_exec->globalData(), m_exec->globalData().propertyNames->emptyIdentifier, value->get()); +#else object->putDirect(m_exec->globalData(), m_exec->globalData().propertyNames->emptyIdentifier, value.get()); +#endif UStringBuilder result; +#if COMPILER(WINSCW) + if (appendStringifiedValue(result, value->get(), object, emptyPropertyName) != StringifySucceeded) +#else if (appendStringifiedValue(result, value.get(), object, emptyPropertyName) != StringifySucceeded) +#endif return Local<Unknown>(m_exec->globalData(), jsUndefined()); if (m_exec->hadException()) return Local<Unknown>(m_exec->globalData(), jsNull()); @@ -606,6 +633,15 @@ bool JSONObject::getOwnPropertyDescriptor(ExecState* exec, const Identifier& pro class Walker { public: +#if COMPILER(WINSCW) + Walker(ExecState* exec, Handle<JSObject>* function, CallType callType, CallData callData) + : m_exec(exec) + , m_function(exec->globalData(), *function) + , m_callType(callType) + , m_callData(callData) + { + } +#else Walker(ExecState* exec, Handle<JSObject> function, CallType callType, CallData callData) : m_exec(exec) , m_function(exec->globalData(), function) @@ -613,6 +649,7 @@ public: , m_callData(callData) { } +#endif JSValue walk(JSValue unfiltered); private: JSValue callReviver(JSObject* thisObj, JSValue property, JSValue unfiltered) @@ -829,7 +866,12 @@ EncodedJSValue JSC_HOST_CALL JSONProtoFuncParse(ExecState* exec) CallType callType = getCallData(function, callData); if (callType == CallTypeNone) return JSValue::encode(unfiltered); +#if COMPILER(WINSCW) + Local<JSObject> handle(exec->globalData(), asObject(function)); + return JSValue::encode(Walker(exec, &handle, callType, callData).walk(unfiltered)); +#else return JSValue::encode(Walker(exec, Local<JSObject>(exec->globalData(), asObject(function)), callType, callData).walk(unfiltered)); +#endif } // ECMA-262 v5 15.12.3 @@ -841,13 +883,24 @@ EncodedJSValue JSC_HOST_CALL JSONProtoFuncStringify(ExecState* exec) Local<Unknown> value(exec->globalData(), exec->argument(0)); Local<Unknown> replacer(exec->globalData(), exec->argument(1)); Local<Unknown> space(exec->globalData(), exec->argument(2)); +#if COMPILER(WINSCW) + return JSValue::encode(Stringifier(exec, &replacer, &space).stringify(&value).get()); +#else return JSValue::encode(Stringifier(exec, replacer, space).stringify(value).get()); +#endif } UString JSONStringify(ExecState* exec, JSValue value, unsigned indent) { LocalScope scope(exec->globalData()); +#if COMPILER(WINSCW) + Local<Unknown> replacer(exec->globalData(), jsNull()); + Local<Unknown> space(exec->globalData(), jsNumber(indent)); + Local<Unknown> valueHandle(exec->globalData(), value); + Local<Unknown> result = Stringifier(exec, &replacer, &space).stringify(&valueHandle); +#else Local<Unknown> result = Stringifier(exec, Local<Unknown>(exec->globalData(), jsNull()), Local<Unknown>(exec->globalData(), jsNumber(indent))).stringify(Local<Unknown>(exec->globalData(), value)); +#endif if (result.isUndefinedOrNull()) return UString(); return result.getString(exec); diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/ByteArray.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/ByteArray.h index bdec630..47b1cff 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/ByteArray.h +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/ByteArray.h @@ -91,7 +91,7 @@ namespace WTF { // MSVC can't handle correctly unsized array. // warning C4200: nonstandard extension used : zero-sized array in struct/union // Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array -#if COMPILER(MSVC) +#if COMPILER(MSVC) && !COMPILER(INTEL) unsigned char m_data[INT_MAX]; #else unsigned char m_data[]; diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/DateMath.cpp b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/DateMath.cpp index d414eae..b181ee2 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/DateMath.cpp +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/DateMath.cpp @@ -692,7 +692,7 @@ double parseES5DateFromNullTerminatedCharacters(const char* dateString) return NaN; if (*postParsePosition != ':' || (postParsePosition - currentPosition) != 2) return NaN; - tzHoursAbs = abs(tzHours); + tzHoursAbs = labs(tzHours); currentPosition = postParsePosition + 1; if (!isASCIIDigit(*currentPosition)) diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/NullPtr.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/NullPtr.h index c0e7bd3..9c4319d 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/NullPtr.h +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/NullPtr.h @@ -35,7 +35,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define __has_feature(feature) 0 #endif -#if __has_feature(cxx_nullptr) || (GCC_VERSION_AT_LEAST(4, 6, 0) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || (defined(_MSC_VER) && _MSC_VER >= 1600) +#if __has_feature(cxx_nullptr) || (GCC_VERSION_AT_LEAST(4, 6, 0) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || (defined(_MSC_VER) && _MSC_VER >= 1600 && !COMPILER(INTEL)) #define HAVE_NULLPTR 1 diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/PageAllocatorSymbian.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/PageAllocatorSymbian.h index eba5b03..d396379 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/PageAllocatorSymbian.h +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/PageAllocatorSymbian.h @@ -68,7 +68,7 @@ public: // Size of the large up-front reservation #if defined(__WINS__) // Emulator has limited virtual address space -const size_t largeReservationSize = 96*1024*1024; +const size_t largeReservationSize = 64*1024*1024; #else // HW has plenty of virtual addresses const size_t largeReservationSize = 256*1024*1024; diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h index 716d9e1..55f0b58 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h @@ -365,7 +365,7 @@ #endif /* ARM */ -#if CPU(ARM) || CPU(MIPS) +#if CPU(ARM) || CPU(MIPS) || CPU(SH4) #define WTF_CPU_NEEDS_ALIGNED_ACCESS 1 #endif @@ -581,7 +581,7 @@ #define WTF_USE_PTHREAD_BASED_QT 1 #endif -#if (PLATFORM(GTK) || PLATFORM(IOS) || PLATFORM(MAC) || PLATFORM(WIN) || (PLATFORM(QT) && (OS(DARWIN) || USE(PTHREAD_BASED_QT)) && !ENABLE(SINGLE_THREADED))) && !defined(ENABLE_JSC_MULTIPLE_THREADS) +#if (PLATFORM(GTK) || PLATFORM(IOS) || PLATFORM(MAC) || PLATFORM(WIN) || (PLATFORM(QT) && (OS(DARWIN) || USE(PTHREAD_BASED_QT)) && !ENABLE(SINGLE_THREADED))) && !OS(QNX) && !defined(ENABLE_JSC_MULTIPLE_THREADS) #define ENABLE_JSC_MULTIPLE_THREADS 1 #endif @@ -1019,11 +1019,17 @@ #define ENABLE_JIT 0 #endif +/* Disable JIT for WINSCW Symbian Emulator */ +#if !defined(ENABLE_JIT) && COMPILER(WINSCW) +#define ENABLE_JIT 0 +#endif + /* The JIT is enabled by default on all x86, x64-64, ARM & MIPS platforms. */ #if !defined(ENABLE_JIT) \ && (CPU(X86) || CPU(X86_64) || CPU(ARM) || CPU(MIPS)) \ && (OS(DARWIN) || !COMPILER(GCC) || GCC_VERSION_AT_LEAST(4, 1, 0)) \ - && !OS(WINCE) + && !OS(WINCE) \ + && !OS(QNX) #define ENABLE_JIT 1 #endif diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/StackBounds.cpp b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/StackBounds.cpp index 41e0d60..6b61270 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/StackBounds.cpp +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/StackBounds.cpp @@ -41,10 +41,12 @@ #elif OS(QNX) +#include <errno.h> #include <fcntl.h> -#include <sys/procfs.h> +#include <pthread.h> #include <stdio.h> -#include <errno.h> +#include <string.h> +#include <sys/procfs.h> #elif OS(UNIX) diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/AtomicString.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/AtomicString.h index 440700c..cc451e8 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/AtomicString.h +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/AtomicString.h @@ -113,6 +113,16 @@ public: static AtomicString fromUTF8(const char*, size_t); static AtomicString fromUTF8(const char*); +#if COMPILER(WINSCW) + static const AtomicString& nullAtom2(); + static const AtomicString& emptyAtom2(); + static const AtomicString& textAtom2(); + static const AtomicString& commentAtom2(); + static const AtomicString& starAtom2(); + static const AtomicString& xmlAtom2(); + static const AtomicString& xmlnsAtom2(); +#endif + private: String m_string; @@ -155,6 +165,24 @@ inline bool equalIgnoringCase(const String& a, const AtomicString& b) { return e // Define external global variables for the commonly used atomic strings. // These are only usable from the main thread. #ifndef ATOMICSTRING_HIDE_GLOBALS + +#if COMPILER(WINSCW) +extern const JS_EXPORTDATA AtomicString nullAtom1; +extern const JS_EXPORTDATA AtomicString emptyAtom1; +extern const JS_EXPORTDATA AtomicString textAtom1; +extern const JS_EXPORTDATA AtomicString commentAtom1; +extern const JS_EXPORTDATA AtomicString starAtom1; +extern const JS_EXPORTDATA AtomicString xmlAtom1; +extern const JS_EXPORTDATA AtomicString xmlnsAtom1; + +#define nullAtom AtomicString::nullAtom2() +#define emptyAtom AtomicString::emptyAtom2() +#define textAtom AtomicString::textAtom2() +#define commentAtom AtomicString::commentAtom2() +#define starAtom AtomicString::starAtom2() +#define xmlAtom AtomicString::xmlAtom2() +#define xmlnsAtom AtomicString::xmlnsAtom2() +#else extern const JS_EXPORTDATA AtomicString nullAtom; extern const JS_EXPORTDATA AtomicString emptyAtom; extern const JS_EXPORTDATA AtomicString textAtom; @@ -162,6 +190,7 @@ extern const JS_EXPORTDATA AtomicString commentAtom; extern const JS_EXPORTDATA AtomicString starAtom; extern const JS_EXPORTDATA AtomicString xmlAtom; extern const JS_EXPORTDATA AtomicString xmlnsAtom; +#endif inline AtomicString AtomicString::fromUTF8(const char* characters, size_t length) { @@ -190,6 +219,7 @@ template<> struct DefaultHash<AtomicString> { } // namespace WTF +#if !COMPILER(WINSCW) #ifndef ATOMICSTRING_HIDE_GLOBALS using WTF::AtomicString; using WTF::nullAtom; @@ -200,5 +230,6 @@ using WTF::starAtom; using WTF::xmlAtom; using WTF::xmlnsAtom; #endif +#endif #endif // AtomicString_h diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/StringStatics.cpp b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/StringStatics.cpp index ce08728..c5a8b43 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/StringStatics.cpp +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/StringStatics.cpp @@ -51,6 +51,15 @@ StringImpl* StringImpl::empty() return &emptyString; } +#if COMPILER(WINSCW) +static AtomicString nullAtom1; +static AtomicString emptyAtom1; +static AtomicString textAtom1; +static AtomicString commentAtom1; +static AtomicString starAtom1; +static AtomicString xmlAtom1; +static AtomicString xmlnsAtom1; +#else JS_EXPORTDATA DEFINE_GLOBAL(AtomicString, nullAtom) JS_EXPORTDATA DEFINE_GLOBAL(AtomicString, emptyAtom, "") JS_EXPORTDATA DEFINE_GLOBAL(AtomicString, textAtom, "#text") @@ -58,6 +67,7 @@ JS_EXPORTDATA DEFINE_GLOBAL(AtomicString, commentAtom, "#comment") JS_EXPORTDATA DEFINE_GLOBAL(AtomicString, starAtom, "*") JS_EXPORTDATA DEFINE_GLOBAL(AtomicString, xmlAtom, "xml") JS_EXPORTDATA DEFINE_GLOBAL(AtomicString, xmlnsAtom, "xmlns") +#endif void AtomicString::init() { @@ -67,6 +77,15 @@ void AtomicString::init() ASSERT(isMainThread()); // Use placement new to initialize the globals. +#if COMPILER(WINSCW) + new ((void*)&nullAtom1) AtomicString; + new ((void*)&emptyAtom1) AtomicString(""); + new ((void*)&textAtom1) AtomicString("#text"); + new ((void*)&commentAtom1) AtomicString("#comment"); + new ((void*)&starAtom1) AtomicString("*"); + new ((void*)&xmlAtom1) AtomicString("xml"); + new ((void*)&xmlnsAtom1) AtomicString("xmlns"); +#else new ((void*)&nullAtom) AtomicString; new ((void*)&emptyAtom) AtomicString(""); new ((void*)&textAtom) AtomicString("#text"); @@ -74,9 +93,19 @@ void AtomicString::init() new ((void*)&starAtom) AtomicString("*"); new ((void*)&xmlAtom) AtomicString("xml"); new ((void*)&xmlnsAtom) AtomicString("xmlns"); - +#endif initialized = true; } } +#if COMPILER(WINSCW) +const AtomicString& AtomicString::nullAtom2() { return nullAtom1;} +const AtomicString& AtomicString::emptyAtom2() { return emptyAtom1;} +const AtomicString& AtomicString::textAtom2() { return textAtom1;} +const AtomicString& AtomicString::commentAtom2() { return commentAtom1;} +const AtomicString& AtomicString::starAtom2() { return starAtom1;} +const AtomicString& AtomicString::xmlAtom2() { return xmlAtom1;} +const AtomicString& AtomicString::xmlnsAtom2() { return xmlnsAtom1;} +#endif + } diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/wtf.pri b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/wtf.pri index 10b41e4..5e48f9a 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/wtf.pri +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/wtf.pri @@ -41,10 +41,12 @@ SOURCES += \ wtf/unicode/icu/CollatorICU.cpp \ wtf/unicode/UTF8.cpp -contains(DEFINES, USE_GSTREAMER=1) { - DEFINES += ENABLE_GLIB_SUPPORT=1 - PKGCONFIG += glib-2.0 gio-2.0 - CONFIG += link_pkgconfig +linux-*:!contains(DEFINES, USE_QTMULTIMEDIA=1) { + system(pkg-config --exists glib-2.0 gio-2.0 gstreamer-0.10): { + DEFINES += ENABLE_GLIB_SUPPORT=1 + PKGCONFIG += glib-2.0 gio-2.0 + CONFIG += link_pkgconfig + } } unix:!symbian: SOURCES += wtf/OSAllocatorPosix.cpp diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/yarr/YarrJIT.cpp b/src/3rdparty/webkit/Source/JavaScriptCore/yarr/YarrJIT.cpp index ece2379..f3356b1 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/yarr/YarrJIT.cpp +++ b/src/3rdparty/webkit/Source/JavaScriptCore/yarr/YarrJIT.cpp @@ -228,9 +228,10 @@ class YarrGenerator : private MacroAssembler { } // Jumps if input not available; will have (incorrectly) incremented already! - Jump jumpIfNoAvailableInput(unsigned countToCheck) + Jump jumpIfNoAvailableInput(unsigned countToCheck = 0) { - add32(Imm32(countToCheck), index); + if (countToCheck) + add32(Imm32(countToCheck), index); return branch32(Above, index, length); } @@ -295,1056 +296,455 @@ class YarrGenerator : private MacroAssembler { jump(Address(stackPointerRegister, frameLocation * sizeof(void*))); } - struct IndirectJumpEntry { - IndirectJumpEntry(int32_t stackOffset) - : m_stackOffset(stackOffset) - { - } - - IndirectJumpEntry(int32_t stackOffset, Jump jump) - : m_stackOffset(stackOffset) - { - addJump(jump); - } - - IndirectJumpEntry(int32_t stackOffset, DataLabelPtr dataLabel) - : m_stackOffset(stackOffset) - { - addDataLabel(dataLabel); - } - - void addJump(Jump jump) - { - m_relJumps.append(jump); - } - - void addDataLabel(DataLabelPtr dataLabel) - { - m_dataLabelPtrVector.append(dataLabel); - } - - int32_t m_stackOffset; - JumpList m_relJumps; - Vector<DataLabelPtr, 16> m_dataLabelPtrVector; + enum YarrOpCode { + // These nodes wrap body alternatives - those in the main disjunction, + // rather than subpatterns or assertions. These are chained together in + // a doubly linked list, with a 'begin' node for the first alternative, + // a 'next' node for each subsequent alternative, and an 'end' node at + // the end. In the case of repeating alternatives, the 'end' node also + // has a reference back to 'begin'. + OpBodyAlternativeBegin, + OpBodyAlternativeNext, + OpBodyAlternativeEnd, + // Similar to the body alternatives, but used for subpatterns with two + // or more alternatives. + OpNestedAlternativeBegin, + OpNestedAlternativeNext, + OpNestedAlternativeEnd, + // Used for alternatives in subpatterns where there is only a single + // alternative (backtrackingis easier in these cases), or for alternatives + // which never need to be backtracked (those in parenthetical assertions, + // terminal subpatterns). + OpSimpleNestedAlternativeBegin, + OpSimpleNestedAlternativeNext, + OpSimpleNestedAlternativeEnd, + // Used to wrap 'Once' subpattern matches (quantityCount == 1). + OpParenthesesSubpatternOnceBegin, + OpParenthesesSubpatternOnceEnd, + // Used to wrap 'Terminal' subpattern matches (at the end of the regexp). + OpParenthesesSubpatternTerminalBegin, + OpParenthesesSubpatternTerminalEnd, + // Used to wrap parenthetical assertions. + OpParentheticalAssertionBegin, + OpParentheticalAssertionEnd, + // Wraps all simple terms (pattern characters, character classes). + OpTerm, + // Where an expression contains only 'once through' body alternatives + // and no repeating ones, this op is used to return match failure. + OpMatchFailed }; - struct AlternativeBacktrackRecord { - DataLabelPtr dataLabel; - Label backtrackLocation; - - AlternativeBacktrackRecord(DataLabelPtr dataLabel, Label backtrackLocation) - : dataLabel(dataLabel) - , backtrackLocation(backtrackLocation) - { - } - }; - - struct ParenthesesTail; - struct TermGenerationState; - - struct GenerationState { - typedef HashMap<int, IndirectJumpEntry*, WTF::IntHash<uint32_t>, UnsignedWithZeroKeyHashTraits<uint32_t> > IndirectJumpHashMap; - - GenerationState() - : m_parenNestingLevel(0) - { - } - - void addIndirectJumpEntry(int32_t stackOffset, Jump jump) - { - IndirectJumpHashMap::iterator result = m_indirectJumpMap.find(stackOffset); - - ASSERT(stackOffset >= 0); - - uint32_t offset = static_cast<uint32_t>(stackOffset); - - if (result == m_indirectJumpMap.end()) - m_indirectJumpMap.add(offset, new IndirectJumpEntry(stackOffset, jump)); - else - result->second->addJump(jump); - } - - void addIndirectJumpEntry(int32_t stackOffset, JumpList jumps) - { - JumpList::JumpVector jumpVector = jumps.jumps(); - size_t size = jumpVector.size(); - for (size_t i = 0; i < size; ++i) - addIndirectJumpEntry(stackOffset, jumpVector[i]); - - jumps.empty(); - } - - void addIndirectJumpEntry(int32_t stackOffset, DataLabelPtr dataLabel) - { - IndirectJumpHashMap::iterator result = m_indirectJumpMap.find(stackOffset); - - ASSERT(stackOffset >= 0); - - uint32_t offset = static_cast<uint32_t>(stackOffset); - - if (result == m_indirectJumpMap.end()) - m_indirectJumpMap.add(offset, new IndirectJumpEntry(stackOffset, dataLabel)); - else - result->second->addDataLabel(dataLabel); - } - - void emitIndirectJumpTable(MacroAssembler* masm) - { - for (IndirectJumpHashMap::iterator iter = m_indirectJumpMap.begin(); iter != m_indirectJumpMap.end(); ++iter) { - IndirectJumpEntry* indJumpEntry = iter->second; - size_t size = indJumpEntry->m_dataLabelPtrVector.size(); - if (size) { - // Link any associated DataLabelPtr's with indirect jump via label - Label hereLabel = masm->label(); - for (size_t i = 0; i < size; ++i) - m_backtrackRecords.append(AlternativeBacktrackRecord(indJumpEntry->m_dataLabelPtrVector[i], hereLabel)); - } - indJumpEntry->m_relJumps.link(masm); - masm->jump(Address(stackPointerRegister, indJumpEntry->m_stackOffset)); - delete indJumpEntry; - } - } - - void incrementParenNestingLevel() - { - ++m_parenNestingLevel; - } - - void decrementParenNestingLevel() - { - --m_parenNestingLevel; - } - - ParenthesesTail* addParenthesesTail(PatternTerm& term, JumpList* jumpListToPriorParen) - { - OwnPtr<ParenthesesTail> tail = adoptPtr(new ParenthesesTail(term, m_parenNestingLevel, jumpListToPriorParen)); - ParenthesesTail* rawTail = tail.get(); - - m_parenTails.append(tail.release()); - m_parenTailsForIteration.append(rawTail); - - return rawTail; - } - - void emitParenthesesTail(YarrGenerator* generator) - { - unsigned vectorSize = m_parenTails.size(); - bool priorBacktrackFallThrough = false; - - // Emit in reverse order so parentTail N can fall through to N-1 - for (unsigned index = vectorSize; index > 0; --index) { - JumpList jumpsToNext; - priorBacktrackFallThrough = m_parenTails[index-1].get()->generateCode(generator, jumpsToNext, priorBacktrackFallThrough, index > 1); - if (index > 1) - jumpsToNext.linkTo(generator->label(), generator); - else - addJumpsToNextInteration(jumpsToNext); - } - m_parenTails.clear(); - } - - void addJumpToNextInteration(Jump jump) + // This structure is used to hold the compiled opcode information, + // including reference back to the original PatternTerm/PatternAlternatives, + // and JIT compilation data structures. + struct YarrOp { + explicit YarrOp(PatternTerm* term) + : m_op(OpTerm) + , m_term(term) + , m_isDeadCode(false) { - m_jumpsToNextInteration.append(jump); } - void addJumpsToNextInteration(JumpList jumps) + explicit YarrOp(YarrOpCode op) + : m_op(op) + , m_isDeadCode(false) { - m_jumpsToNextInteration.append(jumps); } - void addDataLabelToNextIteration(DataLabelPtr dataLabel) - { - m_dataPtrsToNextIteration.append(dataLabel); - } - - void linkToNextIteration(Label label) - { - m_nextIteration = label; - - for (unsigned i = 0; i < m_dataPtrsToNextIteration.size(); ++i) - m_backtrackRecords.append(AlternativeBacktrackRecord(m_dataPtrsToNextIteration[i], m_nextIteration)); + // The operation, as a YarrOpCode, and also a reference to the PatternTerm. + YarrOpCode m_op; + PatternTerm* m_term; - m_dataPtrsToNextIteration.clear(); + // For alternatives, this holds the PatternAlternative and doubly linked + // references to this alternative's siblings. In the case of the + // OpBodyAlternativeEnd node at the end of a section of repeating nodes, + // m_nextOp will reference the OpBodyAlternativeBegin node of the first + // repeating alternative. + PatternAlternative* m_alternative; + size_t m_previousOp; + size_t m_nextOp; - for (unsigned i = 0; i < m_parenTailsForIteration.size(); ++i) - m_parenTailsForIteration[i]->setNextIteration(m_nextIteration); + // Used to record a set of Jumps out of the generated code, typically + // used for jumps out to backtracking code, and a single reentry back + // into the code for a node (likely where a backtrack will trigger + // rematching). + Label m_reentry; + JumpList m_jumps; - m_parenTailsForIteration.clear(); - } + // This flag is used to null out the second pattern character, when + // two are fused to match a pair together. + bool m_isDeadCode; - void linkToNextIteration(YarrGenerator* generator) - { - m_jumpsToNextInteration.linkTo(m_nextIteration, generator); - } + // Currently used in the case of some of the more complex management of + // 'm_checked', to cache the offset used in this alternative, to avoid + // recalculating it. + int m_checkAdjust; - int m_parenNestingLevel; - Vector<AlternativeBacktrackRecord> m_backtrackRecords; - IndirectJumpHashMap m_indirectJumpMap; - Label m_nextIteration; - Vector<OwnPtr<ParenthesesTail> > m_parenTails; - JumpList m_jumpsToNextInteration; - Vector<DataLabelPtr> m_dataPtrsToNextIteration; - Vector<ParenthesesTail*> m_parenTailsForIteration; + // Used by OpNestedAlternativeNext/End to hold the pointer to the + // value that will be pushed into the pattern's frame to return to, + // upon backtracking back into the disjunction. + DataLabelPtr m_returnAddress; }; - struct BacktrackDestination { - typedef enum { - NoBacktrack, - BacktrackLabel, - BacktrackStackOffset, - BacktrackJumpList, - BacktrackLinked - } BacktrackType; - - BacktrackDestination() - : m_backtrackType(NoBacktrack) - , m_backtrackToLabel(0) - , m_subDataLabelPtr(0) - , m_nextBacktrack(0) - , m_backtrackSourceLabel(0) - , m_backtrackSourceJumps(0) - { - } - - BacktrackDestination(int32_t stackOffset) - : m_backtrackType(BacktrackStackOffset) - , m_backtrackStackOffset(stackOffset) - , m_backtrackToLabel(0) - , m_subDataLabelPtr(0) - , m_nextBacktrack(0) - , m_backtrackSourceLabel(0) - , m_backtrackSourceJumps(0) - { - } - - BacktrackDestination(Label label) - : m_backtrackType(BacktrackLabel) - , m_backtrackLabel(label) - , m_backtrackToLabel(0) - , m_subDataLabelPtr(0) - , m_nextBacktrack(0) - , m_backtrackSourceLabel(0) - , m_backtrackSourceJumps(0) - { - } - - void clear(bool doDataLabelClear = true) - { - m_backtrackType = NoBacktrack; - if (doDataLabelClear) - clearDataLabel(); - m_nextBacktrack = 0; - } - - void clearDataLabel() - { - m_dataLabelPtr = DataLabelPtr(); - } - - bool hasDestination() - { - return (m_backtrackType != NoBacktrack); - } - - bool isStackOffset() - { - return (m_backtrackType == BacktrackStackOffset); - } - - bool isLabel() - { - return (m_backtrackType == BacktrackLabel); - } - - bool isJumpList() - { - return (m_backtrackType == BacktrackJumpList); - } - - bool hasDataLabel() - { - return m_dataLabelPtr.isSet(); - } - - void copyTarget(BacktrackDestination& rhs, bool copyDataLabel = true) - { - m_backtrackType = rhs.m_backtrackType; - if (m_backtrackType == BacktrackStackOffset) - m_backtrackStackOffset = rhs.m_backtrackStackOffset; - else if (m_backtrackType == BacktrackLabel) - m_backtrackLabel = rhs.m_backtrackLabel; - if (copyDataLabel) - m_dataLabelPtr = rhs.m_dataLabelPtr; - m_backtrackSourceJumps = rhs.m_backtrackSourceJumps; - m_backtrackSourceLabel = rhs.m_backtrackSourceLabel; - } - - void copyTo(BacktrackDestination& lhs) - { - lhs.m_backtrackType = m_backtrackType; - if (m_backtrackType == BacktrackStackOffset) - lhs.m_backtrackStackOffset = m_backtrackStackOffset; - else if (m_backtrackType == BacktrackLabel) - lhs.m_backtrackLabel = m_backtrackLabel; - lhs.m_backtrackSourceJumps = m_backtrackSourceJumps; - lhs.m_backtrackSourceLabel = m_backtrackSourceLabel; - lhs.m_dataLabelPtr = m_dataLabelPtr; - lhs.m_backTrackJumps = m_backTrackJumps; - } - - void addBacktrackJump(Jump jump) - { - m_backTrackJumps.append(jump); - } - - void setStackOffset(int32_t stackOffset) - { - m_backtrackType = BacktrackStackOffset; - m_backtrackStackOffset = stackOffset; - } - - void setLabel(Label label) - { - m_backtrackType = BacktrackLabel; - m_backtrackLabel = label; - } - - void setNextBacktrackLabel(Label label) + // BacktrackingState + // This class encapsulates information about the state of code generation + // whilst generating the code for backtracking, when a term fails to match. + // Upon entry to code generation of the backtracking code for a given node, + // the Backtracking state will hold references to all control flow sources + // that are outputs in need of further backtracking from the prior node + // generated (which is the subsequent operation in the regular expression, + // and in the m_ops Vector, since we generated backtracking backwards). + // These references to control flow take the form of: + // - A jump list of jumps, to be linked to code that will backtrack them + // further. + // - A set of DataLabelPtr values, to be populated with values to be + // treated effectively as return addresses backtracking into complex + // subpatterns. + // - A flag indicating that the current sequence of generated code up to + // this point requires backtracking. + class BacktrackingState { + public: + BacktrackingState() + : m_pendingFallthrough(false) { - if (m_nextBacktrack) - m_nextBacktrack->setLabel(label); } - void propagateBacktrackToLabel(const BacktrackDestination& rhs) + // Add a jump or jumps, a return address, or set the flag indicating + // that the current 'fallthrough' control flow requires backtracking. + void append(const Jump& jump) { - if (!m_backtrackToLabel && rhs.m_backtrackToLabel) - m_backtrackToLabel = rhs.m_backtrackToLabel; + m_laterFailures.append(jump); } - - void setBacktrackToLabel(Label* backtrackToLabel) + void append(JumpList& jumpList) { - if (!m_backtrackToLabel) - m_backtrackToLabel = backtrackToLabel; + m_laterFailures.append(jumpList); } - - bool hasBacktrackToLabel() + void append(const DataLabelPtr& returnAddress) { - return m_backtrackToLabel; + m_pendingReturns.append(returnAddress); } - - void setBacktrackJumpList(JumpList* jumpList) + void fallthrough() { - m_backtrackType = BacktrackJumpList; - m_backtrackSourceJumps = jumpList; + ASSERT(!m_pendingFallthrough); + m_pendingFallthrough = true; } - void setBacktrackSourceLabel(Label* backtrackSourceLabel) + // These methods clear the backtracking state, either linking to the + // current location, a provided label, or copying the backtracking out + // to a JumpList. All actions may require code generation to take place, + // and as such are passed a pointer to the assembler. + void link(MacroAssembler* assembler) { - m_backtrackSourceLabel = backtrackSourceLabel; - } - - void setDataLabel(DataLabelPtr dp) - { - if (m_subDataLabelPtr) { - *m_subDataLabelPtr = dp; - m_subDataLabelPtr = 0; - } else { - ASSERT(!hasDataLabel()); - m_dataLabelPtr = dp; + if (m_pendingReturns.size()) { + Label here(assembler); + for (unsigned i = 0; i < m_pendingReturns.size(); ++i) + m_backtrackRecords.append(ReturnAddressRecord(m_pendingReturns[i], here)); + m_pendingReturns.clear(); } + m_laterFailures.link(assembler); + m_laterFailures.clear(); + m_pendingFallthrough = false; } - - void clearSubDataLabelPtr() - { - m_subDataLabelPtr = 0; - } - - void setSubDataLabelPtr(DataLabelPtr* subDataLabelPtr) - { - m_subDataLabelPtr = subDataLabelPtr; - } - - void linkToNextBacktrack(BacktrackDestination* nextBacktrack) - { - m_nextBacktrack = nextBacktrack; - } - - int32_t getStackOffset() + void linkTo(Label label, MacroAssembler* assembler) { - ASSERT(m_backtrackType == BacktrackStackOffset); - return m_backtrackStackOffset; - } - - Label getLabel() - { - ASSERT(m_backtrackType == BacktrackLabel); - return m_backtrackLabel; - } - - JumpList& getBacktrackJumps() - { - return m_backTrackJumps; - } - - DataLabelPtr& getDataLabel() - { - return m_dataLabelPtr; - } - - void jumpToBacktrack(MacroAssembler* masm) - { - if (isJumpList()) { - if (m_backtrackSourceLabel && (m_backtrackSourceLabel->isSet())) - masm->jump().linkTo(*m_backtrackSourceLabel, masm); - else - m_backtrackSourceJumps->append(masm->jump()); - } else if (isStackOffset()) - masm->jump(Address(stackPointerRegister, m_backtrackStackOffset)); - else if (isLabel()) - masm->jump().linkTo(m_backtrackLabel, masm); - else - m_backTrackJumps.append(masm->jump()); - } - - void jumpToBacktrack(YarrGenerator* generator, Jump jump) - { - if (isJumpList()) { - if (m_backtrackSourceLabel && (m_backtrackSourceLabel->isSet())) - jump.linkTo(*m_backtrackSourceLabel, generator); - else - m_backtrackSourceJumps->append(jump); - } else if (isStackOffset()) - generator->m_expressionState.addIndirectJumpEntry(getStackOffset(), jump); - else if (isLabel()) - jump.linkTo(getLabel(), generator); - else - m_backTrackJumps.append(jump); - } - - void jumpToBacktrack(YarrGenerator* generator, JumpList& jumps) - { - if (isJumpList()) { - if (m_backtrackSourceLabel && (m_backtrackSourceLabel->isSet())) - jumps.linkTo(*m_backtrackSourceLabel, generator); - else - m_backtrackSourceJumps->append(jumps); - } else if (isStackOffset()) - generator->m_expressionState.addIndirectJumpEntry(getStackOffset(), jumps); - else if (isLabel()) - jumps.linkTo(getLabel(), generator); - else - m_backTrackJumps.append(jumps); - } - - bool plantJumpToBacktrackIfExists(YarrGenerator* generator) - { - if (isJumpList()) { - if (m_backtrackSourceLabel && (m_backtrackSourceLabel->isSet())) - generator->jump(*m_backtrackSourceLabel); - else - m_backtrackSourceJumps->append(generator->jump()); - - return true; + if (m_pendingReturns.size()) { + for (unsigned i = 0; i < m_pendingReturns.size(); ++i) + m_backtrackRecords.append(ReturnAddressRecord(m_pendingReturns[i], label)); + m_pendingReturns.clear(); } - - if (isStackOffset()) { - generator->jump(Address(stackPointerRegister, getStackOffset())); - return true; - } - - if (isLabel()) { - generator->jump(getLabel()); - if (hasDataLabel()) { - generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(getDataLabel(), getLabel())); - clearDataLabel(); - } - return true; + if (m_pendingFallthrough) + assembler->jump(label); + m_laterFailures.linkTo(label, assembler); + m_laterFailures.clear(); + m_pendingFallthrough = false; + } + void takeBacktracksToJumpList(JumpList& jumpList, MacroAssembler* assembler) + { + if (m_pendingReturns.size()) { + Label here(assembler); + for (unsigned i = 0; i < m_pendingReturns.size(); ++i) + m_backtrackRecords.append(ReturnAddressRecord(m_pendingReturns[i], here)); + m_pendingReturns.clear(); + m_pendingFallthrough = true; } - - return false; + if (m_pendingFallthrough) + jumpList.append(assembler->jump()); + jumpList.append(m_laterFailures); + m_laterFailures.clear(); + m_pendingFallthrough = false; } - void linkBacktrackToLabel(Label backtrackLabel) + bool isEmpty() { - if (m_backtrackToLabel) - *m_backtrackToLabel = backtrackLabel; - } - - void linkAlternativeBacktracks(YarrGenerator* generator, bool nextIteration = false) - { - Label hereLabel = generator->label(); - - if (m_backtrackToLabel) { - *m_backtrackToLabel = hereLabel; - m_backtrackToLabel = 0; - } - - m_backTrackJumps.link(generator); - - if (nextIteration) - generator->m_expressionState.linkToNextIteration(hereLabel); - - if (hasDataLabel()) { - generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(getDataLabel(), hereLabel)); - // data label cleared as a result of the clear() below - } - - clear(); + return m_laterFailures.empty() && m_pendingReturns.isEmpty() && !m_pendingFallthrough; } - void linkAlternativeBacktracksTo(YarrGenerator* generator, Label label, bool nextIteration = false) + // Called at the end of code generation to link all return addresses. + void linkDataLabels(LinkBuffer& linkBuffer) { - m_backTrackJumps.linkTo(label, generator); - - if (nextIteration) - generator->m_expressionState.linkToNextIteration(label); - - if (hasDataLabel()) { - generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(getDataLabel(), label)); - clearDataLabel(); - } + ASSERT(isEmpty()); + for (unsigned i = 0; i < m_backtrackRecords.size(); ++i) + linkBuffer.patch(m_backtrackRecords[i].m_dataLabel, linkBuffer.locationOf(m_backtrackRecords[i].m_backtrackLocation)); } private: - BacktrackType m_backtrackType; - int32_t m_backtrackStackOffset; - Label m_backtrackLabel; - DataLabelPtr m_dataLabelPtr; - Label* m_backtrackToLabel; - DataLabelPtr* m_subDataLabelPtr; - BacktrackDestination* m_nextBacktrack; - Label* m_backtrackSourceLabel; - JumpList* m_backtrackSourceJumps; - JumpList m_backTrackJumps; - }; - - struct TermGenerationState { - TermGenerationState(PatternDisjunction* disjunction, unsigned checkedTotal) - : disjunction(disjunction) - , checkedTotal(checkedTotal) - , m_subParenNum(0) - , m_linkedBacktrack(0) - , m_jumpList(0) - { - } - - void resetAlternative() - { - m_backtrack.clear(); - alt = 0; - } - bool alternativeValid() - { - return alt < disjunction->m_alternatives.size(); - } - void nextAlternative() - { - ++alt; - } - PatternAlternative* alternative() - { - return disjunction->m_alternatives[alt]; - } - bool isLastAlternative() - { - return (alt + 1) == disjunction->m_alternatives.size(); - } - - void resetTerm() - { - ASSERT(alternativeValid()); - t = 0; - m_subParenNum = 0; - } - bool termValid() - { - ASSERT(alternativeValid()); - return t < alternative()->m_terms.size(); - } - void nextTerm() - { - ASSERT(alternativeValid()); - ++t; - } - PatternTerm& term() - { - ASSERT(alternativeValid()); - return alternative()->m_terms[t]; - } - bool isLastTerm() - { - ASSERT(alternativeValid()); - return (t + 1) == alternative()->m_terms.size(); - } - unsigned getSubParenNum() - { - return m_subParenNum++; - } - bool isMainDisjunction() - { - return !disjunction->m_parent; - } - - void setJumpListToPriorParen(JumpList* jumpList) - { - m_jumpList = jumpList; - } - - JumpList* getJumpListToPriorParen() - { - return m_jumpList; - } - - PatternTerm& lookaheadTerm() - { - ASSERT(alternativeValid()); - ASSERT((t + 1) < alternative()->m_terms.size()); - return alternative()->m_terms[t + 1]; - } - bool isSinglePatternCharacterLookaheadTerm() - { - ASSERT(alternativeValid()); - return ((t + 1) < alternative()->m_terms.size()) - && (lookaheadTerm().type == PatternTerm::TypePatternCharacter) - && (lookaheadTerm().quantityType == QuantifierFixedCount) - && (lookaheadTerm().quantityCount == 1); - } - - int inputOffset() - { - return term().inputPosition - checkedTotal; - } - - void clearBacktrack() - { - m_backtrack.clear(false); - m_linkedBacktrack = 0; - } - - void jumpToBacktrack(MacroAssembler* masm) - { - m_backtrack.jumpToBacktrack(masm); - } - - void jumpToBacktrack(YarrGenerator* generator, Jump jump) - { - m_backtrack.jumpToBacktrack(generator, jump); - } - - void jumpToBacktrack(YarrGenerator* generator, JumpList& jumps) - { - m_backtrack.jumpToBacktrack(generator, jumps); - } - - bool plantJumpToBacktrackIfExists(YarrGenerator* generator) - { - return m_backtrack.plantJumpToBacktrackIfExists(generator); - } - - void linkDataLabelToBacktrackIfExists(YarrGenerator* generator, DataLabelPtr dataLabel) - { - // If we have a stack offset backtrack destination, use it directly - if (m_backtrack.isStackOffset()) { - generator->m_expressionState.addIndirectJumpEntry(m_backtrack.getStackOffset(), dataLabel); - m_backtrack.clearSubDataLabelPtr(); - } else { - // If we have a backtrack label, connect the datalabel to it directly. - if (m_backtrack.isLabel()) { - generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(dataLabel, m_backtrack.getLabel())); - m_backtrack.clearSubDataLabelPtr(); - } else - setBacktrackDataLabel(dataLabel); + struct ReturnAddressRecord { + ReturnAddressRecord(DataLabelPtr dataLabel, Label backtrackLocation) + : m_dataLabel(dataLabel) + , m_backtrackLocation(backtrackLocation) + { } - } - void addBacktrackJump(Jump jump) - { - m_backtrack.addBacktrackJump(jump); - } - - void setBacktrackDataLabel(DataLabelPtr dp) - { - m_backtrack.setDataLabel(dp); - } - - void setBackTrackStackOffset(int32_t stackOffset) - { - m_backtrack.setStackOffset(stackOffset); - } - - void setBacktrackLabel(Label label) - { - m_backtrack.setLabel(label); - } - - void linkAlternativeBacktracks(YarrGenerator* generator, bool nextIteration = false) - { - m_backtrack.linkAlternativeBacktracks(generator, nextIteration); - m_linkedBacktrack = 0; - } - - void linkAlternativeBacktracksTo(YarrGenerator* generator, Label label, bool nextIteration = false) - { - m_backtrack.linkAlternativeBacktracksTo(generator, label, nextIteration); - } - - void setBacktrackLink(BacktrackDestination* linkedBacktrack) - { - m_linkedBacktrack = linkedBacktrack; - } - - void chainBacktracks(BacktrackDestination* followonBacktrack) - { - if (m_linkedBacktrack) - m_linkedBacktrack->linkToNextBacktrack(followonBacktrack); - } - - BacktrackDestination& getBacktrackDestination() - { - return m_backtrack; - } - - void propagateBacktrackingFrom(YarrGenerator* generator, BacktrackDestination& backtrack, bool doJump = true) - { - if (doJump) - m_backtrack.jumpToBacktrack(generator, backtrack.getBacktrackJumps()); - - if (m_backtrack.isLabel() && backtrack.hasBacktrackToLabel()) - backtrack.linkBacktrackToLabel(m_backtrack.getLabel()); - - if (backtrack.hasDestination()) { - if (m_backtrack.hasDataLabel()) - generator->m_expressionState.addDataLabelToNextIteration(m_backtrack.getDataLabel()); - - m_backtrack.copyTarget(backtrack, doJump); - } - } + DataLabelPtr m_dataLabel; + Label m_backtrackLocation; + }; - PatternDisjunction* disjunction; - int checkedTotal; - private: - unsigned alt; - unsigned t; - unsigned m_subParenNum; - BacktrackDestination m_backtrack; - BacktrackDestination* m_linkedBacktrack; - JumpList* m_jumpList; + JumpList m_laterFailures; + bool m_pendingFallthrough; + Vector<DataLabelPtr, 4> m_pendingReturns; + Vector<ReturnAddressRecord, 4> m_backtrackRecords; }; - struct ParenthesesTail { - ParenthesesTail(PatternTerm& term, int nestingLevel, JumpList* jumpListToPriorParen) - : m_term(term) - , m_nestingLevel(nestingLevel) - , m_subParenIndex(0) - , m_jumpListToPriorParen(jumpListToPriorParen) - { - } - - void processBacktracks(YarrGenerator* generator, TermGenerationState& state, TermGenerationState& parenthesesState, Label nonGreedyTryParentheses, Label fallThrough) - { - m_nonGreedyTryParentheses = nonGreedyTryParentheses; - m_fallThrough = fallThrough; - - m_subParenIndex = state.getSubParenNum(); - parenthesesState.getBacktrackDestination().copyTo(m_parenBacktrack); - state.chainBacktracks(&m_backtrack); - BacktrackDestination& stateBacktrack = state.getBacktrackDestination(); - stateBacktrack.copyTo(m_backtrack); - stateBacktrack.setBacktrackToLabel(&m_backtrackToLabel); - state.setBacktrackLink(&m_backtrack); - stateBacktrack.setSubDataLabelPtr(&m_dataAfterLabelPtr); - - m_doDirectBacktrack = m_parenBacktrack.hasDestination(); - - if ((m_term.quantityType == QuantifierGreedy) || (m_term.quantityType == QuantifierNonGreedy)) - m_doDirectBacktrack = false; - - if (m_doDirectBacktrack) - state.propagateBacktrackingFrom(generator, m_parenBacktrack, false); - else { - stateBacktrack.setBacktrackJumpList(&m_afterBacktrackJumps); - stateBacktrack.setBacktrackSourceLabel(&m_backtrackFromAfterParens); - } - } - - void setNextIteration(Label nextIteration) - { - if (!m_nestingLevel && !m_backtrackToLabel.isSet()) - m_backtrackToLabel = nextIteration; - } - - void addAfterParenJump(Jump jump) - { - m_afterBacktrackJumps.append(jump); - } - - bool generateCode(YarrGenerator* generator, JumpList& jumpsToNext, bool priorBackTrackFallThrough, bool nextBacktrackFallThrough) - { - const RegisterID indexTemporary = regT0; - unsigned parenthesesFrameLocation = m_term.frameLocation; - Jump fromPriorBacktrack; - bool needJumpForPriorParenTail = false; - - if (priorBackTrackFallThrough - && ((m_term.quantityType == QuantifierGreedy) - || (m_term.quantityType == QuantifierNonGreedy) - || (!m_doDirectBacktrack && m_parenBacktrack.hasDestination()))) { - // If the prior paren tail code assumed that it could fall through, - // but we need to generate after paren backtrack code, then provide - // a jump around that code for the prior paren tail code. - // A regular expressing like ((xxx)...)? needs this. - fromPriorBacktrack = generator->jump(); - needJumpForPriorParenTail = true; - } - - if (!m_backtrack.hasDestination()) { - if (m_backtrackToLabel.isSet()) { - m_backtrack.setLabel(m_backtrackToLabel); - nextBacktrackFallThrough = false; - } else if (m_jumpListToPriorParen) { - // If we don't have a destination, go back to either the prior paren or the next outer paren. - m_backtrack.setBacktrackJumpList(m_jumpListToPriorParen); - nextBacktrackFallThrough = false; - } else - m_backtrack.setBacktrackJumpList(&jumpsToNext); - } else - nextBacktrackFallThrough = false; - - // A failure AFTER the parens jumps here - Backtrack to this paren - m_backtrackFromAfterParens = generator->label(); - - if (m_dataAfterLabelPtr.isSet()) - generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(m_dataAfterLabelPtr, m_backtrackFromAfterParens)); - - m_afterBacktrackJumps.link(generator); - - if (m_term.quantityType == QuantifierGreedy) { - // If this is -1 we have now tested with both with and without the parens. - generator->loadFromFrame(parenthesesFrameLocation, indexTemporary); - m_backtrack.jumpToBacktrack(generator, generator->branch32(Equal, indexTemporary, TrustedImm32(-1))); - } else if (m_term.quantityType == QuantifierNonGreedy) { - // If this is -1 we have now tested with both with and without the parens. - generator->loadFromFrame(parenthesesFrameLocation, indexTemporary); - generator->branch32(Equal, indexTemporary, TrustedImm32(-1)).linkTo(m_nonGreedyTryParentheses, generator); - } - - if (!m_doDirectBacktrack) - m_parenBacktrack.plantJumpToBacktrackIfExists(generator); - - // A failure WITHIN the parens jumps here - if (needJumpForPriorParenTail) - fromPriorBacktrack.link(generator); - m_parenBacktrack.linkAlternativeBacktracks(generator); - m_withinBacktrackJumps.link(generator); - - if (m_term.capture()) - generator->store32(TrustedImm32(-1), Address(output, (m_term.parentheses.subpatternId << 1) * sizeof(int))); + // Generation methods: + // =================== - if (m_term.quantityType == QuantifierGreedy) { - generator->storeToFrame(TrustedImm32(-1), parenthesesFrameLocation); - generator->jump().linkTo(m_fallThrough, generator); - nextBacktrackFallThrough = false; - } else if (!nextBacktrackFallThrough) - m_backtrack.jumpToBacktrack(generator); - - if (!m_doDirectBacktrack) - m_backtrack.setNextBacktrackLabel(m_backtrackFromAfterParens); - - return nextBacktrackFallThrough; - } - - PatternTerm& m_term; - int m_nestingLevel; - unsigned m_subParenIndex; - JumpList* m_jumpListToPriorParen; - Label m_nonGreedyTryParentheses; - Label m_fallThrough; - Label m_backtrackToLabel; - Label m_backtrackFromAfterParens; - DataLabelPtr m_dataAfterLabelPtr; - JumpList m_withinBacktrackJumps; - JumpList m_afterBacktrackJumps; - BacktrackDestination m_parenBacktrack; - BacktrackDestination m_backtrack; - bool m_doDirectBacktrack; - }; + // This method provides a default implementation of backtracking common + // to many terms; terms commonly jump out of the forwards matching path + // on any failed conditions, and add these jumps to the m_jumps list. If + // no special handling is required we can often just backtrack to m_jumps. + void backtrackTermDefault(size_t opIndex) + { + YarrOp& op = m_ops[opIndex]; + m_backtrackingState.append(op.m_jumps); + } - void generateAssertionBOL(TermGenerationState& state) + void generateAssertionBOL(size_t opIndex) { - PatternTerm& term = state.term(); + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; if (m_pattern.m_multiline) { const RegisterID character = regT0; JumpList matchDest; - if (!term.inputPosition) - matchDest.append(branch32(Equal, index, Imm32(state.checkedTotal))); + if (!term->inputPosition) + matchDest.append(branch32(Equal, index, Imm32(m_checked))); - readCharacter(state.inputOffset() - 1, character); + readCharacter((term->inputPosition - m_checked) - 1, character); matchCharacterClass(character, matchDest, m_pattern.newlineCharacterClass()); - state.jumpToBacktrack(this); + op.m_jumps.append(jump()); matchDest.link(this); } else { // Erk, really should poison out these alternatives early. :-/ - if (term.inputPosition) - state.jumpToBacktrack(this); + if (term->inputPosition) + op.m_jumps.append(jump()); else - state.jumpToBacktrack(this, branch32(NotEqual, index, Imm32(state.checkedTotal))); + op.m_jumps.append(branch32(NotEqual, index, Imm32(m_checked))); } } + void backtrackAssertionBOL(size_t opIndex) + { + backtrackTermDefault(opIndex); + } - void generateAssertionEOL(TermGenerationState& state) + void generateAssertionEOL(size_t opIndex) { - PatternTerm& term = state.term(); + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; if (m_pattern.m_multiline) { const RegisterID character = regT0; JumpList matchDest; - if (term.inputPosition == state.checkedTotal) + if (term->inputPosition == m_checked) matchDest.append(atEndOfInput()); - readCharacter(state.inputOffset(), character); + readCharacter((term->inputPosition - m_checked), character); matchCharacterClass(character, matchDest, m_pattern.newlineCharacterClass()); - state.jumpToBacktrack(this); + op.m_jumps.append(jump()); matchDest.link(this); } else { - if (term.inputPosition == state.checkedTotal) - state.jumpToBacktrack(this, notAtEndOfInput()); + if (term->inputPosition == m_checked) + op.m_jumps.append(notAtEndOfInput()); // Erk, really should poison out these alternatives early. :-/ else - state.jumpToBacktrack(this); + op.m_jumps.append(jump()); } } + void backtrackAssertionEOL(size_t opIndex) + { + backtrackTermDefault(opIndex); + } // Also falls though on nextIsNotWordChar. - void matchAssertionWordchar(TermGenerationState& state, JumpList& nextIsWordChar, JumpList& nextIsNotWordChar) + void matchAssertionWordchar(size_t opIndex, JumpList& nextIsWordChar, JumpList& nextIsNotWordChar) { + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; + const RegisterID character = regT0; - PatternTerm& term = state.term(); - if (term.inputPosition == state.checkedTotal) + if (term->inputPosition == m_checked) nextIsNotWordChar.append(atEndOfInput()); - readCharacter(state.inputOffset(), character); + readCharacter((term->inputPosition - m_checked), character); matchCharacterClass(character, nextIsWordChar, m_pattern.wordcharCharacterClass()); } - void generateAssertionWordBoundary(TermGenerationState& state) + void generateAssertionWordBoundary(size_t opIndex) { + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; + const RegisterID character = regT0; - PatternTerm& term = state.term(); Jump atBegin; JumpList matchDest; - if (!term.inputPosition) - atBegin = branch32(Equal, index, Imm32(state.checkedTotal)); - readCharacter(state.inputOffset() - 1, character); + if (!term->inputPosition) + atBegin = branch32(Equal, index, Imm32(m_checked)); + readCharacter((term->inputPosition - m_checked) - 1, character); matchCharacterClass(character, matchDest, m_pattern.wordcharCharacterClass()); - if (!term.inputPosition) + if (!term->inputPosition) atBegin.link(this); // We fall through to here if the last character was not a wordchar. JumpList nonWordCharThenWordChar; JumpList nonWordCharThenNonWordChar; - if (term.invert()) { - matchAssertionWordchar(state, nonWordCharThenNonWordChar, nonWordCharThenWordChar); + if (term->invert()) { + matchAssertionWordchar(opIndex, nonWordCharThenNonWordChar, nonWordCharThenWordChar); nonWordCharThenWordChar.append(jump()); } else { - matchAssertionWordchar(state, nonWordCharThenWordChar, nonWordCharThenNonWordChar); + matchAssertionWordchar(opIndex, nonWordCharThenWordChar, nonWordCharThenNonWordChar); nonWordCharThenNonWordChar.append(jump()); } - state.jumpToBacktrack(this, nonWordCharThenNonWordChar); + op.m_jumps.append(nonWordCharThenNonWordChar); // We jump here if the last character was a wordchar. matchDest.link(this); JumpList wordCharThenWordChar; JumpList wordCharThenNonWordChar; - if (term.invert()) { - matchAssertionWordchar(state, wordCharThenNonWordChar, wordCharThenWordChar); + if (term->invert()) { + matchAssertionWordchar(opIndex, wordCharThenNonWordChar, wordCharThenWordChar); wordCharThenWordChar.append(jump()); } else { - matchAssertionWordchar(state, wordCharThenWordChar, wordCharThenNonWordChar); + matchAssertionWordchar(opIndex, wordCharThenWordChar, wordCharThenNonWordChar); // This can fall-though! } - state.jumpToBacktrack(this, wordCharThenWordChar); + op.m_jumps.append(wordCharThenWordChar); nonWordCharThenWordChar.link(this); wordCharThenNonWordChar.link(this); } + void backtrackAssertionWordBoundary(size_t opIndex) + { + backtrackTermDefault(opIndex); + } - void generatePatternCharacterSingle(TermGenerationState& state) + void generatePatternCharacterOnce(size_t opIndex) { + YarrOp& op = m_ops[opIndex]; + + // m_ops always ends with a OpBodyAlternativeEnd or OpMatchFailed + // node, so there must always be at least one more node. + ASSERT(opIndex + 1 < m_ops.size()); + YarrOp& nextOp = m_ops[opIndex + 1]; + + if (op.m_isDeadCode) + return; + + PatternTerm* term = op.m_term; + UChar ch = term->patternCharacter; + const RegisterID character = regT0; - UChar ch = state.term().patternCharacter; + + if (nextOp.m_op == OpTerm) { + PatternTerm* nextTerm = nextOp.m_term; + if (nextTerm->type == PatternTerm::TypePatternCharacter + && nextTerm->quantityType == QuantifierFixedCount + && nextTerm->quantityCount == 1 + && nextTerm->inputPosition == (term->inputPosition + 1)) { + + UChar ch2 = nextTerm->patternCharacter; + + int mask = 0; + int chPair = ch | (ch2 << 16); + + if (m_pattern.m_ignoreCase) { + if (isASCIIAlpha(ch)) + mask |= 32; + if (isASCIIAlpha(ch2)) + mask |= 32 << 16; + } + + BaseIndex address(input, index, TimesTwo, (term->inputPosition - m_checked) * sizeof(UChar)); + if (mask) { + load32WithUnalignedHalfWords(address, character); + or32(Imm32(mask), character); + op.m_jumps.append(branch32(NotEqual, character, Imm32(chPair | mask))); + } else + op.m_jumps.append(branch32WithUnalignedHalfWords(NotEqual, address, Imm32(chPair))); + + nextOp.m_isDeadCode = true; + return; + } + } if (m_pattern.m_ignoreCase && isASCIIAlpha(ch)) { - readCharacter(state.inputOffset(), character); + readCharacter(term->inputPosition - m_checked, character); or32(TrustedImm32(32), character); - state.jumpToBacktrack(this, branch32(NotEqual, character, Imm32(Unicode::toLower(ch)))); + op.m_jumps.append(branch32(NotEqual, character, Imm32(Unicode::toLower(ch)))); } else { ASSERT(!m_pattern.m_ignoreCase || (Unicode::toLower(ch) == Unicode::toUpper(ch))); - state.jumpToBacktrack(this, jumpIfCharNotEquals(ch, state.inputOffset())); + op.m_jumps.append(jumpIfCharNotEquals(ch, term->inputPosition - m_checked)); } } - - void generatePatternCharacterPair(TermGenerationState& state) + void backtrackPatternCharacterOnce(size_t opIndex) { - const RegisterID character = regT0; - UChar ch1 = state.term().patternCharacter; - UChar ch2 = state.lookaheadTerm().patternCharacter; - - int mask = 0; - int chPair = ch1 | (ch2 << 16); - - if (m_pattern.m_ignoreCase) { - if (isASCIIAlpha(ch1)) - mask |= 32; - if (isASCIIAlpha(ch2)) - mask |= 32 << 16; - } - - if (mask) { - load32WithUnalignedHalfWords(BaseIndex(input, index, TimesTwo, state.inputOffset() * sizeof(UChar)), character); - or32(Imm32(mask), character); - state.jumpToBacktrack(this, branch32(NotEqual, character, Imm32(chPair | mask))); - } else - state.jumpToBacktrack(this, branch32WithUnalignedHalfWords(NotEqual, BaseIndex(input, index, TimesTwo, state.inputOffset() * sizeof(UChar)), Imm32(chPair))); + backtrackTermDefault(opIndex); } - void generatePatternCharacterFixed(TermGenerationState& state) + void generatePatternCharacterFixed(size_t opIndex) { + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; + UChar ch = term->patternCharacter; + const RegisterID character = regT0; const RegisterID countRegister = regT1; - PatternTerm& term = state.term(); - UChar ch = term.patternCharacter; move(index, countRegister); - sub32(Imm32(term.quantityCount), countRegister); + sub32(Imm32(term->quantityCount), countRegister); Label loop(this); + BaseIndex address(input, countRegister, TimesTwo, (term->inputPosition - m_checked + term->quantityCount) * sizeof(UChar)); + if (m_pattern.m_ignoreCase && isASCIIAlpha(ch)) { - load16(BaseIndex(input, countRegister, TimesTwo, (state.inputOffset() + term.quantityCount) * sizeof(UChar)), character); + load16(address, character); or32(TrustedImm32(32), character); - state.jumpToBacktrack(this, branch32(NotEqual, character, Imm32(Unicode::toLower(ch)))); + op.m_jumps.append(branch32(NotEqual, character, Imm32(Unicode::toLower(ch)))); } else { ASSERT(!m_pattern.m_ignoreCase || (Unicode::toLower(ch) == Unicode::toUpper(ch))); - state.jumpToBacktrack(this, branch16(NotEqual, BaseIndex(input, countRegister, TimesTwo, (state.inputOffset() + term.quantityCount) * sizeof(UChar)), Imm32(ch))); + op.m_jumps.append(branch16(NotEqual, address, Imm32(ch))); } add32(TrustedImm32(1), countRegister); branch32(NotEqual, countRegister, index).linkTo(loop, this); } + void backtrackPatternCharacterFixed(size_t opIndex) + { + backtrackTermDefault(opIndex); + } - void generatePatternCharacterGreedy(TermGenerationState& state) + void generatePatternCharacterGreedy(size_t opIndex) { + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; + UChar ch = term->patternCharacter; + const RegisterID character = regT0; const RegisterID countRegister = regT1; - PatternTerm& term = state.term(); - UChar ch = term.patternCharacter; move(TrustedImm32(0), countRegister); @@ -1352,121 +752,152 @@ class YarrGenerator : private MacroAssembler { Label loop(this); failures.append(atEndOfInput()); if (m_pattern.m_ignoreCase && isASCIIAlpha(ch)) { - readCharacter(state.inputOffset(), character); + readCharacter(term->inputPosition - m_checked, character); or32(TrustedImm32(32), character); failures.append(branch32(NotEqual, character, Imm32(Unicode::toLower(ch)))); } else { ASSERT(!m_pattern.m_ignoreCase || (Unicode::toLower(ch) == Unicode::toUpper(ch))); - failures.append(jumpIfCharNotEquals(ch, state.inputOffset())); + failures.append(jumpIfCharNotEquals(ch, term->inputPosition - m_checked)); } add32(TrustedImm32(1), countRegister); add32(TrustedImm32(1), index); - if (term.quantityCount != quantifyInfinite) { - branch32(NotEqual, countRegister, Imm32(term.quantityCount)).linkTo(loop, this); - failures.append(jump()); - } else + if (term->quantityCount == quantifyInfinite) jump(loop); - - Label backtrackBegin(this); - loadFromFrame(term.frameLocation, countRegister); - state.jumpToBacktrack(this, branchTest32(Zero, countRegister)); - sub32(TrustedImm32(1), countRegister); - sub32(TrustedImm32(1), index); + else + branch32(NotEqual, countRegister, Imm32(term->quantityCount)).linkTo(loop, this); failures.link(this); + op.m_reentry = label(); - storeToFrame(countRegister, term.frameLocation); + storeToFrame(countRegister, term->frameLocation); - state.setBacktrackLabel(backtrackBegin); } + void backtrackPatternCharacterGreedy(size_t opIndex) + { + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; + + const RegisterID countRegister = regT1; - void generatePatternCharacterNonGreedy(TermGenerationState& state) + m_backtrackingState.link(this); + + loadFromFrame(term->frameLocation, countRegister); + m_backtrackingState.append(branchTest32(Zero, countRegister)); + sub32(TrustedImm32(1), countRegister); + sub32(TrustedImm32(1), index); + jump(op.m_reentry); + } + + void generatePatternCharacterNonGreedy(size_t opIndex) { - const RegisterID character = regT0; + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; + const RegisterID countRegister = regT1; - PatternTerm& term = state.term(); - UChar ch = term.patternCharacter; move(TrustedImm32(0), countRegister); + op.m_reentry = label(); + storeToFrame(countRegister, term->frameLocation); + } + void backtrackPatternCharacterNonGreedy(size_t opIndex) + { + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; + UChar ch = term->patternCharacter; + + const RegisterID character = regT0; + const RegisterID countRegister = regT1; - Jump firstTimeDoNothing = jump(); + JumpList nonGreedyFailures; - Label hardFail(this); - sub32(countRegister, index); - state.jumpToBacktrack(this); + m_backtrackingState.link(this); - Label backtrackBegin(this); - loadFromFrame(term.frameLocation, countRegister); + loadFromFrame(term->frameLocation, countRegister); - atEndOfInput().linkTo(hardFail, this); - if (term.quantityCount != quantifyInfinite) - branch32(Equal, countRegister, Imm32(term.quantityCount), hardFail); + nonGreedyFailures.append(atEndOfInput()); + if (term->quantityCount != quantifyInfinite) + nonGreedyFailures.append(branch32(Equal, countRegister, Imm32(term->quantityCount))); if (m_pattern.m_ignoreCase && isASCIIAlpha(ch)) { - readCharacter(state.inputOffset(), character); + readCharacter(term->inputPosition - m_checked, character); or32(TrustedImm32(32), character); - branch32(NotEqual, character, Imm32(Unicode::toLower(ch))).linkTo(hardFail, this); + nonGreedyFailures.append(branch32(NotEqual, character, Imm32(Unicode::toLower(ch)))); } else { ASSERT(!m_pattern.m_ignoreCase || (Unicode::toLower(ch) == Unicode::toUpper(ch))); - jumpIfCharNotEquals(ch, state.inputOffset()).linkTo(hardFail, this); + nonGreedyFailures.append(jumpIfCharNotEquals(ch, term->inputPosition - m_checked)); } add32(TrustedImm32(1), countRegister); add32(TrustedImm32(1), index); - firstTimeDoNothing.link(this); - storeToFrame(countRegister, term.frameLocation); + jump(op.m_reentry); - state.setBacktrackLabel(backtrackBegin); + nonGreedyFailures.link(this); + sub32(countRegister, index); + m_backtrackingState.fallthrough(); } - void generateCharacterClassSingle(TermGenerationState& state) + void generateCharacterClassOnce(size_t opIndex) { + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; + const RegisterID character = regT0; - PatternTerm& term = state.term(); JumpList matchDest; - readCharacter(state.inputOffset(), character); - matchCharacterClass(character, matchDest, term.characterClass); + readCharacter((term->inputPosition - m_checked), character); + matchCharacterClass(character, matchDest, term->characterClass); - if (term.invert()) - state.jumpToBacktrack(this, matchDest); + if (term->invert()) + op.m_jumps.append(matchDest); else { - state.jumpToBacktrack(this); + op.m_jumps.append(jump()); matchDest.link(this); } } + void backtrackCharacterClassOnce(size_t opIndex) + { + backtrackTermDefault(opIndex); + } - void generateCharacterClassFixed(TermGenerationState& state) + void generateCharacterClassFixed(size_t opIndex) { + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; + const RegisterID character = regT0; const RegisterID countRegister = regT1; - PatternTerm& term = state.term(); move(index, countRegister); - sub32(Imm32(term.quantityCount), countRegister); + sub32(Imm32(term->quantityCount), countRegister); Label loop(this); JumpList matchDest; - load16(BaseIndex(input, countRegister, TimesTwo, (state.inputOffset() + term.quantityCount) * sizeof(UChar)), character); - matchCharacterClass(character, matchDest, term.characterClass); + load16(BaseIndex(input, countRegister, TimesTwo, (term->inputPosition - m_checked + term->quantityCount) * sizeof(UChar)), character); + matchCharacterClass(character, matchDest, term->characterClass); - if (term.invert()) - state.jumpToBacktrack(this, matchDest); + if (term->invert()) + op.m_jumps.append(matchDest); else { - state.jumpToBacktrack(this); + op.m_jumps.append(jump()); matchDest.link(this); } add32(TrustedImm32(1), countRegister); branch32(NotEqual, countRegister, index).linkTo(loop, this); } + void backtrackCharacterClassFixed(size_t opIndex) + { + backtrackTermDefault(opIndex); + } - void generateCharacterClassGreedy(TermGenerationState& state) + void generateCharacterClassGreedy(size_t opIndex) { + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; + const RegisterID character = regT0; const RegisterID countRegister = regT1; - PatternTerm& term = state.term(); move(TrustedImm32(0), countRegister); @@ -1474,692 +905,1356 @@ class YarrGenerator : private MacroAssembler { Label loop(this); failures.append(atEndOfInput()); - if (term.invert()) { - readCharacter(state.inputOffset(), character); - matchCharacterClass(character, failures, term.characterClass); + if (term->invert()) { + readCharacter(term->inputPosition - m_checked, character); + matchCharacterClass(character, failures, term->characterClass); } else { JumpList matchDest; - readCharacter(state.inputOffset(), character); - matchCharacterClass(character, matchDest, term.characterClass); + readCharacter(term->inputPosition - m_checked, character); + matchCharacterClass(character, matchDest, term->characterClass); failures.append(jump()); matchDest.link(this); } add32(TrustedImm32(1), countRegister); add32(TrustedImm32(1), index); - if (term.quantityCount != quantifyInfinite) { - branch32(NotEqual, countRegister, Imm32(term.quantityCount)).linkTo(loop, this); + if (term->quantityCount != quantifyInfinite) { + branch32(NotEqual, countRegister, Imm32(term->quantityCount)).linkTo(loop, this); failures.append(jump()); } else jump(loop); - Label backtrackBegin(this); - loadFromFrame(term.frameLocation, countRegister); - state.jumpToBacktrack(this, branchTest32(Zero, countRegister)); - sub32(TrustedImm32(1), countRegister); - sub32(TrustedImm32(1), index); - failures.link(this); + op.m_reentry = label(); + + storeToFrame(countRegister, term->frameLocation); + } + void backtrackCharacterClassGreedy(size_t opIndex) + { + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; + + const RegisterID countRegister = regT1; - storeToFrame(countRegister, term.frameLocation); + m_backtrackingState.link(this); - state.setBacktrackLabel(backtrackBegin); + loadFromFrame(term->frameLocation, countRegister); + m_backtrackingState.append(branchTest32(Zero, countRegister)); + sub32(TrustedImm32(1), countRegister); + sub32(TrustedImm32(1), index); + jump(op.m_reentry); } - void generateCharacterClassNonGreedy(TermGenerationState& state) + void generateCharacterClassNonGreedy(size_t opIndex) { - const RegisterID character = regT0; + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; + const RegisterID countRegister = regT1; - PatternTerm& term = state.term(); move(TrustedImm32(0), countRegister); + op.m_reentry = label(); + storeToFrame(countRegister, term->frameLocation); + } + void backtrackCharacterClassNonGreedy(size_t opIndex) + { + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; - Jump firstTimeDoNothing = jump(); + const RegisterID character = regT0; + const RegisterID countRegister = regT1; - Label hardFail(this); - sub32(countRegister, index); - state.jumpToBacktrack(this); + JumpList nonGreedyFailures; + + m_backtrackingState.link(this); Label backtrackBegin(this); - loadFromFrame(term.frameLocation, countRegister); + loadFromFrame(term->frameLocation, countRegister); - atEndOfInput().linkTo(hardFail, this); - branch32(Equal, countRegister, Imm32(term.quantityCount), hardFail); + nonGreedyFailures.append(atEndOfInput()); + nonGreedyFailures.append(branch32(Equal, countRegister, Imm32(term->quantityCount))); JumpList matchDest; - readCharacter(state.inputOffset(), character); - matchCharacterClass(character, matchDest, term.characterClass); + readCharacter(term->inputPosition - m_checked, character); + matchCharacterClass(character, matchDest, term->characterClass); - if (term.invert()) - matchDest.linkTo(hardFail, this); + if (term->invert()) + nonGreedyFailures.append(matchDest); else { - jump(hardFail); + nonGreedyFailures.append(jump()); matchDest.link(this); } add32(TrustedImm32(1), countRegister); add32(TrustedImm32(1), index); - firstTimeDoNothing.link(this); - storeToFrame(countRegister, term.frameLocation); + jump(op.m_reentry); + + nonGreedyFailures.link(this); + sub32(countRegister, index); + m_backtrackingState.fallthrough(); + } + + // Code generation/backtracking for simple terms + // (pattern characters, character classes, and assertions). + // These methods farm out work to the set of functions above. + void generateTerm(size_t opIndex) + { + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; + + switch (term->type) { + case PatternTerm::TypePatternCharacter: + switch (term->quantityType) { + case QuantifierFixedCount: + if (term->quantityCount == 1) + generatePatternCharacterOnce(opIndex); + else + generatePatternCharacterFixed(opIndex); + break; + case QuantifierGreedy: + generatePatternCharacterGreedy(opIndex); + break; + case QuantifierNonGreedy: + generatePatternCharacterNonGreedy(opIndex); + break; + } + break; - state.setBacktrackLabel(backtrackBegin); + case PatternTerm::TypeCharacterClass: + switch (term->quantityType) { + case QuantifierFixedCount: + if (term->quantityCount == 1) + generateCharacterClassOnce(opIndex); + else + generateCharacterClassFixed(opIndex); + break; + case QuantifierGreedy: + generateCharacterClassGreedy(opIndex); + break; + case QuantifierNonGreedy: + generateCharacterClassNonGreedy(opIndex); + break; + } + break; + + case PatternTerm::TypeAssertionBOL: + generateAssertionBOL(opIndex); + break; + + case PatternTerm::TypeAssertionEOL: + generateAssertionEOL(opIndex); + break; + + case PatternTerm::TypeAssertionWordBoundary: + generateAssertionWordBoundary(opIndex); + break; + + case PatternTerm::TypeForwardReference: + break; + + case PatternTerm::TypeParenthesesSubpattern: + case PatternTerm::TypeParentheticalAssertion: + ASSERT_NOT_REACHED(); + case PatternTerm::TypeBackReference: + m_shouldFallBack = true; + break; + } } - - void generateParenthesesDisjunction(PatternTerm& parenthesesTerm, TermGenerationState& state, unsigned alternativeFrameLocation) + void backtrackTerm(size_t opIndex) { - ASSERT((parenthesesTerm.type == PatternTerm::TypeParenthesesSubpattern) || (parenthesesTerm.type == PatternTerm::TypeParentheticalAssertion)); - ASSERT(parenthesesTerm.quantityCount == 1); - - PatternDisjunction* disjunction = parenthesesTerm.parentheses.disjunction; - unsigned preCheckedCount = ((parenthesesTerm.quantityType == QuantifierFixedCount) && (parenthesesTerm.type != PatternTerm::TypeParentheticalAssertion)) ? disjunction->m_minimumSize : 0; - - if (disjunction->m_alternatives.size() == 1) { - state.resetAlternative(); - ASSERT(state.alternativeValid()); - PatternAlternative* alternative = state.alternative(); - optimizeAlternative(alternative); + YarrOp& op = m_ops[opIndex]; + PatternTerm* term = op.m_term; - int countToCheck = alternative->m_minimumSize - preCheckedCount; - if (countToCheck) { - ASSERT((parenthesesTerm.type == PatternTerm::TypeParentheticalAssertion) || (parenthesesTerm.quantityType != QuantifierFixedCount)); + switch (term->type) { + case PatternTerm::TypePatternCharacter: + switch (term->quantityType) { + case QuantifierFixedCount: + if (term->quantityCount == 1) + backtrackPatternCharacterOnce(opIndex); + else + backtrackPatternCharacterFixed(opIndex); + break; + case QuantifierGreedy: + backtrackPatternCharacterGreedy(opIndex); + break; + case QuantifierNonGreedy: + backtrackPatternCharacterNonGreedy(opIndex); + break; + } + break; - // FIXME: This is quite horrible. The call to 'plantJumpToBacktrackIfExists' - // will be forced to always trampoline into here, just to decrement the index. - // Ick. - Jump skip = jump(); + case PatternTerm::TypeCharacterClass: + switch (term->quantityType) { + case QuantifierFixedCount: + if (term->quantityCount == 1) + backtrackCharacterClassOnce(opIndex); + else + backtrackCharacterClassFixed(opIndex); + break; + case QuantifierGreedy: + backtrackCharacterClassGreedy(opIndex); + break; + case QuantifierNonGreedy: + backtrackCharacterClassNonGreedy(opIndex); + break; + } + break; - Label backtrackBegin(this); - sub32(Imm32(countToCheck), index); - state.addBacktrackJump(jump()); + case PatternTerm::TypeAssertionBOL: + backtrackAssertionBOL(opIndex); + break; - skip.link(this); + case PatternTerm::TypeAssertionEOL: + backtrackAssertionEOL(opIndex); + break; - state.setBacktrackLabel(backtrackBegin); + case PatternTerm::TypeAssertionWordBoundary: + backtrackAssertionWordBoundary(opIndex); + break; - state.jumpToBacktrack(this, jumpIfNoAvailableInput(countToCheck)); - state.checkedTotal += countToCheck; - } + case PatternTerm::TypeForwardReference: + break; - for (state.resetTerm(); state.termValid(); state.nextTerm()) - generateTerm(state); + case PatternTerm::TypeParenthesesSubpattern: + case PatternTerm::TypeParentheticalAssertion: + ASSERT_NOT_REACHED(); + case PatternTerm::TypeBackReference: + m_shouldFallBack = true; + break; + } + } - state.checkedTotal -= countToCheck; - } else { - JumpList successes; - bool propogateBacktrack = false; + void generate() + { + // Forwards generate the matching code. + ASSERT(m_ops.size()); + size_t opIndex = 0; - // Save current state's paren jump list for use with each alternative - JumpList* outerJumpList = state.getJumpListToPriorParen(); + do { + YarrOp& op = m_ops[opIndex]; + switch (op.m_op) { - for (state.resetAlternative(); state.alternativeValid(); state.nextAlternative(), state.setJumpListToPriorParen(outerJumpList)) { - PatternAlternative* alternative = state.alternative(); - optimizeAlternative(alternative); + case OpTerm: + generateTerm(opIndex); + break; - ASSERT(alternative->m_minimumSize >= preCheckedCount); - int countToCheck = alternative->m_minimumSize - preCheckedCount; - if (countToCheck) { - state.addBacktrackJump(jumpIfNoAvailableInput(countToCheck)); - state.checkedTotal += countToCheck; + // OpBodyAlternativeBegin/Next/End + // + // These nodes wrap the set of alternatives in the body of the regular expression. + // There may be either one or two chains of OpBodyAlternative nodes, one representing + // the 'once through' sequence of alternatives (if any exist), and one representing + // the repeating alternatives (again, if any exist). + // + // Upon normal entry to the Begin alternative, we will check that input is available. + // Reentry to the Begin alternative will take place after the check has taken place, + // and will assume that the input position has already been progressed as appropriate. + // + // Entry to subsequent Next/End alternatives occurs when the prior alternative has + // successfully completed a match - return a success state from JIT code. + // + // Next alternatives allow for reentry optimized to suit backtracking from its + // preceding alternative. It expects the input position to still be set to a position + // appropriate to its predecessor, and it will only perform an input check if the + // predecessor had a minimum size less than its own. + // + // In the case 'once through' expressions, the End node will also have a reentry + // point to jump to when the last alternative fails. Again, this expects the input + // position to still reflect that expected by the prior alternative. + case OpBodyAlternativeBegin: { + PatternAlternative* alternative = op.m_alternative; + + // Upon entry at the head of the set of alternatives, check if input is available + // to run the first alternative. (This progresses the input position). + op.m_jumps.append(jumpIfNoAvailableInput(alternative->m_minimumSize)); + // We will reenter after the check, and assume the input position to have been + // set as appropriate to this alternative. + op.m_reentry = label(); + + m_checked += alternative->m_minimumSize; + break; + } + case OpBodyAlternativeNext: + case OpBodyAlternativeEnd: { + PatternAlternative* priorAlternative = m_ops[op.m_previousOp].m_alternative; + PatternAlternative* alternative = op.m_alternative; + + // If we get here, the prior alternative matched - return success. + + // Adjust the stack pointer to remove the pattern's frame. + if (m_pattern.m_body->m_callFrameSize) + addPtr(Imm32(m_pattern.m_body->m_callFrameSize * sizeof(void*)), stackPointerRegister); + + // Load appropriate values into the return register and the first output + // slot, and return. In the case of pattern with a fixed size, we will + // not have yet set the value in the first + ASSERT(index != returnRegister); + if (m_pattern.m_body->m_hasFixedSize) { + move(index, returnRegister); + if (priorAlternative->m_minimumSize) + sub32(Imm32(priorAlternative->m_minimumSize), returnRegister); + store32(returnRegister, output); + } else + load32(Address(output), returnRegister); + store32(index, Address(output, 4)); + generateReturn(); + + // This is the divide between the tail of the prior alternative, above, and + // the head of the subsequent alternative, below. + + if (op.m_op == OpBodyAlternativeNext) { + // This is the reentry point for the Next alternative. We expect any code + // that jumps here to do so with the input position matching that of the + // PRIOR alteranative, and we will only check input availability if we + // need to progress it forwards. + op.m_reentry = label(); + if (int delta = alternative->m_minimumSize - priorAlternative->m_minimumSize) { + add32(Imm32(delta), index); + if (delta > 0) + op.m_jumps.append(jumpIfNoAvailableInput()); + } + } else if (op.m_nextOp == notFound) { + // This is the reentry point for the End of 'once through' alternatives, + // jumped to when the las alternative fails to match. + op.m_reentry = label(); + sub32(Imm32(priorAlternative->m_minimumSize), index); } - for (state.resetTerm(); state.termValid(); state.nextTerm()) - generateTerm(state); + if (op.m_op == OpBodyAlternativeNext) + m_checked += alternative->m_minimumSize; + m_checked -= priorAlternative->m_minimumSize; + break; + } - // Matched an alternative. - DataLabelPtr dataLabel = storeToFrameWithPatch(alternativeFrameLocation); + // OpSimpleNestedAlternativeBegin/Next/End + // OpNestedAlternativeBegin/Next/End + // + // These nodes are used to handle sets of alternatives that are nested within + // subpatterns and parenthetical assertions. The 'simple' forms are used where + // we do not need to be able to backtrack back into any alternative other than + // the last, the normal forms allow backtracking into any alternative. + // + // Each Begin/Next node is responsible for planting an input check to ensure + // sufficient input is available on entry. Next nodes additionally need to + // jump to the end - Next nodes use the End node's m_jumps list to hold this + // set of jumps. + // + // In the non-simple forms, successful alternative matches must store a + // 'return address' using a DataLabelPtr, used to store the address to jump + // to when backtracking, to get to the code for the appropriate alternative. + case OpSimpleNestedAlternativeBegin: + case OpNestedAlternativeBegin: { + PatternTerm* term = op.m_term; + PatternAlternative* alternative = op.m_alternative; + PatternDisjunction* disjunction = term->parentheses.disjunction; + + // Calculate how much input we need to check for, and if non-zero check. + op.m_checkAdjust = alternative->m_minimumSize; + if ((term->quantityType == QuantifierFixedCount) && (term->type != PatternTerm::TypeParentheticalAssertion)) + op.m_checkAdjust -= disjunction->m_minimumSize; + if (op.m_checkAdjust) + op.m_jumps.append(jumpIfNoAvailableInput(op.m_checkAdjust)); + + m_checked += op.m_checkAdjust; + break; + } + case OpSimpleNestedAlternativeNext: + case OpNestedAlternativeNext: { + PatternTerm* term = op.m_term; + PatternAlternative* alternative = op.m_alternative; + PatternDisjunction* disjunction = term->parentheses.disjunction; + + // In the non-simple case, store a 'return address' so we can backtrack correctly. + if (op.m_op == OpNestedAlternativeNext) { + unsigned parenthesesFrameLocation = term->frameLocation; + unsigned alternativeFrameLocation = parenthesesFrameLocation; + if (term->quantityType != QuantifierFixedCount) + alternativeFrameLocation += YarrStackSpaceForBackTrackInfoParenthesesOnce; + op.m_returnAddress = storeToFrameWithPatch(alternativeFrameLocation); + } - if (!state.isLastAlternative() || countToCheck) - successes.append(jump()); + // If we reach here then the last alternative has matched - jump to the + // End node, to skip over any further alternatives. + // + // FIXME: this is logically O(N^2) (though N can be expected to be very + // small). We could avoid this either by adding an extra jump to the JIT + // data structures, or by making backtracking code that jumps to Next + // alternatives are responsible for checking that input is available (if + // we didn't need to plant the input checks, then m_jumps would be free). + YarrOp* endOp = &m_ops[op.m_nextOp]; + while (endOp->m_nextOp != notFound) { + ASSERT(endOp->m_op == OpSimpleNestedAlternativeNext || endOp->m_op == OpNestedAlternativeNext); + endOp = &m_ops[endOp->m_nextOp]; + } + ASSERT(endOp->m_op == OpSimpleNestedAlternativeEnd || endOp->m_op == OpNestedAlternativeEnd); + endOp->m_jumps.append(jump()); + + // This is the entry point for the next alternative. + op.m_reentry = label(); + + // Calculate how much input we need to check for, and if non-zero check. + op.m_checkAdjust = alternative->m_minimumSize; + if ((term->quantityType == QuantifierFixedCount) && (term->type != PatternTerm::TypeParentheticalAssertion)) + op.m_checkAdjust -= disjunction->m_minimumSize; + if (op.m_checkAdjust) + op.m_jumps.append(jumpIfNoAvailableInput(op.m_checkAdjust)); + + YarrOp& lastOp = m_ops[op.m_previousOp]; + m_checked -= lastOp.m_checkAdjust; + m_checked += op.m_checkAdjust; + break; + } + case OpSimpleNestedAlternativeEnd: + case OpNestedAlternativeEnd: { + PatternTerm* term = op.m_term; + + // In the non-simple case, store a 'return address' so we can backtrack correctly. + if (op.m_op == OpNestedAlternativeEnd) { + unsigned parenthesesFrameLocation = term->frameLocation; + unsigned alternativeFrameLocation = parenthesesFrameLocation; + if (term->quantityType != QuantifierFixedCount) + alternativeFrameLocation += YarrStackSpaceForBackTrackInfoParenthesesOnce; + op.m_returnAddress = storeToFrameWithPatch(alternativeFrameLocation); + } - // Alternative did not match. + // If this set of alternatives contains more than one alternative, + // then the Next nodes will have planted jumps to the End, and added + // them to this node's m_jumps list. + op.m_jumps.link(this); + op.m_jumps.clear(); - // Do we have a backtrack destination? - // if so, link the data label to it. - state.linkDataLabelToBacktrackIfExists(this, dataLabel); + YarrOp& lastOp = m_ops[op.m_previousOp]; + m_checked -= lastOp.m_checkAdjust; + break; + } - if (!state.isLastAlternative() || countToCheck) - state.linkAlternativeBacktracks(this); + // OpParenthesesSubpatternOnceBegin/End + // + // These nodes support (optionally) capturing subpatterns, that have a + // quantity count of 1 (this covers fixed once, and ?/?? quantifiers). + case OpParenthesesSubpatternOnceBegin: { + PatternTerm* term = op.m_term; + unsigned parenthesesFrameLocation = term->frameLocation; + const RegisterID indexTemporary = regT0; + ASSERT(term->quantityCount == 1); + + // Upon entry to a Greedy quantified set of parenthese store the index. + // We'll use this for two purposes: + // - To indicate which iteration we are on of mathing the remainder of + // the expression after the parentheses - the first, including the + // match within the parentheses, or the second having skipped over them. + // - To check for empty matches, which must be rejected. + // + // At the head of a NonGreedy set of parentheses we'll immediately set the + // value on the stack to -1 (indicating a match skipping the subpattern), + // and plant a jump to the end. We'll also plant a label to backtrack to + // to reenter the subpattern later, with a store to set up index on the + // second iteration. + // + // FIXME: for capturing parens, could use the index in the capture array? + if (term->quantityType == QuantifierGreedy) + storeToFrame(index, parenthesesFrameLocation); + else if (term->quantityType == QuantifierNonGreedy) { + storeToFrame(TrustedImm32(-1), parenthesesFrameLocation); + op.m_jumps.append(jump()); + op.m_reentry = label(); + storeToFrame(index, parenthesesFrameLocation); + } - if (countToCheck) { - sub32(Imm32(countToCheck), index); - state.checkedTotal -= countToCheck; - } else if (state.isLastAlternative()) - propogateBacktrack = true; + // If the parenthese are capturing, store the starting index value to the + // captures array, offsetting as necessary. + // + // FIXME: could avoid offsetting this value in JIT code, apply + // offsets only afterwards, at the point the results array is + // being accessed. + if (term->capture()) { + int offsetId = term->parentheses.subpatternId << 1; + int inputOffset = term->inputPosition - m_checked; + if (term->quantityType == QuantifierFixedCount) + inputOffset -= term->parentheses.disjunction->m_minimumSize; + if (inputOffset) { + move(index, indexTemporary); + add32(Imm32(inputOffset), indexTemporary); + store32(indexTemporary, Address(output, offsetId * sizeof(int))); + } else + store32(index, Address(output, offsetId * sizeof(int))); + } + break; } - // We fall through to here when the last alternative fails. - // Add a backtrack out of here for the parenthese handling code to link up. - if (!propogateBacktrack) - state.addBacktrackJump(jump()); - - // Save address on stack for the parens code to backtrack to, to retry the - // next alternative. - state.setBackTrackStackOffset(alternativeFrameLocation * sizeof(void*)); + case OpParenthesesSubpatternOnceEnd: { + PatternTerm* term = op.m_term; + unsigned parenthesesFrameLocation = term->frameLocation; + const RegisterID indexTemporary = regT0; + ASSERT(term->quantityCount == 1); + + // For Greedy/NonGreedy quantified parentheses, we must reject zero length + // matches. If the minimum size is know to be non-zero we need not check. + if (term->quantityType != QuantifierFixedCount && !term->parentheses.disjunction->m_minimumSize) + op.m_jumps.append(branch32(Equal, index, Address(stackPointerRegister, parenthesesFrameLocation * sizeof(void*)))); + + // If the parenthese are capturing, store the ending index value to the + // captures array, offsetting as necessary. + // + // FIXME: could avoid offsetting this value in JIT code, apply + // offsets only afterwards, at the point the results array is + // being accessed. + if (term->capture()) { + int offsetId = (term->parentheses.subpatternId << 1) + 1; + int inputOffset = term->inputPosition - m_checked; + if (inputOffset) { + move(index, indexTemporary); + add32(Imm32(inputOffset), indexTemporary); + store32(indexTemporary, Address(output, offsetId * sizeof(int))); + } else + store32(index, Address(output, offsetId * sizeof(int))); + } - successes.link(this); - } - } + // If the parentheses are quantified Greedy then add a label to jump back + // to if get a failed match from after the parentheses. For NonGreedy + // parentheses, link the jump from before the subpattern to here. + if (term->quantityType == QuantifierGreedy) + op.m_reentry = label(); + else if (term->quantityType == QuantifierNonGreedy) { + YarrOp& beginOp = m_ops[op.m_previousOp]; + beginOp.m_jumps.link(this); + } + break; + } - void generateParenthesesSingle(TermGenerationState& state) - { - const RegisterID indexTemporary = regT0; - PatternTerm& term = state.term(); - PatternDisjunction* disjunction = term.parentheses.disjunction; - ASSERT(term.quantityCount == 1); + // OpParenthesesSubpatternTerminalBegin/End + case OpParenthesesSubpatternTerminalBegin: { + PatternTerm* term = op.m_term; + ASSERT(term->quantityType == QuantifierGreedy); + ASSERT(term->quantityCount == quantifyInfinite); + ASSERT(!term->capture()); - unsigned preCheckedCount = (term.quantityType == QuantifierFixedCount) ? disjunction->m_minimumSize : 0; + // Upon entry set a label to loop back to. + op.m_reentry = label(); - unsigned parenthesesFrameLocation = term.frameLocation; - unsigned alternativeFrameLocation = parenthesesFrameLocation; - if (term.quantityType != QuantifierFixedCount) - alternativeFrameLocation += YarrStackSpaceForBackTrackInfoParenthesesOnce; + // Store the start index of the current match; we need to reject zero + // length matches. + storeToFrame(index, term->frameLocation); + break; + } + case OpParenthesesSubpatternTerminalEnd: { + PatternTerm* term = op.m_term; - // optimized case - no capture & no quantifier can be handled in a light-weight manner. - if (!term.capture() && (term.quantityType == QuantifierFixedCount)) { - m_expressionState.incrementParenNestingLevel(); + // Check for zero length matches - if the match is non-zero, then we + // can accept it & loop back up to the head of the subpattern. + YarrOp& beginOp = m_ops[op.m_previousOp]; + branch32(NotEqual, index, Address(stackPointerRegister, term->frameLocation * sizeof(void*)), beginOp.m_reentry); - TermGenerationState parenthesesState(disjunction, state.checkedTotal); + // Reject the match - backtrack back into the subpattern. + op.m_jumps.append(jump()); - // Use the current state's jump list for the nested parentheses. - parenthesesState.setJumpListToPriorParen(state.getJumpListToPriorParen()); + // This is the entry point to jump to when we stop matching - we will + // do so once the subpattern cannot match any more. + op.m_reentry = label(); + break; + } - generateParenthesesDisjunction(state.term(), parenthesesState, alternativeFrameLocation); - // this expects that any backtracks back out of the parentheses will be in the - // parenthesesState's m_backTrackJumps vector, and that if they need backtracking - // they will have set an entry point on the parenthesesState's m_backtrackLabel. - BacktrackDestination& parenthesesBacktrack = parenthesesState.getBacktrackDestination(); - BacktrackDestination& stateBacktrack = state.getBacktrackDestination(); + // OpParentheticalAssertionBegin/End + case OpParentheticalAssertionBegin: { + PatternTerm* term = op.m_term; - state.propagateBacktrackingFrom(this, parenthesesBacktrack); - stateBacktrack.propagateBacktrackToLabel(parenthesesBacktrack); + // Store the current index - assertions should not update index, so + // we will need to restore it upon a successful match. + unsigned parenthesesFrameLocation = term->frameLocation; + storeToFrame(index, parenthesesFrameLocation); - state.setJumpListToPriorParen(parenthesesState.getJumpListToPriorParen()); + // Check + op.m_checkAdjust = m_checked - term->inputPosition; + if (op.m_checkAdjust) + sub32(Imm32(op.m_checkAdjust), index); - m_expressionState.decrementParenNestingLevel(); - } else { - Jump nonGreedySkipParentheses; - Label nonGreedyTryParentheses; - if (term.quantityType == QuantifierGreedy) - storeToFrame(index, parenthesesFrameLocation); - else if (term.quantityType == QuantifierNonGreedy) { - storeToFrame(TrustedImm32(-1), parenthesesFrameLocation); - nonGreedySkipParentheses = jump(); - nonGreedyTryParentheses = label(); - storeToFrame(index, parenthesesFrameLocation); + m_checked -= op.m_checkAdjust; + break; } + case OpParentheticalAssertionEnd: { + PatternTerm* term = op.m_term; + + // Restore the input index value. + unsigned parenthesesFrameLocation = term->frameLocation; + loadFromFrame(parenthesesFrameLocation, index); + + // If inverted, a successful match of the assertion must be treated + // as a failure, so jump to backtracking. + if (term->invert()) { + op.m_jumps.append(jump()); + op.m_reentry = label(); + } - // store the match start index - if (term.capture()) { - int inputOffset = state.inputOffset() - preCheckedCount; - if (inputOffset) { - move(index, indexTemporary); - add32(Imm32(inputOffset), indexTemporary); - store32(indexTemporary, Address(output, (term.parentheses.subpatternId << 1) * sizeof(int))); - } else - store32(index, Address(output, (term.parentheses.subpatternId << 1) * sizeof(int))); + YarrOp& lastOp = m_ops[op.m_previousOp]; + m_checked += lastOp.m_checkAdjust; + break; } - ParenthesesTail* parenthesesTail = m_expressionState.addParenthesesTail(term, state.getJumpListToPriorParen()); - - m_expressionState.incrementParenNestingLevel(); - - TermGenerationState parenthesesState(disjunction, state.checkedTotal); - - // Save the parenthesesTail for backtracking from nested parens to this one. - parenthesesState.setJumpListToPriorParen(&parenthesesTail->m_withinBacktrackJumps); - - // generate the body of the parentheses - generateParenthesesDisjunction(state.term(), parenthesesState, alternativeFrameLocation); - - // For non-fixed counts, backtrack if we didn't match anything. - if (term.quantityType != QuantifierFixedCount) - parenthesesTail->addAfterParenJump(branch32(Equal, index, Address(stackPointerRegister, (parenthesesFrameLocation * sizeof(void*))))); - - // store the match end index - if (term.capture()) { - int inputOffset = state.inputOffset(); - if (inputOffset) { - move(index, indexTemporary); - add32(Imm32(state.inputOffset()), indexTemporary); - store32(indexTemporary, Address(output, ((term.parentheses.subpatternId << 1) + 1) * sizeof(int))); - } else - store32(index, Address(output, ((term.parentheses.subpatternId << 1) + 1) * sizeof(int))); + case OpMatchFailed: + if (m_pattern.m_body->m_callFrameSize) + addPtr(Imm32(m_pattern.m_body->m_callFrameSize * sizeof(void*)), stackPointerRegister); + move(TrustedImm32(-1), returnRegister); + generateReturn(); + break; } - m_expressionState.decrementParenNestingLevel(); - - parenthesesTail->processBacktracks(this, state, parenthesesState, nonGreedyTryParentheses, label()); - - state.setJumpListToPriorParen(&parenthesesTail->m_afterBacktrackJumps); - - parenthesesState.getBacktrackDestination().clear(); - - if (term.quantityType == QuantifierNonGreedy) - nonGreedySkipParentheses.link(this); - } + ++opIndex; + } while (opIndex < m_ops.size()); } - void generateParenthesesGreedyNoBacktrack(TermGenerationState& state) + void backtrack() { - PatternTerm& parenthesesTerm = state.term(); - PatternDisjunction* disjunction = parenthesesTerm.parentheses.disjunction; - ASSERT(parenthesesTerm.type == PatternTerm::TypeParenthesesSubpattern); - ASSERT(parenthesesTerm.quantityCount != 1); // Handled by generateParenthesesSingle. + // Backwards generate the backtracking code. + size_t opIndex = m_ops.size(); + ASSERT(opIndex); - TermGenerationState parenthesesState(disjunction, state.checkedTotal); + do { + --opIndex; + YarrOp& op = m_ops[opIndex]; + switch (op.m_op) { - Label matchAgain(this); + case OpTerm: + backtrackTerm(opIndex); + break; - storeToFrame(index, parenthesesTerm.frameLocation); // Save the current index to check for zero len matches later. + // OpBodyAlternativeBegin/Next/End + // + // For each Begin/Next node representing an alternative, we need to decide what to do + // in two circumstances: + // - If we backtrack back into this node, from within the alternative. + // - If the input check at the head of the alternative fails (if this exists). + // + // We treat these two cases differently since in the former case we have slightly + // more information - since we are backtracking out of a prior alternative we know + // that at least enough input was available to run it. For example, given the regular + // expression /a|b/, if we backtrack out of the first alternative (a failed pattern + // character match of 'a'), then we need not perform an additional input availability + // check before running the second alternative. + // + // Backtracking required differs for the last alternative, which in the case of the + // repeating set of alternatives must loop. The code generated for the last alternative + // will also be used to handle all input check failures from any prior alternatives - + // these require similar functionality, in seeking the next available alternative for + // which there is sufficient input. + // + // Since backtracking of all other alternatives simply requires us to link backtracks + // to the reentry point for the subsequent alternative, we will only be generating any + // code when backtracking the last alternative. + case OpBodyAlternativeBegin: + case OpBodyAlternativeNext: { + PatternAlternative* alternative = op.m_alternative; + + if (op.m_op == OpBodyAlternativeNext) { + PatternAlternative* priorAlternative = m_ops[op.m_previousOp].m_alternative; + m_checked += priorAlternative->m_minimumSize; + } + m_checked -= alternative->m_minimumSize; - for (parenthesesState.resetAlternative(); parenthesesState.alternativeValid(); parenthesesState.nextAlternative()) { + // Is this the last alternative? If not, then if we backtrack to this point we just + // need to jump to try to match the next alternative. + if (m_ops[op.m_nextOp].m_op != OpBodyAlternativeEnd) { + m_backtrackingState.linkTo(m_ops[op.m_nextOp].m_reentry, this); + break; + } + YarrOp& endOp = m_ops[op.m_nextOp]; - PatternAlternative* alternative = parenthesesState.alternative(); - optimizeAlternative(alternative); + YarrOp* beginOp = &op; + while (beginOp->m_op != OpBodyAlternativeBegin) { + ASSERT(beginOp->m_op == OpBodyAlternativeNext); + beginOp = &m_ops[beginOp->m_previousOp]; + } - int countToCheck = alternative->m_minimumSize; - if (countToCheck) { - parenthesesState.addBacktrackJump(jumpIfNoAvailableInput(countToCheck)); - parenthesesState.checkedTotal += countToCheck; - } + bool onceThrough = endOp.m_nextOp == notFound; + + // First, generate code to handle cases where we backtrack out of an attempted match + // of the last alternative. If this is a 'once through' set of alternatives then we + // have nothing to do - link this straight through to the End. + if (onceThrough) + m_backtrackingState.linkTo(endOp.m_reentry, this); + else { + // Okay, we're going to need to loop. Calculate the delta between where the input + // position was, and where we want it to be allowing for the fact that we need to + // increment by 1. E.g. for the regexp /a|x/ we need to increment the position by + // 1 between loop iterations, but for /abcd|xyz/ we need to increment by two when + // looping from the last alternative to the first, for /a|xyz/ we need to decrement + // by 1, and for /a|xy/ we don't need to move the input position at all. + int deltaLastAlternativeToFirstAlternativePlusOne = (beginOp->m_alternative->m_minimumSize - alternative->m_minimumSize) + 1; + + // If we don't need to move the input poistion, and the pattern has a fixed size + // (in which case we omit the store of the start index until the pattern has matched) + // then we can just link the backtrack out of the last alternative straight to the + // head of the first alternative. + if (!deltaLastAlternativeToFirstAlternativePlusOne && m_pattern.m_body->m_hasFixedSize) + m_backtrackingState.linkTo(beginOp->m_reentry, this); + else { + // We need to generate a trampoline of code to execute before looping back + // around to the first alternative. + m_backtrackingState.link(this); + + // If the pattern size is not fixed, then store the start index, for use if we match. + if (!m_pattern.m_body->m_hasFixedSize) { + if (alternative->m_minimumSize == 1) + store32(index, Address(output)); + else { + move(index, regT0); + if (alternative->m_minimumSize) + sub32(Imm32(alternative->m_minimumSize - 1), regT0); + else + add32(Imm32(1), regT0); + store32(regT0, Address(output)); + } + } + + if (deltaLastAlternativeToFirstAlternativePlusOne) + add32(Imm32(deltaLastAlternativeToFirstAlternativePlusOne), index); + + // Loop. Since this code is only reached when we backtrack out of the last + // alternative (and NOT linked to from the input check upon entry to the + // last alternative) we know that there must be at least enough input as + // required by the last alternative. As such, we only need to check if the + // first will require more to run - if the same or less is required we can + // unconditionally jump. + if (deltaLastAlternativeToFirstAlternativePlusOne > 0) + checkInput().linkTo(beginOp->m_reentry, this); + else + jump(beginOp->m_reentry); + } + } - for (parenthesesState.resetTerm(); parenthesesState.termValid(); parenthesesState.nextTerm()) - generateTerm(parenthesesState); + // We can reach this point in the code in two ways: + // - Fallthrough from the code above (a repeating alternative backtracked out of its + // last alternative, and did not have sufficent input to run the first). + // - We will loop back up to the following label when a releating alternative loops, + // following a failed input check. + // + // Either way, we have just failed the input check for the first alternative. + Label firstInputCheckFailed(this); + + // Generate code to handle input check failures from alternatives except the last. + // prevOp is the alternative we're handling a bail out from (initially Begin), and + // nextOp is the alternative we will be attempting to reenter into. + // + // We will link input check failures from the forwards matching path back to the code + // that can handle them. + YarrOp* prevOp = beginOp; + YarrOp* nextOp = &m_ops[beginOp->m_nextOp]; + while (nextOp->m_op != OpBodyAlternativeEnd) { + prevOp->m_jumps.link(this); + + int delta = nextOp->m_alternative->m_minimumSize - prevOp->m_alternative->m_minimumSize; + if (delta) + add32(Imm32(delta), index); + + // We only get here if an input check fails, it is only worth checking again + // if the next alternative has a minimum size less than the last. + if (delta < 0) { + // FIXME: if we added an extra label to YarrOp, we could avoid needing to + // subtract delta back out, and reduce this code. Should performance test + // the benefit of this. + Jump fail = jumpIfNoAvailableInput(); + sub32(Imm32(delta), index); + jump(nextOp->m_reentry); + fail.link(this); + } + prevOp = nextOp; + nextOp = &m_ops[nextOp->m_nextOp]; + } - // If we get here, we matched! If the index advanced then try to match more since limit isn't supported yet. - branch32(NotEqual, index, Address(stackPointerRegister, (parenthesesTerm.frameLocation * sizeof(void*))), matchAgain); + // We fall through to here if there is insufficient input to run the last alternative. - // If we get here we matched, but we matched "" - cannot accept this alternative as is, so either backtrack, - // or fall through to try the next alternative if no backtrack is available. - parenthesesState.plantJumpToBacktrackIfExists(this); + // If there is insufficient input to run the last alternative, then for 'once through' + // alternatives we are done - just jump back up into the forwards matching path at the End. + if (onceThrough) { + op.m_jumps.linkTo(endOp.m_reentry, this); + jump(endOp.m_reentry); + break; + } - parenthesesState.linkAlternativeBacktracks(this); + // For repeating alternatives, link any input check failure from the last alternative to + // this point. + op.m_jumps.link(this); - // We get here if the alternative fails to match - fall through to the next iteration, or out of the loop. + bool needsToUpdateMatchStart = !m_pattern.m_body->m_hasFixedSize; - if (countToCheck) { - sub32(Imm32(countToCheck), index); - parenthesesState.checkedTotal -= countToCheck; - } - } + // Check for cases where input position is already incremented by 1 for the last + // alternative (this is particularly useful where the minimum size of the body + // disjunction is 0, e.g. /a*|b/). + if (needsToUpdateMatchStart && alternative->m_minimumSize == 1) { + // index is already incremented by 1, so just store it now! + store32(index, Address(output)); + needsToUpdateMatchStart = false; + } - // If the last alternative falls through to here, we have a failed match... - // Which means that we match whatever we have matched up to this point (even if nothing). - } + // Check whether there is sufficient input to loop. Increment the input position by + // one, and check. Also add in the minimum disjunction size before checking - there + // is no point in looping if we're just going to fail all the input checks around + // the next iteration. + int deltaLastAlternativeToBodyMinimumPlusOne = (m_pattern.m_body->m_minimumSize + 1) - alternative->m_minimumSize; + if (deltaLastAlternativeToBodyMinimumPlusOne) + add32(Imm32(deltaLastAlternativeToBodyMinimumPlusOne), index); + Jump matchFailed = jumpIfNoAvailableInput(); + + if (needsToUpdateMatchStart) { + if (!m_pattern.m_body->m_minimumSize) + store32(index, Address(output)); + else { + move(index, regT0); + sub32(Imm32(m_pattern.m_body->m_minimumSize), regT0); + store32(regT0, Address(output)); + } + } - void generateParentheticalAssertion(TermGenerationState& state) - { - PatternTerm& term = state.term(); - PatternDisjunction* disjunction = term.parentheses.disjunction; - ASSERT(term.quantityCount == 1); - ASSERT(term.quantityType == QuantifierFixedCount); + // Calculate how much more input the first alternative requires than the minimum + // for the body as a whole. If no more is needed then we dont need an additional + // input check here - jump straight back up to the start of the first alternative. + int deltaBodyMinimumToFirstAlternative = beginOp->m_alternative->m_minimumSize - m_pattern.m_body->m_minimumSize; + if (!deltaBodyMinimumToFirstAlternative) + jump(beginOp->m_reentry); + else { + add32(Imm32(deltaBodyMinimumToFirstAlternative), index); + checkInput().linkTo(beginOp->m_reentry, this); + jump(firstInputCheckFailed); + } - unsigned parenthesesFrameLocation = term.frameLocation; - unsigned alternativeFrameLocation = parenthesesFrameLocation + YarrStackSpaceForBackTrackInfoParentheticalAssertion; + // We jump to here if we iterate to the point that there is insufficient input to + // run any matches, and need to return a failure state from JIT code. + matchFailed.link(this); - int countCheckedAfterAssertion = state.checkedTotal - term.inputPosition; + if (m_pattern.m_body->m_callFrameSize) + addPtr(Imm32(m_pattern.m_body->m_callFrameSize * sizeof(void*)), stackPointerRegister); + move(TrustedImm32(-1), returnRegister); + generateReturn(); + break; + } + case OpBodyAlternativeEnd: { + // We should never backtrack back into a body disjunction. + ASSERT(m_backtrackingState.isEmpty()); - if (term.invert()) { - // Inverted case - storeToFrame(index, parenthesesFrameLocation); + PatternAlternative* priorAlternative = m_ops[op.m_previousOp].m_alternative; + m_checked += priorAlternative->m_minimumSize; + break; + } - state.checkedTotal -= countCheckedAfterAssertion; - if (countCheckedAfterAssertion) - sub32(Imm32(countCheckedAfterAssertion), index); + // OpSimpleNestedAlternativeBegin/Next/End + // OpNestedAlternativeBegin/Next/End + // + // Generate code for when we backtrack back out of an alternative into + // a Begin or Next node, or when the entry input count check fails. If + // there are more alternatives we need to jump to the next alternative, + // if not we backtrack back out of the current set of parentheses. + // + // In the case of non-simple nested assertions we need to also link the + // 'return address' appropriately to backtrack back out into the correct + // alternative. + case OpSimpleNestedAlternativeBegin: + case OpSimpleNestedAlternativeNext: + case OpNestedAlternativeBegin: + case OpNestedAlternativeNext: { + YarrOp& nextOp = m_ops[op.m_nextOp]; + bool isBegin = op.m_previousOp == notFound; + bool isLastAlternative = nextOp.m_nextOp == notFound; + ASSERT(isBegin == (op.m_op == OpSimpleNestedAlternativeBegin || op.m_op == OpNestedAlternativeBegin)); + ASSERT(isLastAlternative == (nextOp.m_op == OpSimpleNestedAlternativeEnd || nextOp.m_op == OpNestedAlternativeEnd)); + + // Treat an input check failure the same as a failed match. + m_backtrackingState.append(op.m_jumps); + + // Set the backtracks to jump to the appropriate place. We may need + // to link the backtracks in one of three different way depending on + // the type of alternative we are dealing with: + // - A single alternative, with no simplings. + // - The last alternative of a set of two or more. + // - An alternative other than the last of a set of two or more. + // + // In the case of a single alternative on its own, we don't need to + // jump anywhere - if the alternative fails to match we can just + // continue to backtrack out of the parentheses without jumping. + // + // In the case of the last alternative in a set of more than one, we + // need to jump to return back out to the beginning. We'll do so by + // adding a jump to the End node's m_jumps list, and linking this + // when we come to generate the Begin node. For alternatives other + // than the last, we need to jump to the next alternative. + // + // If the alternative had adjusted the input position we must link + // backtracking to here, correct, and then jump on. If not we can + // link the backtracks directly to their destination. + if (op.m_checkAdjust) { + // Handle the cases where we need to link the backtracks here. + m_backtrackingState.link(this); + sub32(Imm32(op.m_checkAdjust), index); + if (!isLastAlternative) { + // An alternative that is not the last should jump to its successor. + jump(nextOp.m_reentry); + } else if (!isBegin) { + // The last of more than one alternatives must jump back to the begnning. + nextOp.m_jumps.append(jump()); + } else { + // A single alternative on its own can fall through. + m_backtrackingState.fallthrough(); + } + } else { + // Handle the cases where we can link the backtracks directly to their destinations. + if (!isLastAlternative) { + // An alternative that is not the last should jump to its successor. + m_backtrackingState.linkTo(nextOp.m_reentry, this); + } else if (!isBegin) { + // The last of more than one alternatives must jump back to the begnning. + m_backtrackingState.takeBacktracksToJumpList(nextOp.m_jumps, this); + } + // In the case of a single alternative on its own do nothing - it can fall through. + } - TermGenerationState parenthesesState(disjunction, state.checkedTotal); - generateParenthesesDisjunction(state.term(), parenthesesState, alternativeFrameLocation); - // Success! - which means - Fail! - loadFromFrame(parenthesesFrameLocation, index); - state.jumpToBacktrack(this); + // At this point we've handled the backtracking back into this node. + // Now link any backtracks that need to jump to here. + + // For non-simple alternatives, link the alternative's 'return address' + // so that we backtrack back out into the previous alternative. + if (op.m_op == OpNestedAlternativeNext) + m_backtrackingState.append(op.m_returnAddress); + + // If there is more than one alternative, then the last alternative will + // have planted a jump to be linked to the end. This jump was added to the + // End node's m_jumps list. If we are back at the beginning, link it here. + if (isBegin) { + YarrOp* endOp = &m_ops[op.m_nextOp]; + while (endOp->m_nextOp != notFound) { + ASSERT(endOp->m_op == OpSimpleNestedAlternativeNext || endOp->m_op == OpNestedAlternativeNext); + endOp = &m_ops[endOp->m_nextOp]; + } + ASSERT(endOp->m_op == OpSimpleNestedAlternativeEnd || endOp->m_op == OpNestedAlternativeEnd); + m_backtrackingState.append(endOp->m_jumps); + } - // And fail means success. - parenthesesState.linkAlternativeBacktracks(this); + if (!isBegin) { + YarrOp& lastOp = m_ops[op.m_previousOp]; + m_checked += lastOp.m_checkAdjust; + } + m_checked -= op.m_checkAdjust; + break; + } + case OpSimpleNestedAlternativeEnd: + case OpNestedAlternativeEnd: { + PatternTerm* term = op.m_term; + + // If we backtrack into the end of a simple subpattern do nothing; + // just continue through into the last alternative. If we backtrack + // into the end of a non-simple set of alterntives we need to jump + // to the backtracking return address set up during generation. + if (op.m_op == OpNestedAlternativeEnd) { + m_backtrackingState.link(this); + + // Plant a jump to the return address. + unsigned parenthesesFrameLocation = term->frameLocation; + unsigned alternativeFrameLocation = parenthesesFrameLocation; + if (term->quantityType != QuantifierFixedCount) + alternativeFrameLocation += YarrStackSpaceForBackTrackInfoParenthesesOnce; + loadFromFrameAndJump(alternativeFrameLocation); + + // Link the DataLabelPtr associated with the end of the last + // alternative to this point. + m_backtrackingState.append(op.m_returnAddress); + } - loadFromFrame(parenthesesFrameLocation, index); + YarrOp& lastOp = m_ops[op.m_previousOp]; + m_checked += lastOp.m_checkAdjust; + break; + } - state.checkedTotal += countCheckedAfterAssertion; - } else { - // Normal case - storeToFrame(index, parenthesesFrameLocation); + // OpParenthesesSubpatternOnceBegin/End + // + // When we are backtracking back out of a capturing subpattern we need + // to clear the start index in the matches output array, to record that + // this subpattern has not been captured. + // + // When backtracking back out of a Greedy quantified subpattern we need + // to catch this, and try running the remainder of the alternative after + // the subpattern again, skipping the parentheses. + // + // Upon backtracking back into a quantified set of parentheses we need to + // check whether we were currently skipping the subpattern. If not, we + // can backtrack into them, if we were we need to either backtrack back + // out of the start of the parentheses, or jump back to the forwards + // matching start, depending of whether the match is Greedy or NonGreedy. + case OpParenthesesSubpatternOnceBegin: { + PatternTerm* term = op.m_term; + ASSERT(term->quantityCount == 1); + + // We only need to backtrack to thispoint if capturing or greedy. + if (term->capture() || term->quantityType == QuantifierGreedy) { + m_backtrackingState.link(this); + + // If capturing, clear the capture (we only need to reset start). + if (term->capture()) + store32(TrustedImm32(-1), Address(output, (term->parentheses.subpatternId << 1) * sizeof(int))); + + // If Greedy, jump to the end. + if (term->quantityType == QuantifierGreedy) { + // Clear the flag in the stackframe indicating we ran through the subpattern. + unsigned parenthesesFrameLocation = term->frameLocation; + storeToFrame(TrustedImm32(-1), parenthesesFrameLocation); + // Jump to after the parentheses, skipping the subpattern. + jump(m_ops[op.m_nextOp].m_reentry); + // A backtrack from after the parentheses, when skipping the subpattern, + // will jump back to here. + op.m_jumps.link(this); + } - state.checkedTotal -= countCheckedAfterAssertion; - if (countCheckedAfterAssertion) - sub32(Imm32(countCheckedAfterAssertion), index); + m_backtrackingState.fallthrough(); + } + break; + } + case OpParenthesesSubpatternOnceEnd: { + PatternTerm* term = op.m_term; + + if (term->quantityType != QuantifierFixedCount) { + m_backtrackingState.link(this); + + // Check whether we should backtrack back into the parentheses, or if we + // are currently in a state where we had skipped over the subpattern + // (in which case the flag value on the stack will be -1). + unsigned parenthesesFrameLocation = term->frameLocation; + Jump hadSkipped = branch32(Equal, Address(stackPointerRegister, parenthesesFrameLocation * sizeof(void*)), TrustedImm32(-1)); + + if (term->quantityType == QuantifierGreedy) { + // For Greedy parentheses, we skip after having already tried going + // through the subpattern, so if we get here we're done. + YarrOp& beginOp = m_ops[op.m_previousOp]; + beginOp.m_jumps.append(hadSkipped); + } else { + // For NonGreedy parentheses, we try skipping the subpattern first, + // so if we get here we need to try running through the subpattern + // next. Jump back to the start of the parentheses in the forwards + // matching path. + ASSERT(term->quantityType == QuantifierNonGreedy); + YarrOp& beginOp = m_ops[op.m_previousOp]; + hadSkipped.linkTo(beginOp.m_reentry, this); + } - TermGenerationState parenthesesState(disjunction, state.checkedTotal); - generateParenthesesDisjunction(state.term(), parenthesesState, alternativeFrameLocation); - // Success! - which means - Success! - loadFromFrame(parenthesesFrameLocation, index); - Jump success = jump(); + m_backtrackingState.fallthrough(); + } - parenthesesState.linkAlternativeBacktracks(this); + m_backtrackingState.append(op.m_jumps); + break; + } - loadFromFrame(parenthesesFrameLocation, index); - state.jumpToBacktrack(this); + // OpParenthesesSubpatternTerminalBegin/End + // + // Terminal subpatterns will always match - there is nothing after them to + // force a backtrack, and they have a minimum count of 0, and as such will + // always produce an acceptable result. + case OpParenthesesSubpatternTerminalBegin: { + // We will backtrack to this point once the subpattern cannot match any + // more. Since no match is accepted as a successful match (we are Greedy + // quantified with a minimum of zero) jump back to the forwards matching + // path at the end. + YarrOp& endOp = m_ops[op.m_nextOp]; + m_backtrackingState.linkTo(endOp.m_reentry, this); + break; + } + case OpParenthesesSubpatternTerminalEnd: + // We should never be backtracking to here (hence the 'terminal' in the name). + ASSERT(m_backtrackingState.isEmpty()); + m_backtrackingState.append(op.m_jumps); + break; - success.link(this); + // OpParentheticalAssertionBegin/End + case OpParentheticalAssertionBegin: { + PatternTerm* term = op.m_term; + YarrOp& endOp = m_ops[op.m_nextOp]; - state.checkedTotal += countCheckedAfterAssertion; - } - } + // We need to handle the backtracks upon backtracking back out + // of a parenthetical assertion if either we need to correct + // the input index, or the assertion was inverted. + if (op.m_checkAdjust || term->invert()) { + m_backtrackingState.link(this); - void generateTerm(TermGenerationState& state) - { - PatternTerm& term = state.term(); + if (op.m_checkAdjust) + add32(Imm32(op.m_checkAdjust), index); - switch (term.type) { - case PatternTerm::TypeAssertionBOL: - generateAssertionBOL(state); - break; + // In an inverted assertion failure to match the subpattern + // is treated as a successful match - jump to the end of the + // subpattern. We already have adjusted the input position + // back to that before the assertion, which is correct. + if (term->invert()) + jump(endOp.m_reentry); - case PatternTerm::TypeAssertionEOL: - generateAssertionEOL(state); - break; + m_backtrackingState.fallthrough(); + } - case PatternTerm::TypeAssertionWordBoundary: - generateAssertionWordBoundary(state); - break; + // The End node's jump list will contain any backtracks into + // the end of the assertion. Also, if inverted, we will have + // added the failure caused by a successful match to this. + m_backtrackingState.append(endOp.m_jumps); - case PatternTerm::TypePatternCharacter: - switch (term.quantityType) { - case QuantifierFixedCount: - if (term.quantityCount == 1) { - if (state.isSinglePatternCharacterLookaheadTerm() && (state.lookaheadTerm().inputPosition == (term.inputPosition + 1))) { - generatePatternCharacterPair(state); - state.nextTerm(); - } else - generatePatternCharacterSingle(state); - } else - generatePatternCharacterFixed(state); - break; - case QuantifierGreedy: - generatePatternCharacterGreedy(state); - break; - case QuantifierNonGreedy: - generatePatternCharacterNonGreedy(state); + m_checked += op.m_checkAdjust; break; } - break; + case OpParentheticalAssertionEnd: { + // FIXME: We should really be clearing any nested subpattern + // matches on bailing out from after the pattern. Firefox has + // this bug too (presumably because they use YARR!) - case PatternTerm::TypeCharacterClass: - switch (term.quantityType) { - case QuantifierFixedCount: - if (term.quantityCount == 1) - generateCharacterClassSingle(state); - else - generateCharacterClassFixed(state); - break; - case QuantifierGreedy: - generateCharacterClassGreedy(state); - break; - case QuantifierNonGreedy: - generateCharacterClassNonGreedy(state); + // Never backtrack into an assertion; later failures bail to before the begin. + m_backtrackingState.takeBacktracksToJumpList(op.m_jumps, this); + + YarrOp& lastOp = m_ops[op.m_previousOp]; + m_checked -= lastOp.m_checkAdjust; break; } - break; - - case PatternTerm::TypeBackReference: - m_shouldFallBack = true; - break; - - case PatternTerm::TypeForwardReference: - break; - case PatternTerm::TypeParenthesesSubpattern: - if (term.quantityCount == 1 && !term.parentheses.isCopy) - generateParenthesesSingle(state); - else if (term.parentheses.isTerminal) - generateParenthesesGreedyNoBacktrack(state); - else - m_shouldFallBack = true; - break; + case OpMatchFailed: + break; + } - case PatternTerm::TypeParentheticalAssertion: - generateParentheticalAssertion(state); - break; - } + } while (opIndex); } - void generateDisjunction(PatternDisjunction* disjunction) + // Compilation methods: + // ==================== + + // opCompileParenthesesSubpattern + // Emits ops for a subpattern (set of parentheses). These consist + // of a set of alternatives wrapped in an outer set of nodes for + // the parentheses. + // Supported types of parentheses are 'Once' (quantityCount == 1) + // and 'Terminal' (non-capturing parentheses quantified as greedy + // and infinite). + // Alternatives will use the 'Simple' set of ops if either the + // subpattern is terminal (in which case we will never need to + // backtrack), or if the subpattern only contains one alternative. + void opCompileParenthesesSubpattern(PatternTerm* term) { - TermGenerationState state(disjunction, 0); - state.resetAlternative(); - - // check availability for the next alternative - int countCheckedForCurrentAlternative = 0; - int countToCheckForFirstAlternative = 0; - bool hasShorterAlternatives = false; - bool setRepeatAlternativeLabels = false; - JumpList notEnoughInputForPreviousAlternative; - Label firstAlternative; - Label firstAlternativeInputChecked; - - // The label 'firstAlternative' is used to plant a check to see if there is - // sufficient input available to run the first repeating alternative. - // The label 'firstAlternativeInputChecked' will jump directly to matching - // the first repeating alternative having skipped this check. - - if (state.alternativeValid()) { - PatternAlternative* alternative = state.alternative(); - if (!alternative->onceThrough()) { - firstAlternative = Label(this); - setRepeatAlternativeLabels = true; + YarrOpCode parenthesesBeginOpCode; + YarrOpCode parenthesesEndOpCode; + YarrOpCode alternativeBeginOpCode = OpSimpleNestedAlternativeBegin; + YarrOpCode alternativeNextOpCode = OpSimpleNestedAlternativeNext; + YarrOpCode alternativeEndOpCode = OpSimpleNestedAlternativeEnd; + + // We can currently only compile quantity 1 subpatterns that are + // not copies. We generate a copy in the case of a range quantifier, + // e.g. /(?:x){3,9}/, or /(?:x)+/ (These are effectively expanded to + // /(?:x){3,3}(?:x){0,6}/ and /(?:x)(?:x)*/ repectively). The problem + // comes where the subpattern is capturing, in which case we would + // need to restore the capture from the first subpattern upon a + // failure in the second. + if (term->quantityCount == 1 && !term->parentheses.isCopy) { + // Select the 'Once' nodes. + parenthesesBeginOpCode = OpParenthesesSubpatternOnceBegin; + parenthesesEndOpCode = OpParenthesesSubpatternOnceEnd; + + // If there is more than one alternative we cannot use the 'simple' nodes. + if (term->parentheses.disjunction->m_alternatives.size() != 1) { + alternativeBeginOpCode = OpNestedAlternativeBegin; + alternativeNextOpCode = OpNestedAlternativeNext; + alternativeEndOpCode = OpNestedAlternativeEnd; } - countToCheckForFirstAlternative = alternative->m_minimumSize; - state.checkedTotal += countToCheckForFirstAlternative; - if (countToCheckForFirstAlternative) - notEnoughInputForPreviousAlternative.append(jumpIfNoAvailableInput(countToCheckForFirstAlternative)); - countCheckedForCurrentAlternative = countToCheckForFirstAlternative; + } else if (term->parentheses.isTerminal) { + // Select the 'Terminal' nodes. + parenthesesBeginOpCode = OpParenthesesSubpatternTerminalBegin; + parenthesesEndOpCode = OpParenthesesSubpatternTerminalEnd; + } else { + // This subpattern is not supported by the JIT. + m_shouldFallBack = true; + return; } - if (setRepeatAlternativeLabels) - firstAlternativeInputChecked = Label(this); - - while (state.alternativeValid()) { - PatternAlternative* alternative = state.alternative(); - optimizeAlternative(alternative); - - // Track whether any alternatives are shorter than the first one. - if (!alternative->onceThrough()) - hasShorterAlternatives = hasShorterAlternatives || (countCheckedForCurrentAlternative < countToCheckForFirstAlternative); - - for (state.resetTerm(); state.termValid(); state.nextTerm()) - generateTerm(state); - - // If we get here, the alternative matched. - if (m_pattern.m_body->m_callFrameSize) - addPtr(Imm32(m_pattern.m_body->m_callFrameSize * sizeof(void*)), stackPointerRegister); - - ASSERT(index != returnRegister); - if (m_pattern.m_body->m_hasFixedSize) { - move(index, returnRegister); - if (alternative->m_minimumSize) - sub32(Imm32(alternative->m_minimumSize), returnRegister); + size_t parenBegin = m_ops.size(); + m_ops.append(parenthesesBeginOpCode); - store32(returnRegister, output); - } else - load32(Address(output), returnRegister); - - store32(index, Address(output, 4)); + m_ops.append(alternativeBeginOpCode); + m_ops.last().m_previousOp = notFound; + m_ops.last().m_term = term; + Vector<PatternAlternative*>& alternatives = term->parentheses.disjunction->m_alternatives; + for (unsigned i = 0; i < alternatives.size(); ++i) { + size_t lastOpIndex = m_ops.size() - 1; - generateReturn(); + PatternAlternative* nestedAlternative = alternatives[i]; + opCompileAlternative(nestedAlternative); - state.nextAlternative(); - if (alternative->onceThrough() && state.alternativeValid()) - state.clearBacktrack(); + size_t thisOpIndex = m_ops.size(); + m_ops.append(YarrOp(alternativeNextOpCode)); - // if there are any more alternatives, plant the check for input before looping. - if (state.alternativeValid()) { - state.setJumpListToPriorParen(0); - PatternAlternative* nextAlternative = state.alternative(); - if (!setRepeatAlternativeLabels && !nextAlternative->onceThrough()) { - // We have handled non-repeating alternatives, jump to next iteration - // and loop over repeating alternatives. - state.jumpToBacktrack(this); + YarrOp& lastOp = m_ops[lastOpIndex]; + YarrOp& thisOp = m_ops[thisOpIndex]; - countToCheckForFirstAlternative = nextAlternative->m_minimumSize; + lastOp.m_alternative = nestedAlternative; + lastOp.m_nextOp = thisOpIndex; + thisOp.m_previousOp = lastOpIndex; + thisOp.m_term = term; + } + YarrOp& lastOp = m_ops.last(); + ASSERT(lastOp.m_op == alternativeNextOpCode); + lastOp.m_op = alternativeEndOpCode; + lastOp.m_alternative = 0; + lastOp.m_nextOp = notFound; - // If we get here, there the last input checked failed. - notEnoughInputForPreviousAlternative.link(this); + size_t parenEnd = m_ops.size(); + m_ops.append(parenthesesEndOpCode); - state.linkAlternativeBacktracks(this); + m_ops[parenBegin].m_term = term; + m_ops[parenBegin].m_previousOp = notFound; + m_ops[parenBegin].m_nextOp = parenEnd; + m_ops[parenEnd].m_term = term; + m_ops[parenEnd].m_previousOp = parenBegin; + m_ops[parenEnd].m_nextOp = notFound; + } - // Back up to start the looping alternatives. - if (countCheckedForCurrentAlternative) - sub32(Imm32(countCheckedForCurrentAlternative), index); + // opCompileParentheticalAssertion + // Emits ops for a parenthetical assertion. These consist of an + // OpSimpleNestedAlternativeBegin/Next/End set of nodes wrapping + // the alternatives, with these wrapped by an outer pair of + // OpParentheticalAssertionBegin/End nodes. + // We can always use the OpSimpleNestedAlternative nodes in the + // case of parenthetical assertions since these only ever match + // once, and will never backtrack back into the assertion. + void opCompileParentheticalAssertion(PatternTerm* term) + { + size_t parenBegin = m_ops.size(); + m_ops.append(OpParentheticalAssertionBegin); + + m_ops.append(OpSimpleNestedAlternativeBegin); + m_ops.last().m_previousOp = notFound; + m_ops.last().m_term = term; + Vector<PatternAlternative*>& alternatives = term->parentheses.disjunction->m_alternatives; + for (unsigned i = 0; i < alternatives.size(); ++i) { + size_t lastOpIndex = m_ops.size() - 1; + + PatternAlternative* nestedAlternative = alternatives[i]; + opCompileAlternative(nestedAlternative); + + size_t thisOpIndex = m_ops.size(); + m_ops.append(YarrOp(OpSimpleNestedAlternativeNext)); + + YarrOp& lastOp = m_ops[lastOpIndex]; + YarrOp& thisOp = m_ops[thisOpIndex]; + + lastOp.m_alternative = nestedAlternative; + lastOp.m_nextOp = thisOpIndex; + thisOp.m_previousOp = lastOpIndex; + thisOp.m_term = term; + } + YarrOp& lastOp = m_ops.last(); + ASSERT(lastOp.m_op == OpSimpleNestedAlternativeNext); + lastOp.m_op = OpSimpleNestedAlternativeEnd; + lastOp.m_alternative = 0; + lastOp.m_nextOp = notFound; + + size_t parenEnd = m_ops.size(); + m_ops.append(OpParentheticalAssertionEnd); + + m_ops[parenBegin].m_term = term; + m_ops[parenBegin].m_previousOp = notFound; + m_ops[parenBegin].m_nextOp = parenEnd; + m_ops[parenEnd].m_term = term; + m_ops[parenEnd].m_previousOp = parenBegin; + m_ops[parenEnd].m_nextOp = notFound; + } - firstAlternative = Label(this); + // opCompileAlternative + // Called to emit nodes for all terms in an alternative. + void opCompileAlternative(PatternAlternative* alternative) + { + optimizeAlternative(alternative); - state.checkedTotal = countToCheckForFirstAlternative; - if (countToCheckForFirstAlternative) - notEnoughInputForPreviousAlternative.append(jumpIfNoAvailableInput(countToCheckForFirstAlternative)); + for (unsigned i = 0; i < alternative->m_terms.size(); ++i) { + PatternTerm* term = &alternative->m_terms[i]; - countCheckedForCurrentAlternative = countToCheckForFirstAlternative; + switch (term->type) { + case PatternTerm::TypeParenthesesSubpattern: + opCompileParenthesesSubpattern(term); + break; - firstAlternativeInputChecked = Label(this); + case PatternTerm::TypeParentheticalAssertion: + opCompileParentheticalAssertion(term); + break; - setRepeatAlternativeLabels = true; - } else { - int countToCheckForNextAlternative = nextAlternative->m_minimumSize; - - if (countCheckedForCurrentAlternative > countToCheckForNextAlternative) { // CASE 1: current alternative was longer than the next one. - // If we get here, then the last input checked failed. - notEnoughInputForPreviousAlternative.link(this); - - // Check if sufficent input available to run the next alternative - notEnoughInputForPreviousAlternative.append(jumpIfNoAvailableInput(countToCheckForNextAlternative - countCheckedForCurrentAlternative)); - // We are now in the correct state to enter the next alternative; this add is only required - // to mirror and revert operation of the sub32, just below. - add32(Imm32(countCheckedForCurrentAlternative - countToCheckForNextAlternative), index); - - // If we get here, then the last input checked passed. - state.linkAlternativeBacktracks(this); - - // No need to check if we can run the next alternative, since it is shorter - - // just update index. - sub32(Imm32(countCheckedForCurrentAlternative - countToCheckForNextAlternative), index); - } else if (countCheckedForCurrentAlternative < countToCheckForNextAlternative) { // CASE 2: next alternative is longer than the current one. - // If we get here, then the last input checked failed. - // If there is insufficient input to run the current alternative, and the next alternative is longer, - // then there is definitely not enough input to run it - don't even check. Just adjust index, as if - // we had checked. - notEnoughInputForPreviousAlternative.link(this); - add32(Imm32(countToCheckForNextAlternative - countCheckedForCurrentAlternative), index); - notEnoughInputForPreviousAlternative.append(jump()); - - // The next alternative is longer than the current one; check the difference. - state.linkAlternativeBacktracks(this); - - notEnoughInputForPreviousAlternative.append(jumpIfNoAvailableInput(countToCheckForNextAlternative - countCheckedForCurrentAlternative)); - } else { // CASE 3: Both alternatives are the same length. - ASSERT(countCheckedForCurrentAlternative == countToCheckForNextAlternative); - - // If the next alterative is the same length as this one, then no need to check the input - - // if there was sufficent input to run the current alternative then there is sufficient - // input to run the next one; if not, there isn't. - state.linkAlternativeBacktracks(this); - } - state.checkedTotal -= countCheckedForCurrentAlternative; - countCheckedForCurrentAlternative = countToCheckForNextAlternative; - state.checkedTotal += countCheckedForCurrentAlternative; - } + default: + m_ops.append(term); } } + } - // If we get here, all Alternatives failed... + // opCompileBody + // This method compiles the body disjunction of the regular expression. + // The body consists of two sets of alternatives - zero or more 'once + // through' (BOL anchored) alternatives, followed by zero or more + // repeated alternatives. + // For each of these two sets of alteratives, if not empty they will be + // wrapped in a set of OpBodyAlternativeBegin/Next/End nodes (with the + // 'begin' node referencing the first alternative, and 'next' nodes + // referencing any further alternatives. The begin/next/end nodes are + // linked together in a doubly linked list. In the case of repeating + // alternatives, the end node is also linked back to the beginning. + // If no repeating alternatives exist, then a OpMatchFailed node exists + // to return the failing result. + void opCompileBody(PatternDisjunction* disjunction) + { + Vector<PatternAlternative*>& alternatives = disjunction->m_alternatives; + size_t currentAlternativeIndex = 0; - state.checkedTotal -= countCheckedForCurrentAlternative; + // Emit the 'once through' alternatives. + if (alternatives.size() && alternatives[0]->onceThrough()) { + m_ops.append(YarrOp(OpBodyAlternativeBegin)); + m_ops.last().m_previousOp = notFound; - if (!setRepeatAlternativeLabels) { - // If there are no alternatives that need repeating (all are marked 'onceThrough') then just link - // the match failures to this point, and fall through to the return below. - state.linkAlternativeBacktracks(this, true); + do { + size_t lastOpIndex = m_ops.size() - 1; + PatternAlternative* alternative = alternatives[currentAlternativeIndex]; + opCompileAlternative(alternative); - notEnoughInputForPreviousAlternative.link(this); - } else { - // How much more input need there be to be able to retry from the first alternative? - // examples: - // /yarr_jit/ or /wrec|pcre/ - // In these examples we need check for one more input before looping. - // /yarr_jit|pcre/ - // In this case we need check for 5 more input to loop (+4 to allow for the first alterative - // being four longer than the last alternative checked, and another +1 to effectively move - // the start position along by one). - // /yarr|rules/ or /wrec|notsomuch/ - // In these examples, provided that there was sufficient input to have just been matching for - // the second alternative we can loop without checking for available input (since the second - // alternative is longer than the first). In the latter example we need to decrement index - // (by 4) so the start position is only progressed by 1 from the last iteration. - int incrementForNextIter = (countToCheckForFirstAlternative - countCheckedForCurrentAlternative) + 1; - - // First, deal with the cases where there was sufficient input to try the last alternative. - if (incrementForNextIter > 0) // We need to check for more input anyway, fall through to the checking below. - state.linkAlternativeBacktracks(this, true); - else if (m_pattern.m_body->m_hasFixedSize && !incrementForNextIter) // No need to update anything, link these backtracks straight to the to pof the loop! - state.linkAlternativeBacktracksTo(this, firstAlternativeInputChecked, true); - else { // no need to check the input, but we do have some bookkeeping to do first. - state.linkAlternativeBacktracks(this, true); - - // Where necessary update our preserved start position. - if (!m_pattern.m_body->m_hasFixedSize) { - move(index, regT0); - sub32(Imm32(countCheckedForCurrentAlternative - 1), regT0); - store32(regT0, Address(output)); - } + size_t thisOpIndex = m_ops.size(); + m_ops.append(YarrOp(OpBodyAlternativeNext)); - // Update index if necessary, and loop (without checking). - if (incrementForNextIter) - add32(Imm32(incrementForNextIter), index); - jump().linkTo(firstAlternativeInputChecked, this); - } + YarrOp& lastOp = m_ops[lastOpIndex]; + YarrOp& thisOp = m_ops[thisOpIndex]; - notEnoughInputForPreviousAlternative.link(this); - // Update our idea of the start position, if we're tracking this. - if (!m_pattern.m_body->m_hasFixedSize) { - if (countCheckedForCurrentAlternative - 1) { - move(index, regT0); - sub32(Imm32(countCheckedForCurrentAlternative - 1), regT0); - store32(regT0, Address(output)); - } else - store32(index, Address(output)); - } + lastOp.m_alternative = alternative; + lastOp.m_nextOp = thisOpIndex; + thisOp.m_previousOp = lastOpIndex; + + ++currentAlternativeIndex; + } while (currentAlternativeIndex < alternatives.size() && alternatives[currentAlternativeIndex]->onceThrough()); - // Check if there is sufficent input to run the first alternative again. - jumpIfAvailableInput(incrementForNextIter).linkTo(firstAlternativeInputChecked, this); - // No - insufficent input to run the first alteranative, are there any other alternatives we - // might need to check? If so, the last check will have left the index incremented by - // (countToCheckForFirstAlternative + 1), so we need test whether countToCheckForFirstAlternative - // LESS input is available, to have the effect of just progressing the start position by 1 - // from the last iteration. If this check passes we can just jump up to the check associated - // with the first alternative in the loop. This is a bit sad, since we'll end up trying the - // first alternative again, and this check will fail (otherwise the check planted just above - // here would have passed). This is a bit sad, however it saves trying to do something more - // complex here in compilation, and in the common case we should end up coallescing the checks. - // - // FIXME: a nice improvement here may be to stop trying to match sooner, based on the least - // of the minimum-alternative-lengths. E.g. if I have two alternatives of length 200 and 150, - // and a string of length 100, we'll end up looping index from 0 to 100, checking whether there - // is sufficient input to run either alternative (constantly failing). If there had been only - // one alternative, or if the shorter alternative had come first, we would have terminated - // immediately. :-/ - if (hasShorterAlternatives) - jumpIfAvailableInput(-countToCheckForFirstAlternative).linkTo(firstAlternative, this); - // index will now be a bit garbled (depending on whether 'hasShorterAlternatives' is true, - // it has either been incremented by 1 or by (countToCheckForFirstAlternative + 1) ... - // but since we're about to return a failure this doesn't really matter!) + YarrOp& lastOp = m_ops.last(); + + ASSERT(lastOp.m_op == OpBodyAlternativeNext); + lastOp.m_op = OpBodyAlternativeEnd; + lastOp.m_alternative = 0; + lastOp.m_nextOp = notFound; } - if (m_pattern.m_body->m_callFrameSize) - addPtr(Imm32(m_pattern.m_body->m_callFrameSize * sizeof(void*)), stackPointerRegister); + if (currentAlternativeIndex == alternatives.size()) { + m_ops.append(YarrOp(OpMatchFailed)); + return; + } + + // Emit the repeated alternatives. + size_t repeatLoop = m_ops.size(); + m_ops.append(YarrOp(OpBodyAlternativeBegin)); + m_ops.last().m_previousOp = notFound; + do { + size_t lastOpIndex = m_ops.size() - 1; + PatternAlternative* alternative = alternatives[currentAlternativeIndex]; + ASSERT(!alternative->onceThrough()); + opCompileAlternative(alternative); - move(TrustedImm32(-1), returnRegister); + size_t thisOpIndex = m_ops.size(); + m_ops.append(YarrOp(OpBodyAlternativeNext)); - generateReturn(); + YarrOp& lastOp = m_ops[lastOpIndex]; + YarrOp& thisOp = m_ops[thisOpIndex]; - m_expressionState.emitParenthesesTail(this); - m_expressionState.emitIndirectJumpTable(this); - m_expressionState.linkToNextIteration(this); + lastOp.m_alternative = alternative; + lastOp.m_nextOp = thisOpIndex; + thisOp.m_previousOp = lastOpIndex; + + ++currentAlternativeIndex; + } while (currentAlternativeIndex < alternatives.size()); + YarrOp& lastOp = m_ops.last(); + ASSERT(lastOp.m_op == OpBodyAlternativeNext); + lastOp.m_op = OpBodyAlternativeEnd; + lastOp.m_alternative = 0; + lastOp.m_nextOp = repeatLoop; } void generateEnter() @@ -2230,10 +2325,11 @@ public: YarrGenerator(YarrPattern& pattern) : m_pattern(pattern) , m_shouldFallBack(false) + , m_checked(0) { } - void generate() + void compile(JSGlobalData* globalData, YarrCodeBlock& jitObject) { generateEnter(); @@ -2243,26 +2339,50 @@ public: if (m_pattern.m_body->m_callFrameSize) subPtr(Imm32(m_pattern.m_body->m_callFrameSize * sizeof(void*)), stackPointerRegister); - generateDisjunction(m_pattern.m_body); - } - - void compile(JSGlobalData* globalData, YarrCodeBlock& jitObject) - { - generate(); + // Compile the pattern to the internal 'YarrOp' representation. + opCompileBody(m_pattern.m_body); - LinkBuffer patchBuffer(this, globalData->regexAllocator); + // If we encountered anything we can't handle in the JIT code + // (e.g. backreferences) then return early. + if (m_shouldFallBack) { + jitObject.setFallBack(true); + return; + } - for (unsigned i = 0; i < m_expressionState.m_backtrackRecords.size(); ++i) - patchBuffer.patch(m_expressionState.m_backtrackRecords[i].dataLabel, patchBuffer.locationOf(m_expressionState.m_backtrackRecords[i].backtrackLocation)); + generate(); + backtrack(); - jitObject.set(patchBuffer.finalizeCode()); + // Link & finalize the code. + LinkBuffer linkBuffer(this, globalData->regexAllocator); + m_backtrackingState.linkDataLabels(linkBuffer); + jitObject.set(linkBuffer.finalizeCode()); jitObject.setFallBack(m_shouldFallBack); } private: YarrPattern& m_pattern; + + // Used to detect regular expression constructs that are not currently + // supported in the JIT; fall back to the interpreter when this is detected. bool m_shouldFallBack; - GenerationState m_expressionState; + + // The regular expression expressed as a linear sequence of operations. + Vector<YarrOp, 128> m_ops; + + // This records the current input offset being applied due to the current + // set of alternatives we are nested within. E.g. when matching the + // character 'b' within the regular expression /abc/, we will know that + // the minimum size for the alternative is 3, checked upon entry to the + // alternative, and that 'b' is at offset 1 from the start, and as such + // when matching 'b' we need to apply an offset of -2 to the load. + // + // FIXME: This should go away. Rather than tracking this value throughout + // code generation, we should gather this information up front & store it + // on the YarrOp structure. + int m_checked; + + // This class records state whilst generating the backtracking path of code. + BacktrackingState m_backtrackingState; }; void jitCompile(YarrPattern& pattern, JSGlobalData* globalData, YarrCodeBlock& jitObject) diff --git a/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest.cbproj b/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest.cbproj index 285bb2a..95c3054 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest.cbproj +++ b/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest.cbproj @@ -1,138 +1,138 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <PropertyGroup> - <ProjectGuid>{bca37a72-5b07-46cf-b44e-89f8e06451a2}</ProjectGuid> - <Config Condition="'$(Config)'==''">Release</Config> - </PropertyGroup> - <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> - <Base>true</Base> - </PropertyGroup> - <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''"> - <Base>true</Base> - <Cfg_1>true</Cfg_1> - <CfgParent>Base</CfgParent> - </PropertyGroup> - <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''"> - <Base>true</Base> - <Cfg_2>true</Cfg_2> - <CfgParent>Base</CfgParent> - </PropertyGroup> - <PropertyGroup Condition="'$(Base)'!=''"> - <BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed> - <OutputExt>lib</OutputExt> - <DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput> - <Defines>NO_STRICT</Defines> - <DynamicRTL>true</DynamicRTL> - <UsePackages>true</UsePackages> - <ProjectType>CppStaticLibrary</ProjectType> - <BCC_CPPCompileAlways>true</BCC_CPPCompileAlways> - <PackageImports>rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;dclZipForged11.bpi;vclZipForged11.bpi;GR32_BDS2006.bpi;GR32_DSGN_BDS2006.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi;CExceptionExpert11.bpi</PackageImports> - <BCC_wpar>false</BCC_wpar> - <IncludePath>$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</IncludePath> - <AllPackageLibs>rtl.lib;vcl.lib</AllPackageLibs> - <TLIB_PageSize>32</TLIB_PageSize> - <ILINK_LibraryPath>$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</ILINK_LibraryPath> - </PropertyGroup> - <PropertyGroup Condition="'$(Cfg_1)'!=''"> - <BCC_OptimizeForSpeed>false</BCC_OptimizeForSpeed> - <DCC_Optimize>false</DCC_Optimize> - <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe> - <Defines>_DEBUG;$(Defines)</Defines> - <ILINK_FullDebugInfo>true</ILINK_FullDebugInfo> - <BCC_InlineFunctionExpansion>false</BCC_InlineFunctionExpansion> - <ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking> - <BCC_UseRegisterVariables>None</BCC_UseRegisterVariables> - <DCC_Define>DEBUG</DCC_Define> - <BCC_DebugLineNumbers>true</BCC_DebugLineNumbers> - <IntermediateOutputDir>Debug</IntermediateOutputDir> - <TASM_DisplaySourceLines>true</TASM_DisplaySourceLines> - <BCC_StackFrames>true</BCC_StackFrames> - <BCC_DisableOptimizations>true</BCC_DisableOptimizations> - <ILINK_LibraryPath>$(BDS)\lib\debug;$(ILINK_LibraryPath)</ILINK_LibraryPath> - <TASM_Debugging>Full</TASM_Debugging> - <BCC_SourceDebuggingOn>true</BCC_SourceDebuggingOn> - </PropertyGroup> - <PropertyGroup Condition="'$(Cfg_2)'!=''"> - <Defines>NDEBUG;$(Defines)</Defines> - <IntermediateOutputDir>Release</IntermediateOutputDir> - <ILINK_LibraryPath>$(BDS)\lib\release;$(ILINK_LibraryPath)</ILINK_LibraryPath> - <TASM_Debugging>None</TASM_Debugging> - </PropertyGroup> - <ProjectExtensions> - <Borland.Personality>CPlusPlusBuilder.Personality</Borland.Personality> - <Borland.ProjectType>CppStaticLibrary</Borland.ProjectType> - <BorlandProject> -<BorlandProject><CPlusPlusBuilder.Personality><VersionInfo><VersionInfo Name="IncludeVerInfo">False</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1033</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Debugging><Debugging Name="DebugSourceDirs"></Debugging></Debugging><Parameters><Parameters Name="RunParams"></Parameters><Parameters Name="Launcher"></Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="DebugCWD"></Parameters><Parameters Name="HostApplication"></Parameters><Parameters Name="RemoteHost"></Parameters><Parameters Name="RemotePath"></Parameters><Parameters Name="RemoteParams"></Parameters><Parameters Name="RemoteLauncher"></Parameters><Parameters Name="UseRemoteLauncher">False</Parameters><Parameters Name="RemoteCWD"></Parameters><Parameters Name="RemoteDebug">False</Parameters><Parameters Name="Debug Symbols Search Path"></Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Excluded_Packages> - - - <Excluded_Packages Name="$(BDS)\bin\bcboffice2k100.bpl">CodeGear C++Builder Office 2000 Servers Package</Excluded_Packages> - <Excluded_Packages Name="$(BDS)\bin\bcbofficexp100.bpl">CodeGear C++Builder Office XP Servers Package</Excluded_Packages> - </Excluded_Packages><Linker><Linker Name="LibPrefix"></Linker><Linker Name="LibSuffix"></Linker><Linker Name="LibVersion"></Linker></Linker><ProjectProperties><ProjectProperties Name="AutoShowDeps">False</ProjectProperties><ProjectProperties Name="ManagePaths">True</ProjectProperties><ProjectProperties Name="VerifyPackages">True</ProjectProperties></ProjectProperties><HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Count">3</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item0">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item1">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item2">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\src;..\include</HistoryLists_hlIncludePath></HistoryLists_hlIncludePath><HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Count">1</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item0">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</HistoryLists_hlILINK_LibraryPath></HistoryLists_hlILINK_LibraryPath><HistoryLists_hlDefines><HistoryLists_hlDefines Name="Count">1</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item0">NO_STRICT</HistoryLists_hlDefines></HistoryLists_hlDefines><HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Count">1</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item0">32</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item1">16</HistoryLists_hlTLIB_PageSize></HistoryLists_hlTLIB_PageSize></CPlusPlusBuilder.Personality></BorlandProject></BorlandProject> - </ProjectExtensions> - <Import Project="$(MSBuildBinPath)\Borland.Cpp.Targets" /> - <ItemGroup> - <None Include="..\include\gtest\gtest-death-test.h"> - <BuildOrder>3</BuildOrder> - </None> - <None Include="..\include\gtest\gtest-message.h"> - <BuildOrder>4</BuildOrder> - </None> - <None Include="..\include\gtest\gtest-param-test.h"> - <BuildOrder>5</BuildOrder> - </None> - <None Include="..\include\gtest\gtest-spi.h"> - <BuildOrder>6</BuildOrder> - </None> - <None Include="..\include\gtest\gtest-test-part.h"> - <BuildOrder>7</BuildOrder> - </None> - <None Include="..\include\gtest\gtest-typed-test.h"> - <BuildOrder>8</BuildOrder> - </None> - <None Include="..\include\gtest\gtest.h"> - <BuildOrder>0</BuildOrder> - </None> - <None Include="..\include\gtest\gtest_pred_impl.h"> - <BuildOrder>1</BuildOrder> - </None> - <None Include="..\include\gtest\gtest_prod.h"> - <BuildOrder>2</BuildOrder> - </None> - <None Include="..\include\gtest\internal\gtest-death-test-internal.h"> - <BuildOrder>9</BuildOrder> - </None> - <None Include="..\include\gtest\internal\gtest-filepath.h"> - <BuildOrder>10</BuildOrder> - </None> - <None Include="..\include\gtest\internal\gtest-internal.h"> - <BuildOrder>11</BuildOrder> - </None> - <None Include="..\include\gtest\internal\gtest-linked_ptr.h"> - <BuildOrder>12</BuildOrder> - </None> - <None Include="..\include\gtest\internal\gtest-param-util-generated.h"> - <BuildOrder>14</BuildOrder> - </None> - <None Include="..\include\gtest\internal\gtest-param-util.h"> - <BuildOrder>13</BuildOrder> - </None> - <None Include="..\include\gtest\internal\gtest-port.h"> - <BuildOrder>15</BuildOrder> - </None> - <None Include="..\include\gtest\internal\gtest-string.h"> - <BuildOrder>16</BuildOrder> - </None> - <None Include="..\include\gtest\internal\gtest-type-util.h"> - <BuildOrder>17</BuildOrder> - </None> - <CppCompile Include="gtest_all.cc"> - <BuildOrder>18</BuildOrder> - </CppCompile> - <BuildConfiguration Include="Debug"> - <Key>Cfg_1</Key> - </BuildConfiguration> - <BuildConfiguration Include="Release"> - <Key>Cfg_2</Key> - </BuildConfiguration> - </ItemGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <ProjectGuid>{bca37a72-5b07-46cf-b44e-89f8e06451a2}</ProjectGuid> + <Config Condition="'$(Config)'==''">Release</Config> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> + <Base>true</Base> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''"> + <Base>true</Base> + <Cfg_1>true</Cfg_1> + <CfgParent>Base</CfgParent> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''"> + <Base>true</Base> + <Cfg_2>true</Cfg_2> + <CfgParent>Base</CfgParent> + </PropertyGroup> + <PropertyGroup Condition="'$(Base)'!=''"> + <BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed> + <OutputExt>lib</OutputExt> + <DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput> + <Defines>NO_STRICT</Defines> + <DynamicRTL>true</DynamicRTL> + <UsePackages>true</UsePackages> + <ProjectType>CppStaticLibrary</ProjectType> + <BCC_CPPCompileAlways>true</BCC_CPPCompileAlways> + <PackageImports>rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;dclZipForged11.bpi;vclZipForged11.bpi;GR32_BDS2006.bpi;GR32_DSGN_BDS2006.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi;CExceptionExpert11.bpi</PackageImports> + <BCC_wpar>false</BCC_wpar> + <IncludePath>$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</IncludePath> + <AllPackageLibs>rtl.lib;vcl.lib</AllPackageLibs> + <TLIB_PageSize>32</TLIB_PageSize> + <ILINK_LibraryPath>$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</ILINK_LibraryPath> + </PropertyGroup> + <PropertyGroup Condition="'$(Cfg_1)'!=''"> + <BCC_OptimizeForSpeed>false</BCC_OptimizeForSpeed> + <DCC_Optimize>false</DCC_Optimize> + <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe> + <Defines>_DEBUG;$(Defines)</Defines> + <ILINK_FullDebugInfo>true</ILINK_FullDebugInfo> + <BCC_InlineFunctionExpansion>false</BCC_InlineFunctionExpansion> + <ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking> + <BCC_UseRegisterVariables>None</BCC_UseRegisterVariables> + <DCC_Define>DEBUG</DCC_Define> + <BCC_DebugLineNumbers>true</BCC_DebugLineNumbers> + <IntermediateOutputDir>Debug</IntermediateOutputDir> + <TASM_DisplaySourceLines>true</TASM_DisplaySourceLines> + <BCC_StackFrames>true</BCC_StackFrames> + <BCC_DisableOptimizations>true</BCC_DisableOptimizations> + <ILINK_LibraryPath>$(BDS)\lib\debug;$(ILINK_LibraryPath)</ILINK_LibraryPath> + <TASM_Debugging>Full</TASM_Debugging> + <BCC_SourceDebuggingOn>true</BCC_SourceDebuggingOn> + </PropertyGroup> + <PropertyGroup Condition="'$(Cfg_2)'!=''"> + <Defines>NDEBUG;$(Defines)</Defines> + <IntermediateOutputDir>Release</IntermediateOutputDir> + <ILINK_LibraryPath>$(BDS)\lib\release;$(ILINK_LibraryPath)</ILINK_LibraryPath> + <TASM_Debugging>None</TASM_Debugging> + </PropertyGroup> + <ProjectExtensions> + <Borland.Personality>CPlusPlusBuilder.Personality</Borland.Personality> + <Borland.ProjectType>CppStaticLibrary</Borland.ProjectType> + <BorlandProject> +<BorlandProject><CPlusPlusBuilder.Personality><VersionInfo><VersionInfo Name="IncludeVerInfo">False</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1033</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Debugging><Debugging Name="DebugSourceDirs"></Debugging></Debugging><Parameters><Parameters Name="RunParams"></Parameters><Parameters Name="Launcher"></Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="DebugCWD"></Parameters><Parameters Name="HostApplication"></Parameters><Parameters Name="RemoteHost"></Parameters><Parameters Name="RemotePath"></Parameters><Parameters Name="RemoteParams"></Parameters><Parameters Name="RemoteLauncher"></Parameters><Parameters Name="UseRemoteLauncher">False</Parameters><Parameters Name="RemoteCWD"></Parameters><Parameters Name="RemoteDebug">False</Parameters><Parameters Name="Debug Symbols Search Path"></Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Excluded_Packages> + + + <Excluded_Packages Name="$(BDS)\bin\bcboffice2k100.bpl">CodeGear C++Builder Office 2000 Servers Package</Excluded_Packages> + <Excluded_Packages Name="$(BDS)\bin\bcbofficexp100.bpl">CodeGear C++Builder Office XP Servers Package</Excluded_Packages> + </Excluded_Packages><Linker><Linker Name="LibPrefix"></Linker><Linker Name="LibSuffix"></Linker><Linker Name="LibVersion"></Linker></Linker><ProjectProperties><ProjectProperties Name="AutoShowDeps">False</ProjectProperties><ProjectProperties Name="ManagePaths">True</ProjectProperties><ProjectProperties Name="VerifyPackages">True</ProjectProperties></ProjectProperties><HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Count">3</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item0">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item1">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item2">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\src;..\include</HistoryLists_hlIncludePath></HistoryLists_hlIncludePath><HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Count">1</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item0">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</HistoryLists_hlILINK_LibraryPath></HistoryLists_hlILINK_LibraryPath><HistoryLists_hlDefines><HistoryLists_hlDefines Name="Count">1</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item0">NO_STRICT</HistoryLists_hlDefines></HistoryLists_hlDefines><HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Count">1</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item0">32</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item1">16</HistoryLists_hlTLIB_PageSize></HistoryLists_hlTLIB_PageSize></CPlusPlusBuilder.Personality></BorlandProject></BorlandProject> + </ProjectExtensions> + <Import Project="$(MSBuildBinPath)\Borland.Cpp.Targets" /> + <ItemGroup> + <None Include="..\include\gtest\gtest-death-test.h"> + <BuildOrder>3</BuildOrder> + </None> + <None Include="..\include\gtest\gtest-message.h"> + <BuildOrder>4</BuildOrder> + </None> + <None Include="..\include\gtest\gtest-param-test.h"> + <BuildOrder>5</BuildOrder> + </None> + <None Include="..\include\gtest\gtest-spi.h"> + <BuildOrder>6</BuildOrder> + </None> + <None Include="..\include\gtest\gtest-test-part.h"> + <BuildOrder>7</BuildOrder> + </None> + <None Include="..\include\gtest\gtest-typed-test.h"> + <BuildOrder>8</BuildOrder> + </None> + <None Include="..\include\gtest\gtest.h"> + <BuildOrder>0</BuildOrder> + </None> + <None Include="..\include\gtest\gtest_pred_impl.h"> + <BuildOrder>1</BuildOrder> + </None> + <None Include="..\include\gtest\gtest_prod.h"> + <BuildOrder>2</BuildOrder> + </None> + <None Include="..\include\gtest\internal\gtest-death-test-internal.h"> + <BuildOrder>9</BuildOrder> + </None> + <None Include="..\include\gtest\internal\gtest-filepath.h"> + <BuildOrder>10</BuildOrder> + </None> + <None Include="..\include\gtest\internal\gtest-internal.h"> + <BuildOrder>11</BuildOrder> + </None> + <None Include="..\include\gtest\internal\gtest-linked_ptr.h"> + <BuildOrder>12</BuildOrder> + </None> + <None Include="..\include\gtest\internal\gtest-param-util-generated.h"> + <BuildOrder>14</BuildOrder> + </None> + <None Include="..\include\gtest\internal\gtest-param-util.h"> + <BuildOrder>13</BuildOrder> + </None> + <None Include="..\include\gtest\internal\gtest-port.h"> + <BuildOrder>15</BuildOrder> + </None> + <None Include="..\include\gtest\internal\gtest-string.h"> + <BuildOrder>16</BuildOrder> + </None> + <None Include="..\include\gtest\internal\gtest-type-util.h"> + <BuildOrder>17</BuildOrder> + </None> + <CppCompile Include="gtest_all.cc"> + <BuildOrder>18</BuildOrder> + </CppCompile> + <BuildConfiguration Include="Debug"> + <Key>Cfg_1</Key> + </BuildConfiguration> + <BuildConfiguration Include="Release"> + <Key>Cfg_2</Key> + </BuildConfiguration> + </ItemGroup> </Project> \ No newline at end of file diff --git a/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest.groupproj b/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest.groupproj index 849f4c4..faf31ca 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest.groupproj +++ b/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest.groupproj @@ -1,54 +1,54 @@ -<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <PropertyGroup> - <ProjectGuid>{c1d923e0-6cba-4332-9b6f-3420acbf5091}</ProjectGuid> - </PropertyGroup> - <ItemGroup /> - <ItemGroup> - <Projects Include="gtest.cbproj" /> - <Projects Include="gtest_main.cbproj" /> - <Projects Include="gtest_unittest.cbproj" /> - </ItemGroup> - <ProjectExtensions> - <Borland.Personality>Default.Personality</Borland.Personality> - <Borland.ProjectType /> - <BorlandProject> -<BorlandProject xmlns=""><Default.Personality></Default.Personality></BorlandProject></BorlandProject> - </ProjectExtensions> - <Target Name="gtest"> - <MSBuild Projects="gtest.cbproj" Targets="" /> - </Target> - <Target Name="gtest:Clean"> - <MSBuild Projects="gtest.cbproj" Targets="Clean" /> - </Target> - <Target Name="gtest:Make"> - <MSBuild Projects="gtest.cbproj" Targets="Make" /> - </Target> - <Target Name="gtest_main"> - <MSBuild Projects="gtest_main.cbproj" Targets="" /> - </Target> - <Target Name="gtest_main:Clean"> - <MSBuild Projects="gtest_main.cbproj" Targets="Clean" /> - </Target> - <Target Name="gtest_main:Make"> - <MSBuild Projects="gtest_main.cbproj" Targets="Make" /> - </Target> - <Target Name="gtest_unittest"> - <MSBuild Projects="gtest_unittest.cbproj" Targets="" /> - </Target> - <Target Name="gtest_unittest:Clean"> - <MSBuild Projects="gtest_unittest.cbproj" Targets="Clean" /> - </Target> - <Target Name="gtest_unittest:Make"> - <MSBuild Projects="gtest_unittest.cbproj" Targets="Make" /> - </Target> - <Target Name="Build"> - <CallTarget Targets="gtest;gtest_main;gtest_unittest" /> - </Target> - <Target Name="Clean"> - <CallTarget Targets="gtest:Clean;gtest_main:Clean;gtest_unittest:Clean" /> - </Target> - <Target Name="Make"> - <CallTarget Targets="gtest:Make;gtest_main:Make;gtest_unittest:Make" /> - </Target> - <Import Condition="Exists('$(MSBuildBinPath)\Borland.Group.Targets')" Project="$(MSBuildBinPath)\Borland.Group.Targets" /> +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <ProjectGuid>{c1d923e0-6cba-4332-9b6f-3420acbf5091}</ProjectGuid> + </PropertyGroup> + <ItemGroup /> + <ItemGroup> + <Projects Include="gtest.cbproj" /> + <Projects Include="gtest_main.cbproj" /> + <Projects Include="gtest_unittest.cbproj" /> + </ItemGroup> + <ProjectExtensions> + <Borland.Personality>Default.Personality</Borland.Personality> + <Borland.ProjectType /> + <BorlandProject> +<BorlandProject xmlns=""><Default.Personality></Default.Personality></BorlandProject></BorlandProject> + </ProjectExtensions> + <Target Name="gtest"> + <MSBuild Projects="gtest.cbproj" Targets="" /> + </Target> + <Target Name="gtest:Clean"> + <MSBuild Projects="gtest.cbproj" Targets="Clean" /> + </Target> + <Target Name="gtest:Make"> + <MSBuild Projects="gtest.cbproj" Targets="Make" /> + </Target> + <Target Name="gtest_main"> + <MSBuild Projects="gtest_main.cbproj" Targets="" /> + </Target> + <Target Name="gtest_main:Clean"> + <MSBuild Projects="gtest_main.cbproj" Targets="Clean" /> + </Target> + <Target Name="gtest_main:Make"> + <MSBuild Projects="gtest_main.cbproj" Targets="Make" /> + </Target> + <Target Name="gtest_unittest"> + <MSBuild Projects="gtest_unittest.cbproj" Targets="" /> + </Target> + <Target Name="gtest_unittest:Clean"> + <MSBuild Projects="gtest_unittest.cbproj" Targets="Clean" /> + </Target> + <Target Name="gtest_unittest:Make"> + <MSBuild Projects="gtest_unittest.cbproj" Targets="Make" /> + </Target> + <Target Name="Build"> + <CallTarget Targets="gtest;gtest_main;gtest_unittest" /> + </Target> + <Target Name="Clean"> + <CallTarget Targets="gtest:Clean;gtest_main:Clean;gtest_unittest:Clean" /> + </Target> + <Target Name="Make"> + <CallTarget Targets="gtest:Make;gtest_main:Make;gtest_unittest:Make" /> + </Target> + <Import Condition="Exists('$(MSBuildBinPath)\Borland.Group.Targets')" Project="$(MSBuildBinPath)\Borland.Group.Targets" /> </Project> \ No newline at end of file diff --git a/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_all.cc b/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_all.cc index ba7ad68..121b2d8 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_all.cc +++ b/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_all.cc @@ -1,38 +1,38 @@ -// Copyright 2009, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Josh Kelley (joshkel@gmail.com) -// -// Google C++ Testing Framework (Google Test) -// -// C++Builder's IDE cannot build a static library from files with hyphens -// in their name. See http://qc.codegear.com/wc/qcmain.aspx?d=70977 . -// This file serves as a workaround. - -#include "src/gtest-all.cc" +// Copyright 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: Josh Kelley (joshkel@gmail.com) +// +// Google C++ Testing Framework (Google Test) +// +// C++Builder's IDE cannot build a static library from files with hyphens +// in their name. See http://qc.codegear.com/wc/qcmain.aspx?d=70977 . +// This file serves as a workaround. + +#include "src/gtest-all.cc" diff --git a/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_link.cc b/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_link.cc index b955ebf..918eccd 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_link.cc +++ b/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_link.cc @@ -1,40 +1,40 @@ -// Copyright 2009, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Josh Kelley (joshkel@gmail.com) -// -// Google C++ Testing Framework (Google Test) -// -// Links gtest.lib and gtest_main.lib into the current project in C++Builder. -// This means that these libraries can't be renamed, but it's the only way to -// ensure that Debug versus Release test builds are linked against the -// appropriate Debug or Release build of the libraries. - -#pragma link "gtest.lib" -#pragma link "gtest_main.lib" +// Copyright 2009, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Author: Josh Kelley (joshkel@gmail.com) +// +// Google C++ Testing Framework (Google Test) +// +// Links gtest.lib and gtest_main.lib into the current project in C++Builder. +// This means that these libraries can't be renamed, but it's the only way to +// ensure that Debug versus Release test builds are linked against the +// appropriate Debug or Release build of the libraries. + +#pragma link "gtest.lib" +#pragma link "gtest_main.lib" diff --git a/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_main.cbproj b/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_main.cbproj index fae32cb..d76ce13 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_main.cbproj +++ b/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_main.cbproj @@ -1,82 +1,82 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <PropertyGroup> - <ProjectGuid>{bca37a72-5b07-46cf-b44e-89f8e06451a2}</ProjectGuid> - <Config Condition="'$(Config)'==''">Release</Config> - </PropertyGroup> - <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> - <Base>true</Base> - </PropertyGroup> - <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''"> - <Base>true</Base> - <Cfg_1>true</Cfg_1> - <CfgParent>Base</CfgParent> - </PropertyGroup> - <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''"> - <Base>true</Base> - <Cfg_2>true</Cfg_2> - <CfgParent>Base</CfgParent> - </PropertyGroup> - <PropertyGroup Condition="'$(Base)'!=''"> - <BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed> - <OutputExt>lib</OutputExt> - <DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput> - <Defines>NO_STRICT</Defines> - <DynamicRTL>true</DynamicRTL> - <UsePackages>true</UsePackages> - <ProjectType>CppStaticLibrary</ProjectType> - <BCC_CPPCompileAlways>true</BCC_CPPCompileAlways> - <PackageImports>rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;dclZipForged11.bpi;vclZipForged11.bpi;GR32_BDS2006.bpi;GR32_DSGN_BDS2006.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi;CExceptionExpert11.bpi</PackageImports> - <BCC_wpar>false</BCC_wpar> - <IncludePath>$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</IncludePath> - <AllPackageLibs>rtl.lib;vcl.lib</AllPackageLibs> - <TLIB_PageSize>32</TLIB_PageSize> - <ILINK_LibraryPath>$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</ILINK_LibraryPath> - </PropertyGroup> - <PropertyGroup Condition="'$(Cfg_1)'!=''"> - <BCC_OptimizeForSpeed>false</BCC_OptimizeForSpeed> - <DCC_Optimize>false</DCC_Optimize> - <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe> - <Defines>_DEBUG;$(Defines)</Defines> - <ILINK_FullDebugInfo>true</ILINK_FullDebugInfo> - <BCC_InlineFunctionExpansion>false</BCC_InlineFunctionExpansion> - <ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking> - <BCC_UseRegisterVariables>None</BCC_UseRegisterVariables> - <DCC_Define>DEBUG</DCC_Define> - <BCC_DebugLineNumbers>true</BCC_DebugLineNumbers> - <IntermediateOutputDir>Debug</IntermediateOutputDir> - <TASM_DisplaySourceLines>true</TASM_DisplaySourceLines> - <BCC_StackFrames>true</BCC_StackFrames> - <BCC_DisableOptimizations>true</BCC_DisableOptimizations> - <ILINK_LibraryPath>$(BDS)\lib\debug;$(ILINK_LibraryPath)</ILINK_LibraryPath> - <TASM_Debugging>Full</TASM_Debugging> - <BCC_SourceDebuggingOn>true</BCC_SourceDebuggingOn> - </PropertyGroup> - <PropertyGroup Condition="'$(Cfg_2)'!=''"> - <Defines>NDEBUG;$(Defines)</Defines> - <IntermediateOutputDir>Release</IntermediateOutputDir> - <ILINK_LibraryPath>$(BDS)\lib\release;$(ILINK_LibraryPath)</ILINK_LibraryPath> - <TASM_Debugging>None</TASM_Debugging> - </PropertyGroup> - <ProjectExtensions> - <Borland.Personality>CPlusPlusBuilder.Personality</Borland.Personality> - <Borland.ProjectType>CppStaticLibrary</Borland.ProjectType> - <BorlandProject> -<BorlandProject><CPlusPlusBuilder.Personality><VersionInfo><VersionInfo Name="IncludeVerInfo">False</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1033</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Debugging><Debugging Name="DebugSourceDirs"></Debugging></Debugging><Parameters><Parameters Name="RunParams"></Parameters><Parameters Name="Launcher"></Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="DebugCWD"></Parameters><Parameters Name="HostApplication"></Parameters><Parameters Name="RemoteHost"></Parameters><Parameters Name="RemotePath"></Parameters><Parameters Name="RemoteParams"></Parameters><Parameters Name="RemoteLauncher"></Parameters><Parameters Name="UseRemoteLauncher">False</Parameters><Parameters Name="RemoteCWD"></Parameters><Parameters Name="RemoteDebug">False</Parameters><Parameters Name="Debug Symbols Search Path"></Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Excluded_Packages> - <Excluded_Packages Name="$(BDS)\bin\bcboffice2k100.bpl">CodeGear C++Builder Office 2000 Servers Package</Excluded_Packages> - <Excluded_Packages Name="$(BDS)\bin\bcbofficexp100.bpl">CodeGear C++Builder Office XP Servers Package</Excluded_Packages> - </Excluded_Packages><Linker><Linker Name="LibPrefix"></Linker><Linker Name="LibSuffix"></Linker><Linker Name="LibVersion"></Linker></Linker><ProjectProperties><ProjectProperties Name="AutoShowDeps">False</ProjectProperties><ProjectProperties Name="ManagePaths">True</ProjectProperties><ProjectProperties Name="VerifyPackages">True</ProjectProperties></ProjectProperties><HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Count">3</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item0">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item1">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item2">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\src;..\include</HistoryLists_hlIncludePath></HistoryLists_hlIncludePath><HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Count">1</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item0">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</HistoryLists_hlILINK_LibraryPath></HistoryLists_hlILINK_LibraryPath><HistoryLists_hlDefines><HistoryLists_hlDefines Name="Count">1</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item0">NO_STRICT</HistoryLists_hlDefines></HistoryLists_hlDefines><HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Count">1</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item0">32</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item1">16</HistoryLists_hlTLIB_PageSize></HistoryLists_hlTLIB_PageSize></CPlusPlusBuilder.Personality></BorlandProject></BorlandProject> - </ProjectExtensions> - <Import Project="$(MSBuildBinPath)\Borland.Cpp.Targets" /> - <ItemGroup> - <CppCompile Include="..\src\gtest_main.cc"> - <BuildOrder>0</BuildOrder> - </CppCompile> - <BuildConfiguration Include="Debug"> - <Key>Cfg_1</Key> - </BuildConfiguration> - <BuildConfiguration Include="Release"> - <Key>Cfg_2</Key> - </BuildConfiguration> - </ItemGroup> -</Project> +<?xml version="1.0" encoding="utf-8"?> +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <ProjectGuid>{bca37a72-5b07-46cf-b44e-89f8e06451a2}</ProjectGuid> + <Config Condition="'$(Config)'==''">Release</Config> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> + <Base>true</Base> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''"> + <Base>true</Base> + <Cfg_1>true</Cfg_1> + <CfgParent>Base</CfgParent> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''"> + <Base>true</Base> + <Cfg_2>true</Cfg_2> + <CfgParent>Base</CfgParent> + </PropertyGroup> + <PropertyGroup Condition="'$(Base)'!=''"> + <BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed> + <OutputExt>lib</OutputExt> + <DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput> + <Defines>NO_STRICT</Defines> + <DynamicRTL>true</DynamicRTL> + <UsePackages>true</UsePackages> + <ProjectType>CppStaticLibrary</ProjectType> + <BCC_CPPCompileAlways>true</BCC_CPPCompileAlways> + <PackageImports>rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;dclZipForged11.bpi;vclZipForged11.bpi;GR32_BDS2006.bpi;GR32_DSGN_BDS2006.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi;CExceptionExpert11.bpi</PackageImports> + <BCC_wpar>false</BCC_wpar> + <IncludePath>$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</IncludePath> + <AllPackageLibs>rtl.lib;vcl.lib</AllPackageLibs> + <TLIB_PageSize>32</TLIB_PageSize> + <ILINK_LibraryPath>$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</ILINK_LibraryPath> + </PropertyGroup> + <PropertyGroup Condition="'$(Cfg_1)'!=''"> + <BCC_OptimizeForSpeed>false</BCC_OptimizeForSpeed> + <DCC_Optimize>false</DCC_Optimize> + <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe> + <Defines>_DEBUG;$(Defines)</Defines> + <ILINK_FullDebugInfo>true</ILINK_FullDebugInfo> + <BCC_InlineFunctionExpansion>false</BCC_InlineFunctionExpansion> + <ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking> + <BCC_UseRegisterVariables>None</BCC_UseRegisterVariables> + <DCC_Define>DEBUG</DCC_Define> + <BCC_DebugLineNumbers>true</BCC_DebugLineNumbers> + <IntermediateOutputDir>Debug</IntermediateOutputDir> + <TASM_DisplaySourceLines>true</TASM_DisplaySourceLines> + <BCC_StackFrames>true</BCC_StackFrames> + <BCC_DisableOptimizations>true</BCC_DisableOptimizations> + <ILINK_LibraryPath>$(BDS)\lib\debug;$(ILINK_LibraryPath)</ILINK_LibraryPath> + <TASM_Debugging>Full</TASM_Debugging> + <BCC_SourceDebuggingOn>true</BCC_SourceDebuggingOn> + </PropertyGroup> + <PropertyGroup Condition="'$(Cfg_2)'!=''"> + <Defines>NDEBUG;$(Defines)</Defines> + <IntermediateOutputDir>Release</IntermediateOutputDir> + <ILINK_LibraryPath>$(BDS)\lib\release;$(ILINK_LibraryPath)</ILINK_LibraryPath> + <TASM_Debugging>None</TASM_Debugging> + </PropertyGroup> + <ProjectExtensions> + <Borland.Personality>CPlusPlusBuilder.Personality</Borland.Personality> + <Borland.ProjectType>CppStaticLibrary</Borland.ProjectType> + <BorlandProject> +<BorlandProject><CPlusPlusBuilder.Personality><VersionInfo><VersionInfo Name="IncludeVerInfo">False</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1033</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Debugging><Debugging Name="DebugSourceDirs"></Debugging></Debugging><Parameters><Parameters Name="RunParams"></Parameters><Parameters Name="Launcher"></Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="DebugCWD"></Parameters><Parameters Name="HostApplication"></Parameters><Parameters Name="RemoteHost"></Parameters><Parameters Name="RemotePath"></Parameters><Parameters Name="RemoteParams"></Parameters><Parameters Name="RemoteLauncher"></Parameters><Parameters Name="UseRemoteLauncher">False</Parameters><Parameters Name="RemoteCWD"></Parameters><Parameters Name="RemoteDebug">False</Parameters><Parameters Name="Debug Symbols Search Path"></Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Excluded_Packages> + <Excluded_Packages Name="$(BDS)\bin\bcboffice2k100.bpl">CodeGear C++Builder Office 2000 Servers Package</Excluded_Packages> + <Excluded_Packages Name="$(BDS)\bin\bcbofficexp100.bpl">CodeGear C++Builder Office XP Servers Package</Excluded_Packages> + </Excluded_Packages><Linker><Linker Name="LibPrefix"></Linker><Linker Name="LibSuffix"></Linker><Linker Name="LibVersion"></Linker></Linker><ProjectProperties><ProjectProperties Name="AutoShowDeps">False</ProjectProperties><ProjectProperties Name="ManagePaths">True</ProjectProperties><ProjectProperties Name="VerifyPackages">True</ProjectProperties></ProjectProperties><HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Count">3</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item0">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item1">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item2">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\src;..\include</HistoryLists_hlIncludePath></HistoryLists_hlIncludePath><HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Count">1</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item0">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</HistoryLists_hlILINK_LibraryPath></HistoryLists_hlILINK_LibraryPath><HistoryLists_hlDefines><HistoryLists_hlDefines Name="Count">1</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item0">NO_STRICT</HistoryLists_hlDefines></HistoryLists_hlDefines><HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Count">1</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item0">32</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item1">16</HistoryLists_hlTLIB_PageSize></HistoryLists_hlTLIB_PageSize></CPlusPlusBuilder.Personality></BorlandProject></BorlandProject> + </ProjectExtensions> + <Import Project="$(MSBuildBinPath)\Borland.Cpp.Targets" /> + <ItemGroup> + <CppCompile Include="..\src\gtest_main.cc"> + <BuildOrder>0</BuildOrder> + </CppCompile> + <BuildConfiguration Include="Debug"> + <Key>Cfg_1</Key> + </BuildConfiguration> + <BuildConfiguration Include="Release"> + <Key>Cfg_2</Key> + </BuildConfiguration> + </ItemGroup> +</Project> diff --git a/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_unittest.cbproj b/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_unittest.cbproj index 33f7056..dc5db8e 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_unittest.cbproj +++ b/src/3rdparty/webkit/Source/ThirdParty/gtest/codegear/gtest_unittest.cbproj @@ -1,88 +1,88 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <PropertyGroup> - <ProjectGuid>{eea63393-5ac5-4b9c-8909-d75fef2daa41}</ProjectGuid> - <Config Condition="'$(Config)'==''">Release</Config> - </PropertyGroup> - <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> - <Base>true</Base> - </PropertyGroup> - <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''"> - <Base>true</Base> - <Cfg_1>true</Cfg_1> - <CfgParent>Base</CfgParent> - </PropertyGroup> - <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''"> - <Base>true</Base> - <Cfg_2>true</Cfg_2> - <CfgParent>Base</CfgParent> - </PropertyGroup> - <PropertyGroup Condition="'$(Base)'!=''"> - <OutputExt>exe</OutputExt> - <BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed> - <Defines>NO_STRICT</Defines> - <DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput> - <DynamicRTL>true</DynamicRTL> - <ILINK_ObjectSearchPath>..\test</ILINK_ObjectSearchPath> - <UsePackages>true</UsePackages> - <ProjectType>CppConsoleApplication</ProjectType> - <NoVCL>true</NoVCL> - <BCC_CPPCompileAlways>true</BCC_CPPCompileAlways> - <PackageImports>rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi</PackageImports> - <BCC_wpar>false</BCC_wpar> - <IncludePath>$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test;..</IncludePath> - <ILINK_LibraryPath>$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test</ILINK_LibraryPath> - <Multithreaded>true</Multithreaded> - </PropertyGroup> - <PropertyGroup Condition="'$(Cfg_1)'!=''"> - <BCC_OptimizeForSpeed>false</BCC_OptimizeForSpeed> - <DCC_Optimize>false</DCC_Optimize> - <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe> - <Defines>_DEBUG;$(Defines)</Defines> - <ILINK_FullDebugInfo>true</ILINK_FullDebugInfo> - <BCC_InlineFunctionExpansion>false</BCC_InlineFunctionExpansion> - <ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking> - <BCC_UseRegisterVariables>None</BCC_UseRegisterVariables> - <DCC_Define>DEBUG</DCC_Define> - <BCC_DebugLineNumbers>true</BCC_DebugLineNumbers> - <IntermediateOutputDir>Debug</IntermediateOutputDir> - <TASM_DisplaySourceLines>true</TASM_DisplaySourceLines> - <BCC_StackFrames>true</BCC_StackFrames> - <BCC_DisableOptimizations>true</BCC_DisableOptimizations> - <ILINK_LibraryPath>$(BDS)\lib\debug;$(ILINK_LibraryPath)</ILINK_LibraryPath> - <TASM_Debugging>Full</TASM_Debugging> - <BCC_SourceDebuggingOn>true</BCC_SourceDebuggingOn> - </PropertyGroup> - <PropertyGroup Condition="'$(Cfg_2)'!=''"> - <Defines>NDEBUG;$(Defines)</Defines> - <IntermediateOutputDir>Release</IntermediateOutputDir> - <ILINK_LibraryPath>$(BDS)\lib\release;$(ILINK_LibraryPath)</ILINK_LibraryPath> - <TASM_Debugging>None</TASM_Debugging> - </PropertyGroup> - <ProjectExtensions> - <Borland.Personality>CPlusPlusBuilder.Personality</Borland.Personality> - <Borland.ProjectType>CppConsoleApplication</Borland.ProjectType> - <BorlandProject> -<BorlandProject><CPlusPlusBuilder.Personality><VersionInfo><VersionInfo Name="IncludeVerInfo">False</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1033</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Debugging><Debugging Name="DebugSourceDirs"></Debugging></Debugging><Parameters><Parameters Name="RunParams"></Parameters><Parameters Name="Launcher"></Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="DebugCWD"></Parameters><Parameters Name="HostApplication"></Parameters><Parameters Name="RemoteHost"></Parameters><Parameters Name="RemotePath"></Parameters><Parameters Name="RemoteParams"></Parameters><Parameters Name="RemoteLauncher"></Parameters><Parameters Name="UseRemoteLauncher">False</Parameters><Parameters Name="RemoteCWD"></Parameters><Parameters Name="RemoteDebug">False</Parameters><Parameters Name="Debug Symbols Search Path"></Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Excluded_Packages> - - - <Excluded_Packages Name="$(BDS)\bin\bcboffice2k100.bpl">CodeGear C++Builder Office 2000 Servers Package</Excluded_Packages> - <Excluded_Packages Name="$(BDS)\bin\bcbofficexp100.bpl">CodeGear C++Builder Office XP Servers Package</Excluded_Packages> - </Excluded_Packages><Linker><Linker Name="LibPrefix"></Linker><Linker Name="LibSuffix"></Linker><Linker Name="LibVersion"></Linker></Linker><ProjectProperties><ProjectProperties Name="AutoShowDeps">False</ProjectProperties><ProjectProperties Name="ManagePaths">True</ProjectProperties><ProjectProperties Name="VerifyPackages">True</ProjectProperties></ProjectProperties><HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Count">3</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item0">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item1">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item2">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include</HistoryLists_hlIncludePath></HistoryLists_hlIncludePath><HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Count">1</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item0">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item1">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item2">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;$(OUTPUTDIR);..\test</HistoryLists_hlILINK_LibraryPath></HistoryLists_hlILINK_LibraryPath><HistoryLists_hlDefines><HistoryLists_hlDefines Name="Count">2</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item0">NO_STRICT</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item1">STRICT</HistoryLists_hlDefines></HistoryLists_hlDefines></CPlusPlusBuilder.Personality></BorlandProject></BorlandProject> - </ProjectExtensions> - <Import Project="$(MSBuildBinPath)\Borland.Cpp.Targets" /> - <ItemGroup> - <CppCompile Include="..\test\gtest_unittest.cc"> - <BuildOrder>0</BuildOrder> - </CppCompile> - <CppCompile Include="gtest_link.cc"> - <BuildOrder>1</BuildOrder> - </CppCompile> - <BuildConfiguration Include="Debug"> - <Key>Cfg_1</Key> - </BuildConfiguration> - <BuildConfiguration Include="Release"> - <Key>Cfg_2</Key> - </BuildConfiguration> - </ItemGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <ProjectGuid>{eea63393-5ac5-4b9c-8909-d75fef2daa41}</ProjectGuid> + <Config Condition="'$(Config)'==''">Release</Config> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> + <Base>true</Base> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''"> + <Base>true</Base> + <Cfg_1>true</Cfg_1> + <CfgParent>Base</CfgParent> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''"> + <Base>true</Base> + <Cfg_2>true</Cfg_2> + <CfgParent>Base</CfgParent> + </PropertyGroup> + <PropertyGroup Condition="'$(Base)'!=''"> + <OutputExt>exe</OutputExt> + <BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed> + <Defines>NO_STRICT</Defines> + <DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput> + <DynamicRTL>true</DynamicRTL> + <ILINK_ObjectSearchPath>..\test</ILINK_ObjectSearchPath> + <UsePackages>true</UsePackages> + <ProjectType>CppConsoleApplication</ProjectType> + <NoVCL>true</NoVCL> + <BCC_CPPCompileAlways>true</BCC_CPPCompileAlways> + <PackageImports>rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi</PackageImports> + <BCC_wpar>false</BCC_wpar> + <IncludePath>$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test;..</IncludePath> + <ILINK_LibraryPath>$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test</ILINK_LibraryPath> + <Multithreaded>true</Multithreaded> + </PropertyGroup> + <PropertyGroup Condition="'$(Cfg_1)'!=''"> + <BCC_OptimizeForSpeed>false</BCC_OptimizeForSpeed> + <DCC_Optimize>false</DCC_Optimize> + <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe> + <Defines>_DEBUG;$(Defines)</Defines> + <ILINK_FullDebugInfo>true</ILINK_FullDebugInfo> + <BCC_InlineFunctionExpansion>false</BCC_InlineFunctionExpansion> + <ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking> + <BCC_UseRegisterVariables>None</BCC_UseRegisterVariables> + <DCC_Define>DEBUG</DCC_Define> + <BCC_DebugLineNumbers>true</BCC_DebugLineNumbers> + <IntermediateOutputDir>Debug</IntermediateOutputDir> + <TASM_DisplaySourceLines>true</TASM_DisplaySourceLines> + <BCC_StackFrames>true</BCC_StackFrames> + <BCC_DisableOptimizations>true</BCC_DisableOptimizations> + <ILINK_LibraryPath>$(BDS)\lib\debug;$(ILINK_LibraryPath)</ILINK_LibraryPath> + <TASM_Debugging>Full</TASM_Debugging> + <BCC_SourceDebuggingOn>true</BCC_SourceDebuggingOn> + </PropertyGroup> + <PropertyGroup Condition="'$(Cfg_2)'!=''"> + <Defines>NDEBUG;$(Defines)</Defines> + <IntermediateOutputDir>Release</IntermediateOutputDir> + <ILINK_LibraryPath>$(BDS)\lib\release;$(ILINK_LibraryPath)</ILINK_LibraryPath> + <TASM_Debugging>None</TASM_Debugging> + </PropertyGroup> + <ProjectExtensions> + <Borland.Personality>CPlusPlusBuilder.Personality</Borland.Personality> + <Borland.ProjectType>CppConsoleApplication</Borland.ProjectType> + <BorlandProject> +<BorlandProject><CPlusPlusBuilder.Personality><VersionInfo><VersionInfo Name="IncludeVerInfo">False</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1033</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Debugging><Debugging Name="DebugSourceDirs"></Debugging></Debugging><Parameters><Parameters Name="RunParams"></Parameters><Parameters Name="Launcher"></Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="DebugCWD"></Parameters><Parameters Name="HostApplication"></Parameters><Parameters Name="RemoteHost"></Parameters><Parameters Name="RemotePath"></Parameters><Parameters Name="RemoteParams"></Parameters><Parameters Name="RemoteLauncher"></Parameters><Parameters Name="UseRemoteLauncher">False</Parameters><Parameters Name="RemoteCWD"></Parameters><Parameters Name="RemoteDebug">False</Parameters><Parameters Name="Debug Symbols Search Path"></Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Excluded_Packages> + + + <Excluded_Packages Name="$(BDS)\bin\bcboffice2k100.bpl">CodeGear C++Builder Office 2000 Servers Package</Excluded_Packages> + <Excluded_Packages Name="$(BDS)\bin\bcbofficexp100.bpl">CodeGear C++Builder Office XP Servers Package</Excluded_Packages> + </Excluded_Packages><Linker><Linker Name="LibPrefix"></Linker><Linker Name="LibSuffix"></Linker><Linker Name="LibVersion"></Linker></Linker><ProjectProperties><ProjectProperties Name="AutoShowDeps">False</ProjectProperties><ProjectProperties Name="ManagePaths">True</ProjectProperties><ProjectProperties Name="VerifyPackages">True</ProjectProperties></ProjectProperties><HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Count">3</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item0">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item1">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item2">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include</HistoryLists_hlIncludePath></HistoryLists_hlIncludePath><HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Count">1</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item0">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item1">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item2">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;$(OUTPUTDIR);..\test</HistoryLists_hlILINK_LibraryPath></HistoryLists_hlILINK_LibraryPath><HistoryLists_hlDefines><HistoryLists_hlDefines Name="Count">2</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item0">NO_STRICT</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item1">STRICT</HistoryLists_hlDefines></HistoryLists_hlDefines></CPlusPlusBuilder.Personality></BorlandProject></BorlandProject> + </ProjectExtensions> + <Import Project="$(MSBuildBinPath)\Borland.Cpp.Targets" /> + <ItemGroup> + <CppCompile Include="..\test\gtest_unittest.cc"> + <BuildOrder>0</BuildOrder> + </CppCompile> + <CppCompile Include="gtest_link.cc"> + <BuildOrder>1</BuildOrder> + </CppCompile> + <BuildConfiguration Include="Debug"> + <Key>Cfg_1</Key> + </BuildConfiguration> + <BuildConfiguration Include="Release"> + <Key>Cfg_2</Key> + </BuildConfiguration> + </ItemGroup> </Project> \ No newline at end of file diff --git a/src/3rdparty/webkit/Source/ThirdParty/gyp/gyp.bat b/src/3rdparty/webkit/Source/ThirdParty/gyp/gyp.bat index 91ebf1e..90fbc6d 100755 --- a/src/3rdparty/webkit/Source/ThirdParty/gyp/gyp.bat +++ b/src/3rdparty/webkit/Source/ThirdParty/gyp/gyp.bat @@ -1,5 +1,5 @@ -@rem Copyright (c) 2009 Google Inc. All rights reserved. -@rem Use of this source code is governed by a BSD-style license that can be -@rem found in the LICENSE file. - -@python "%~dp0/gyp" %* +@rem Copyright (c) 2009 Google Inc. All rights reserved. +@rem Use of this source code is governed by a BSD-style license that can be +@rem found in the LICENSE file. + +@python "%~dp0/gyp" %* diff --git a/src/3rdparty/webkit/Source/ThirdParty/gyp/samples/samples.bat b/src/3rdparty/webkit/Source/ThirdParty/gyp/samples/samples.bat index 5683255..778d9c9 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gyp/samples/samples.bat +++ b/src/3rdparty/webkit/Source/ThirdParty/gyp/samples/samples.bat @@ -1,5 +1,5 @@ -@rem Copyright (c) 2009 Google Inc. All rights reserved. -@rem Use of this source code is governed by a BSD-style license that can be -@rem found in the LICENSE file. - -@python %~dp0/samples %* +@rem Copyright (c) 2009 Google Inc. All rights reserved. +@rem Use of this source code is governed by a BSD-style license that can be +@rem found in the LICENSE file. + +@python %~dp0/samples %* diff --git a/src/3rdparty/webkit/Source/ThirdParty/gyp/test/actions/gyptest-errors.py b/src/3rdparty/webkit/Source/ThirdParty/gyp/test/actions/gyptest-errors.py index 4a2aa07..ca41487 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gyp/test/actions/gyptest-errors.py +++ b/src/3rdparty/webkit/Source/ThirdParty/gyp/test/actions/gyptest-errors.py @@ -1,24 +1,24 @@ -#!/usr/bin/env python +#!/usr/bin/env python # Copyright (c) 2009 Google Inc. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. - -""" -Verifies behavior for different action configuration errors: -exit status of 1, and the expected error message must be in stderr. -""" - -import TestGyp - -test = TestGyp.TestGyp() - - -test.run_gyp('action_missing_name.gyp', chdir='src', status=1, stderr=None) -expect = [ - "Anonymous action in target broken_actions2. An action must have an 'action_name' field.", -] -test.must_contain_all_lines(test.stderr(), expect) - - -test.pass_test() + +""" +Verifies behavior for different action configuration errors: +exit status of 1, and the expected error message must be in stderr. +""" + +import TestGyp + +test = TestGyp.TestGyp() + + +test.run_gyp('action_missing_name.gyp', chdir='src', status=1, stderr=None) +expect = [ + "Anonymous action in target broken_actions2. An action must have an 'action_name' field.", +] +test.must_contain_all_lines(test.stderr(), expect) + + +test.pass_test() diff --git a/src/3rdparty/webkit/Source/ThirdParty/gyp/test/actions/src/subdir1/program.c b/src/3rdparty/webkit/Source/ThirdParty/gyp/test/actions/src/subdir1/program.c index f155939..d5f661d 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gyp/test/actions/src/subdir1/program.c +++ b/src/3rdparty/webkit/Source/ThirdParty/gyp/test/actions/src/subdir1/program.c @@ -1,12 +1,12 @@ -#include <stdio.h> - -extern void prog1(void); -extern void prog2(void); - -int main(int argc, char *argv[]) -{ - printf("Hello from program.c\n"); - prog1(); - prog2(); - return 0; -} +#include <stdio.h> + +extern void prog1(void); +extern void prog2(void); + +int main(int argc, char *argv[]) +{ + printf("Hello from program.c\n"); + prog1(); + prog2(); + return 0; +} diff --git a/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/actions/subdir1/actions-out/README.txt b/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/actions/subdir1/actions-out/README.txt index 90ef886..1b052c9 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/actions/subdir1/actions-out/README.txt +++ b/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/actions/subdir1/actions-out/README.txt @@ -1,4 +1,4 @@ -A place-holder for this Xcode build output directory, so that the -test script can verify that .xcodeproj files are not created in -their normal location by making the src/ read-only, and then -selectively making this build directory writable. +A place-holder for this Xcode build output directory, so that the +test script can verify that .xcodeproj files are not created in +their normal location by making the src/ read-only, and then +selectively making this build directory writable. diff --git a/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/actions/subdir1/program.c b/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/actions/subdir1/program.c index f155939..d5f661d 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/actions/subdir1/program.c +++ b/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/actions/subdir1/program.c @@ -1,12 +1,12 @@ -#include <stdio.h> - -extern void prog1(void); -extern void prog2(void); - -int main(int argc, char *argv[]) -{ - printf("Hello from program.c\n"); - prog1(); - prog2(); - return 0; -} +#include <stdio.h> + +extern void prog1(void); +extern void prog2(void); + +int main(int argc, char *argv[]) +{ + printf("Hello from program.c\n"); + prog1(); + prog2(); + return 0; +} diff --git a/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/actions/subdir2/actions-out/README.txt b/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/actions/subdir2/actions-out/README.txt index 90ef886..1b052c9 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/actions/subdir2/actions-out/README.txt +++ b/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/actions/subdir2/actions-out/README.txt @@ -1,4 +1,4 @@ -A place-holder for this Xcode build output directory, so that the -test script can verify that .xcodeproj files are not created in -their normal location by making the src/ read-only, and then -selectively making this build directory writable. +A place-holder for this Xcode build output directory, so that the +test script can verify that .xcodeproj files are not created in +their normal location by making the src/ read-only, and then +selectively making this build directory writable. diff --git a/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/rules/subdir2/rules-out/README.txt b/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/rules/subdir2/rules-out/README.txt index 90ef886..1b052c9 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/rules/subdir2/rules-out/README.txt +++ b/src/3rdparty/webkit/Source/ThirdParty/gyp/test/generator-output/rules/subdir2/rules-out/README.txt @@ -1,4 +1,4 @@ -A place-holder for this Xcode build output directory, so that the -test script can verify that .xcodeproj files are not created in -their normal location by making the src/ read-only, and then -selectively making this build directory writable. +A place-holder for this Xcode build output directory, so that the +test script can verify that .xcodeproj files are not created in +their normal location by making the src/ read-only, and then +selectively making this build directory writable. diff --git a/src/3rdparty/webkit/Source/ThirdParty/gyp/tools/pretty_gyp.py b/src/3rdparty/webkit/Source/ThirdParty/gyp/tools/pretty_gyp.py index 128c2e3..04c7901 100644 --- a/src/3rdparty/webkit/Source/ThirdParty/gyp/tools/pretty_gyp.py +++ b/src/3rdparty/webkit/Source/ThirdParty/gyp/tools/pretty_gyp.py @@ -1,142 +1,142 @@ -#!/usr/bin/env python -# Copyright (c) 2009 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# This file pretty-prints the contents of a GYP file. - -import sys -import re - -input = [] -if len(sys.argv) > 1: - input_file = open(sys.argv[1]) - input = input_file.read().splitlines() - input_file.close() -else: - input = sys.stdin.read().splitlines() - -# This is used to remove comments when we're counting braces. -comment_re = re.compile(r'\s*#.*') - -# This is used to remove quoted strings when we're counting braces. -# It takes into account quoted quotes, and makes sure that the quotes -# match. -# NOTE: It does not handle quotes that span more than one line, or -# cases where an escaped quote is preceeded by an escaped backslash. -quote_re_str = r'(?P<q>[\'"])(.*?)(?<![^\\][\\])(?P=q)' -quote_re = re.compile(quote_re_str) - -def comment_replace(matchobj): - return matchobj.group(1) + matchobj.group(2) + '#' * len(matchobj.group(3)) - -def mask_comments(input): - # This is used to mask the quoted strings so we skip braces inside - # quoted strings. - search_re = re.compile(r'(.*?)(#)(.*)') - return [search_re.sub(comment_replace, line) for line in input] - -def quote_replace(matchobj): - return "%s%s%s%s" % (matchobj.group(1), - matchobj.group(2), - 'x'*len(matchobj.group(3)), - matchobj.group(2)) - -def mask_quotes(input): - # This is used to mask the quoted strings so we skip braces inside - # quoted strings. - search_re = re.compile(r'(.*?)' + quote_re_str) - return [search_re.sub(quote_replace, line) for line in input] - -def do_split(input, masked_input, search_re): - output = [] - mask_output = [] - for (line, masked_line) in zip(input, masked_input): - m = search_re.match(masked_line) - while m: - split = len(m.group(1)) - line = line[:split] + r'\n' + line[split:] - masked_line = masked_line[:split] + r'\n' + masked_line[split:] - m = search_re.match(masked_line) - output.extend(line.split(r'\n')) - mask_output.extend(masked_line.split(r'\n')) - return (output, mask_output) - -# This masks out the quotes and comments, and then splits appropriate -# lines (lines that matche the double_*_brace re's above) before -# indenting them below. -def split_double_braces(input): - # These are used to split lines which have multiple braces on them, so - # that the indentation looks prettier when all laid out (e.g. closing - # braces make a nice diagonal line). - double_open_brace_re = re.compile(r'(.*?[\[\{\(,])(\s*)([\[\{\(])') - double_close_brace_re = re.compile(r'(.*?[\]\}\)],?)(\s*)([\]\}\)])') - - masked_input = mask_quotes(input) - masked_input = mask_comments(masked_input) - - (output, mask_output) = do_split(input, masked_input, double_open_brace_re) - (output, mask_output) = do_split(output, mask_output, double_close_brace_re) - - return output - -# This keeps track of the number of braces on a given line and returns -# the result. It starts at zero and subtracts for closed braces, and -# adds for open braces. -def count_braces(line): - open_braces = ['[', '(', '{'] - close_braces = [']', ')', '}'] - closing_prefix_re = re.compile(r'(.*?[^\s\]\}\)]+.*?)([\]\}\)],?)\s*$') - cnt = 0 - stripline = comment_re.sub(r'', line) - stripline = quote_re.sub(r"''", stripline) - for char in stripline: - for brace in open_braces: - if char == brace: - cnt += 1 - for brace in close_braces: - if char == brace: - cnt -= 1 - - after = False - if cnt > 0: - after = True - - # This catches the special case of a closing brace having something - # other than just whitespace ahead of it -- we don't want to - # unindent that until after this line is printed so it stays with - # the previous indentation level. - if cnt < 0 and closing_prefix_re.match(stripline): - after = True - return (cnt, after) - -# This does the main work of indenting the input based on the brace counts. -def prettyprint_input(lines): - indent = 0 - basic_offset = 2 - last_line = "" - for line in lines: - if comment_re.match(line): - print line - else: - line = line.strip('\r\n\t ') # Otherwise doesn't strip \r on Unix. - if len(line) > 0: - (brace_diff, after) = count_braces(line) - if brace_diff != 0: - if after: - print " " * (basic_offset * indent) + line - indent += brace_diff - else: - indent += brace_diff - print " " * (basic_offset * indent) + line - else: - print " " * (basic_offset * indent) + line - else: - print "" - last_line = line - -# Split up the double braces. -lines = split_double_braces(input) - -# Indent and print the output. -prettyprint_input(lines) +#!/usr/bin/env python +# Copyright (c) 2009 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This file pretty-prints the contents of a GYP file. + +import sys +import re + +input = [] +if len(sys.argv) > 1: + input_file = open(sys.argv[1]) + input = input_file.read().splitlines() + input_file.close() +else: + input = sys.stdin.read().splitlines() + +# This is used to remove comments when we're counting braces. +comment_re = re.compile(r'\s*#.*') + +# This is used to remove quoted strings when we're counting braces. +# It takes into account quoted quotes, and makes sure that the quotes +# match. +# NOTE: It does not handle quotes that span more than one line, or +# cases where an escaped quote is preceeded by an escaped backslash. +quote_re_str = r'(?P<q>[\'"])(.*?)(?<![^\\][\\])(?P=q)' +quote_re = re.compile(quote_re_str) + +def comment_replace(matchobj): + return matchobj.group(1) + matchobj.group(2) + '#' * len(matchobj.group(3)) + +def mask_comments(input): + # This is used to mask the quoted strings so we skip braces inside + # quoted strings. + search_re = re.compile(r'(.*?)(#)(.*)') + return [search_re.sub(comment_replace, line) for line in input] + +def quote_replace(matchobj): + return "%s%s%s%s" % (matchobj.group(1), + matchobj.group(2), + 'x'*len(matchobj.group(3)), + matchobj.group(2)) + +def mask_quotes(input): + # This is used to mask the quoted strings so we skip braces inside + # quoted strings. + search_re = re.compile(r'(.*?)' + quote_re_str) + return [search_re.sub(quote_replace, line) for line in input] + +def do_split(input, masked_input, search_re): + output = [] + mask_output = [] + for (line, masked_line) in zip(input, masked_input): + m = search_re.match(masked_line) + while m: + split = len(m.group(1)) + line = line[:split] + r'\n' + line[split:] + masked_line = masked_line[:split] + r'\n' + masked_line[split:] + m = search_re.match(masked_line) + output.extend(line.split(r'\n')) + mask_output.extend(masked_line.split(r'\n')) + return (output, mask_output) + +# This masks out the quotes and comments, and then splits appropriate +# lines (lines that matche the double_*_brace re's above) before +# indenting them below. +def split_double_braces(input): + # These are used to split lines which have multiple braces on them, so + # that the indentation looks prettier when all laid out (e.g. closing + # braces make a nice diagonal line). + double_open_brace_re = re.compile(r'(.*?[\[\{\(,])(\s*)([\[\{\(])') + double_close_brace_re = re.compile(r'(.*?[\]\}\)],?)(\s*)([\]\}\)])') + + masked_input = mask_quotes(input) + masked_input = mask_comments(masked_input) + + (output, mask_output) = do_split(input, masked_input, double_open_brace_re) + (output, mask_output) = do_split(output, mask_output, double_close_brace_re) + + return output + +# This keeps track of the number of braces on a given line and returns +# the result. It starts at zero and subtracts for closed braces, and +# adds for open braces. +def count_braces(line): + open_braces = ['[', '(', '{'] + close_braces = [']', ')', '}'] + closing_prefix_re = re.compile(r'(.*?[^\s\]\}\)]+.*?)([\]\}\)],?)\s*$') + cnt = 0 + stripline = comment_re.sub(r'', line) + stripline = quote_re.sub(r"''", stripline) + for char in stripline: + for brace in open_braces: + if char == brace: + cnt += 1 + for brace in close_braces: + if char == brace: + cnt -= 1 + + after = False + if cnt > 0: + after = True + + # This catches the special case of a closing brace having something + # other than just whitespace ahead of it -- we don't want to + # unindent that until after this line is printed so it stays with + # the previous indentation level. + if cnt < 0 and closing_prefix_re.match(stripline): + after = True + return (cnt, after) + +# This does the main work of indenting the input based on the brace counts. +def prettyprint_input(lines): + indent = 0 + basic_offset = 2 + last_line = "" + for line in lines: + if comment_re.match(line): + print line + else: + line = line.strip('\r\n\t ') # Otherwise doesn't strip \r on Unix. + if len(line) > 0: + (brace_diff, after) = count_braces(line) + if brace_diff != 0: + if after: + print " " * (basic_offset * indent) + line + indent += brace_diff + else: + indent += brace_diff + print " " * (basic_offset * indent) + line + else: + print " " * (basic_offset * indent) + line + else: + print "" + last_line = line + +# Split up the double braces. +lines = split_double_braces(input) + +# Indent and print the output. +prettyprint_input(lines) diff --git a/src/3rdparty/webkit/Source/WebCore/ChangeLog b/src/3rdparty/webkit/Source/WebCore/ChangeLog index f112cba..2e34c2e 100644 --- a/src/3rdparty/webkit/Source/WebCore/ChangeLog +++ b/src/3rdparty/webkit/Source/WebCore/ChangeLog @@ -1,3 +1,738 @@ +2011-08-06 Aron Rosenberg <arosenberg@logitech.com> + + Reviewed by Benjamin Poulain. + + [Qt] Fix build with Intel compiler on Windows + https://bugs.webkit.org/show_bug.cgi?id=65088 + + Intel compiler needs .lib suffixes instead of .a + + * WebCore.pri: + +2011-08-03 Kent Tamura <tkent@chromium.org> + + Fix incorrect checks for HTMLMediaElement + https://bugs.webkit.org/show_bug.cgi?id=65590 + + Reviewed by Dimitri Glazkov. + + <video> and <audio> can be an HTMLElement instance instead of + HTMLMediaElement if MediaPlayer::isAvailable() returns false or + the media feature is disabled at runtime. + + * html/HTMLSourceElement.cpp: + (WebCore::HTMLSourceElement::insertedIntoTree): + (WebCore::HTMLSourceElement::willRemove): + * html/HTMLTrackElement.cpp: + (WebCore::HTMLTrackElement::insertedIntoTree): + (WebCore::HTMLTrackElement::willRemove): + * html/shadow/MediaControlElements.cpp: + (WebCore::toParentMediaElement): + * page/FrameView.cpp: + (WebCore::FrameView::updateWidget): + * platform/efl/RenderThemeEfl.cpp: + (WebCore::RenderThemeEfl::paintMediaMuteButton): + * platform/gtk/RenderThemeGtk.cpp: + (WebCore::getMediaElementFromRenderObject): + * rendering/RenderThemeMac.mm: + (WebCore::RenderThemeMac::paintMediaSliderTrack): + * rendering/RenderThemeWinCE.cpp: + (WebCore::mediaElementParent): + +2011-07-28 Abhishek Arya <inferno@chromium.org> + + Regression(82144): Crash in TrailingObjects::updateMidpointsForTrailingBoxes + https://bugs.webkit.org/show_bug.cgi?id=65137 + + Fix the looping condition to prevent trailingSpaceMidpoint from becoming negative. + + Reviewed by Dave Hyatt. + + Test: fast/block/update-midpoints-for-trailing-boxes-crash.html + + * rendering/RenderBlockLineLayout.cpp: + (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes): + +2011-08-01 Jochen Eisinger <jochen@chromium.org> + + Never override the policy URL on form submissions. + https://bugs.webkit.org/show_bug.cgi?id=61809 + + Reviewed by Adam Barth. + + Tests: http/tests/security/cookies/third-party-cookie-blocking-main-frame.html + http/tests/security/cookies/third-party-cookie-blocking-user-action.html + http/tests/security/cookies/third-party-cookie-blocking.html + + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::loadURL): + (WebCore::FrameLoader::addExtraFieldsToSubresourceRequest): + (WebCore::FrameLoader::addExtraFieldsToMainResourceRequest): + (WebCore::FrameLoader::addExtraFieldsToRequest): + (WebCore::FrameLoader::loadPostRequest): + (WebCore::FrameLoader::loadDifferentDocumentItem): + * loader/FrameLoader.h: + + +2011-07-27 Alexis Menard <alexis.menard@openbossa.org> + + [Qt] Unreviewed build fix for mac. + + QtKit is now our default media player, the define is WTF_USE_QTKIT and it's not part + of the options passed to build-webkit, therefore DerivedSources should now generate the + includes when it's mac. + + * DerivedSources.pro: + * WebCore.pro: + +2011-07-07 Julien Chaffraix <jchaffraix@webkit.org> + + Reviewed by David Hyatt. + + Partial layout when a flex-box has visibility: collapse + https://bugs.webkit.org/show_bug.cgi?id=63776 + + Tests: fast/flexbox/crash-button-input-autofocus.html + fast/flexbox/crash-button-keygen.html + fast/flexbox/crash-button-relayout.html + + The issue is that FlexBoxIterator would skip any child if it has visibility: collapsed. + However if one of the child is anonymous, it may wrap some other child that would be skipped. + Now FlexBoxIterator is called during the layout phase and thus some nodes would not relayouted + as expected. + + * rendering/RenderDeprecatedFlexibleBox.cpp: + (WebCore::FlexBoxIterator::next): When iterating, don't skip anonymous content as there may + be real content hiding below. + +2011-06-30 Julien Chaffraix <jchaffraix@webkit.org> + + Reviewed by Nikolas Zimmermann. + + Update SVG position values on SVG DOM updates + https://bugs.webkit.org/show_bug.cgi?id=62439 + + Test: svg/custom/crash-textPath-attributes.html + + * rendering/svg/RenderSVGInline.cpp: + (WebCore::RenderSVGInline::destroy): Notify our containing RenderSVGText that it needs + to update its positioning information. + + * rendering/svg/SVGInlineFlowBox.cpp: + (WebCore::SVGInlineFlowBox::calculateBoundaries): Check the type of the InlineBox + like the rest of the code (fixes an ASSERT_NOT_REACHED in InlineBox::calculateBoudaries). + + * rendering/svg/SVGTextLayoutAttributesBuilder.cpp: + (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextSubtree): Clear + our cached layout attributes every time we invalidate them. This avoids keeping stale + attribute that have a backpointer to a RenderObject. + +2011-07-13 John Knottenbelt <jknotten@chromium.org> + + Reference Geolocation object from GeoNotifier and Geolocation::setIsAllowed. + https://bugs.webkit.org/show_bug.cgi?id=64363 + + Reviewed by Tony Gentilcore. + + Test: fast/dom/Geolocation/remove-remote-context-in-error-callback-crash.html + + * page/Geolocation.cpp: + (WebCore::Geolocation::setIsAllowed): + * page/Geolocation.h: + +2011-06-26 Adam Barth <abarth@webkit.org> + + Reviewed by Kent Tamura. + + m_formElementsWithFormAttribute doesn't ref the objects it holds + https://bugs.webkit.org/show_bug.cgi?id=62956 + + Test: fast/forms/form-associated-element-crash3.html + + * dom/Document.h: + +2011-05-26 David Levin <levin@chromium.org> + + Reviewed by Dmitry Titov. + + WebKit's font notification has problems when the WebKit main thread != UI thread. + https://bugs.webkit.org/show_bug.cgi?id=61391 + + This doesn't happen in DumpRenderTree, so it needs a unit test which is taking me + some time to write correctly. In the meantime, this issues happens to be causing + some crashes in Chrome so here's the fix alone for the time being. + + * platform/graphics/mac/FontCacheMac.mm: + (WebCore::invalidateFontCache): Ensure that FontCache::invalidate is only called on WebKit's main thread. + (WebCore::fontCacheRegisteredFontsChangedNotificationCallback): Call common function for font cache invalidation. + Note that the call to fontCache() is fine since the singleton is initialized well before calling this function. Theoretically, + there could be a problem due to a lack of a memory barrier but that is highly unlikely and this is debug only code. + (WebCore::fontCacheATSNotificationCallback): Ditto. + +2011-07-07 Gavin Peters <gavinp@chromium.org> + + Reviewed by Alexey Proskuryakov. + + fast/dom/HTMLLinkElement/link-and-subresource-test.html is flaky on chromium debug bots + https://bugs.webkit.org/show_bug.cgi?id=60097 + + The culprit was that CachedResource:stopLoading() was using *this + after a call to checkNotify(), which isn't kosher. This patch + uses a CachedResourceHandle to keep the CachedResource alive. + + The test is a very close copy of the eponymous + link-and-subresource-test.html, only substituting invalid + resources for the valid ones in that test. The reproduction is + timing related, and happens much more consistantly with an invalid + resource for whatever reason. + Test: fast/dom/HTMLLinkElement/link-and-subresource-test-nonexistent.html + + * loader/cache/CachedResource.cpp: + (WebCore::CachedResource::stopLoading): + +2011-06-08 Mikołaj Małecki <m.malecki@samsung.com> + + Reviewed by Pavel Feldman. + + Web Inspector: Crash by buffer overrun crash when serializing inspector object tree. + https://bugs.webkit.org/show_bug.cgi?id=52791 + + No new tests. The problem can be reproduced by trying to create InspectorValue + from 1.0e-100 and call ->toJSONString() on this. + + * inspector/InspectorValues.cpp: + (WebCore::InspectorBasicValue::writeJSON): + Added checking the predicted buffer size and choosing exponential format, or + eventually "NaN" if the buffer is too small for decimal format. + +2011-07-26 Alexis Menard <alexis.menard@openbossa.org> + + [Qt] Disable video support on linux if the dependencies are not found. + + If we can't find the necessary dependencies to build the GStreamer media player + we disable the video support. This is related to http://trac.webkit.org/changeset/91752. + + Reviewed by Holger Freyther. + + No new tests, it's a build fix. + + * features.pri: + +2011-07-26 Alexis Menard <alexis.menard@openbossa.org> + + Reviewed by Andreas Kling. + + [Qt] Change default backend to use GStreamer on Linux and QuickTime on Mac. + https://bugs.webkit.org/show_bug.cgi?id=63472 + + Enable the GStreamer backend and the QuickTime backend as default media players + for the Qt port on Mac and Linux. QtMultimedia is now a fallback option that you + can enable by passing DEFINES+=USE_QT_MULTIMEDIA=1 to enforce its usage. + + No new tests. The media layout tests are disabled on the Qt port but hopefully with this + switch we can enable them again. + + * WebCore.pri: + * WebCore.pro: + * features.pri: + +2011-06-23 Alexis Menard <alexis.menard@openbossa.org> + + Reviewed by Eric Carlson. + + [Qt] Implement fullscreen support on Mac with the QuickTime backend. + https://bugs.webkit.org/show_bug.cgi?id=61728 + + Implement fullscreen support for Qt when using the QuickTime backend. + We mostly use what is already done for the Mac port. + + * DerivedSources.pro: We use the mac files and they have <WebCore/x> type + of includes. We need to generate those headers. + * WebCore.pro: + * platform/mac/WebVideoFullscreenController.h: + * platform/mac/WebVideoFullscreenController.mm: + * platform/mac/WebVideoFullscreenHUDWindowController.h: + * platform/mac/WebVideoFullscreenHUDWindowController.mm: + * platform/qt/WebCoreSystemInterface.h: + * platform/qt/WebCoreSystemInterface.mm: + +2011-06-21 Alexey Proskuryakov <ap@apple.com> + + Fix Mac build in some configurations. + + * platform/mac/WebCoreSystemInterface.h: Added an enum matching WKSI one, since we cannot use + WKSI in WebCore. + + * platform/mac/WebVideoFullscreenHUDWindowController.mm: Removed an include of WebKitSystemInterface.h. + It's not meant to be used from WebCore, and if included, a wrong copy may be used. + (createControlWithMediaUIControlType): Added a FIXME about problems with Leopard build. + (-[WebVideoFullscreenHUDWindowController windowDidLoad]): Ditto. Switched enum values to + WCSI style (lower level "wk"). + +2011-06-20 Jer Noble <jer.noble@apple.com> + + Unreviewed build fix; Fix Leopard WebCore build. + + * platform/mac/WebVideoFullscreenHUDWindowController.mm: On Leopard, NSWindowDelegate + is a category, not a protocol. + +2011-06-20 Jer Noble <jer.noble@apple.com> + + Unreviewed build fix; Fix 32-bit build. + + Code recently moved from WebKit -> WebCore does not pass WebCore's more strict compiler warnings. Use + CGFloat, and float constants wherever possible, and use narrowPrecisionToFloat() where not. + + * WebCore.xcodeproj/project.pbxproj: Add '-Wno-undef' flag for WebVideoFullScreenController.mm + * platform/mac/WebVideoFullscreenController.mm: + (constrainFrameToRatioOfFrame): Use CGFloat instead of Double. + (-[WebVideoFullscreenWindow animateFromRect:toRect:withSubAnimation:controllerAction:]): Use float constant. + * platform/mac/WebVideoFullscreenHUDWindowController.mm: + (-[WebVideoFullscreenHUDWindowController updateVolume]): Use float for volume. + (-[WebVideoFullscreenHUDWindowController maxVolume]): Ditto. + (-[WebVideoFullscreenHUDWindowController volumeChanged:]): Ditto. + (-[WebVideoFullscreenHUDWindowController decrementVolume]): Ditto. + (-[WebVideoFullscreenHUDWindowController incrementVolume]): Ditto. + (-[WebVideoFullscreenHUDWindowController volume]): Ditto. + (-[WebVideoFullscreenHUDWindowController setVolume:]): Ditto. + (timeToString): Narrow precision to float when converting to seconds. + * platform/mac/WebWindowAnimation.mm: + (scaledRect): Use CGFloat. + (-[WebWindowScaleAnimation init]): Use float constant. + (-[WebWindowScaleAnimation currentValue]): Ditto. + (-[WebWindowScaleAnimation additionalDurationNeededToReachFinalFrame]): Ditto. + (-[WebWindowFadeAnimation currentAlpha]): Ditto. + +2011-06-01 Jer Noble <jer.noble@apple.com> + + Reviewed by Eric Carlson. + + Move Full Screen Controllers into WebCore. + + Remove dependency on QTKit from wekitExitFullscreen() + https://bugs.webkit.org/show_bug.cgi?id=61843 + + No new tests; the existing media full screen tests are sufficient. + + * WebCore.exp.in: Add new exports. + * WebCore.xcodeproj/project.pbxproj: Add references to moved files. + * platform/mac/WebCoreSystemInterface.h: Add new WCSI interfaces to WKSI functions. + * platform/mac/WebCoreSystemInterface.mm: + * platform/mac/WebVideoFullscreenController.h: Renamed from Source/WebKit/mac/WebView/WebVideoFullscreenController.h. + * platform/mac/WebVideoFullscreenController.mm: Renamed from Source/WebKit/mac/WebView/WebVideoFullscreenController.mm. + + The following functions have had UNUSED_PARAM added: + (-[WebVideoFullscreenController applicationDidResignActive:]): + (-[WebVideoFullscreenController applicationDidChangeScreenParameters:]): + (-[WebVideoFullscreenWindow mouseMoved:]): + +Source/WebKit/mac/WebView/WebVideoFullscreenHUDWindowController.h. + * platform/mac/WebVideoFullscreenHUDWindowController.mm: Renamed from Source/WebKit/mac/WebView/WebVideoFullscreenHUDWindowController.mm. + + The following functions have had UNUSED_PARAM added: + (-[WebVideoFullscreenHUDWindow cancelOperation:]): + (-[WebVideoFullscreenHUDWindowController timelinePositionChanged:]): + (-[WebVideoFullscreenHUDWindowController setVolumeToZero:]): + (-[WebVideoFullscreenHUDWindowController setVolumeToMaximum:]): + (-[WebVideoFullscreenHUDWindowController togglePlaying:]): + (-[WebVideoFullscreenHUDWindowController mouseEntered:]): + (-[WebVideoFullscreenHUDWindowController mouseExited:]): + (-[WebVideoFullscreenHUDWindowController rewind:]): + (-[WebVideoFullscreenHUDWindowController fastForward:]): + (-[WebVideoFullscreenHUDWindowController windowDidExpose:]): + (-[WebVideoFullscreenHUDWindowController windowDidClose:]): + + The following functions have had WKSI calls converted to WCSI ones: + (createControlWithMediaUIControlType): + (createTimeTextField): + + * platform/mac/WebWindowAnimation.h: Renamed from Source/WebKit/mac/WebView/WebWindowAnimation.h. + * platform/mac/WebWindowAnimation.mm: Renamed from Source/WebKit/mac/WebView/WebWindowAnimation.m. + (WebWindowAnimationDurationFromDuration): + + The following functions have had WKSI calls converted to WCSI ones: + (-[WebWindowScaleAnimation setCurrentProgress:]): + (-[WebWindowFadeAnimation initWithDuration:window:initialAlpha:finalAlpha:]): + +2011-07-27 Ryosuke Niwa <rniwa@webkit.org> + + Calling window.find immediately after mutating the document crashes WebKit. + https://bugs.webkit.org/show_bug.cgi?id=65296 + + Reviewed by Darin Adler. + + Don't forget to layout first. + + Test: editing/text-iterator/find-after-mutation.html + + * editing/TextIterator.cpp: + (WebCore::findPlainText): + +2011-07-27 MORITA Hajime <morrita@google.com> + + Inconsistent state of TreeScope reference. + https://bugs.webkit.org/show_bug.cgi?id=65235 + + The tree scope pointers on shadow tree nodes didn't cleared. + even when the tree scope (shadow root) is destroyed. + This change clear these poitners before detaching the shadow root. + + Reviewed by Dimitri Glazkov. + + Test: fast/dom/shadow/tree-scope-crash.html + + * dom/Element.cpp: + (WebCore::Element::removeShadowRoot): + +2011-05-22 Dominic Cooney <dominicc@chromium.org> + + Reviewed by Dimitri Glazkov. + + When removing a shadow root, also remove it from the render tree. + https://bugs.webkit.org/show_bug.cgi?id=61245 + + Test: existing fast/dom/shadow/layout-tests-can-access-shadow.html + + * dom/Element.cpp: + (WebCore::Element::removeShadowRoot): Call detach if attached. + +2011-07-22 Sergey Glazunov <serg.glazunov@gmail.com> + + Perform the JavaScript navigation check on a complete URL + https://bugs.webkit.org/show_bug.cgi?id=65038 + + Reviewed by Adam Barth. + + Test: http/tests/security/xss-DENIED-document-baseURI-javascript.html + + * page/DOMWindow.cpp: + (WebCore::DOMWindow::setLocation): + (WebCore::DOMWindow::createWindow): + (WebCore::DOMWindow::open): + +2011-07-22 David Grogan <dgrogan@chromium.org> + + Fix crash in IDBRequest::abort + https://bugs.webkit.org/show_bug.cgi?id=64740 + + Reviewed by Nate Chapin. + + Tested manually with the testcase in the bug. + + * storage/IDBRequest.cpp: + (WebCore::IDBRequest::~IDBRequest): + (WebCore::IDBRequest::abort): + +2011-07-25 Daniel Bates <dbates@rim.com> + + REGRESSION (r85964): Improper relayout of some nested positioned elements + https://bugs.webkit.org/show_bug.cgi?id=64286 + + Reviewed by David Hyatt. + + Fixes an issue when traversing up the containing block hierarchy after skipping + relatively positioned inlines. + + When processing a positioned element we skip any intermediate inlines to get to + to enclosing block B, but don't use the containing block for B (call this P_B) to + properly continue traversing up the containing block hierarchy. So, B may be + considered again instead of looking at P_B. Hence, we don't set the correct dirty + bits for P_B and may not schedule a relayout with respect to the correct layout node. + + Test: fast/block/positioning/relayout-nested-positioned-elements-crash.html + + * rendering/RenderObject.h: + (WebCore::RenderObject::markContainingBlocksForLayout): + +2011-07-26 David Hyatt <hyatt@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=60778 + + Use after free because of line box culling optimization regression. + + In the case of a child with no line box being removed (typically + a <br> in quirks mode), if there is no previous sibling with a line + box, then we have a potential problem with the culling optimization. + + The culled inline may still have other leaf line box children, but + they may follow the removed <br>. In this case we can't rely on + them, since we need a line box that comes before the <br>. + + The fix is to simply recur up to the parent if we are a culled inline + and could not find a previous line box. + + Reviewed by Dan Bernstein. + + Added editing/execCommand/crash-line-break-after-outdent.html + + * rendering/RenderLineBoxList.cpp: + (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild): + +2011-07-19 Abhishek Arya <inferno@chromium.org> + + Crash when removing unrenderered nodes in replacement fragment. + https://bugs.webkit.org/show_bug.cgi?id=64801 + + Reviewed by Ryosuke Niwa. + + Test: editing/pasteboard/replacement-fragment-remove-unrendered-node-crash.html + + * editing/ReplaceSelectionCommand.cpp: + (WebCore::ReplacementFragment::removeUnrenderedNodes): + +2011-07-21 Gavin Peters <gavinp@chromium.org> + + Extend the protector of a CSS style sheet. Because checkLoaded() can recursively delete + parent style elements, the protector should be extended to include the parent call. + + https://bugs.webkit.org/show_bug.cgi?id=64736 + + Reviewed by Simon Fraser. + + Test: fast/css/css-imports-2.html + + * css/CSSStyleSheet.cpp: + (WebCore::CSSStyleSheet::checkLoaded): + +2011-07-20 Tony Chang <tony@chromium.org> + + Stale pointer due to floats not removed (flexible box display) + https://bugs.webkit.org/show_bug.cgi?id=64603 + + Reviewed by David Hyatt. + + Flexbox items should avoid floats. + + Test: fast/flexbox/horizontal-box-float-crash.html + + * rendering/RenderBox.cpp: + (WebCore::RenderBox::avoidsFloats): + * rendering/RenderBox.h: + (WebCore::RenderBox::isDeprecatedFlexItem): + +2011-07-12 Hui Huang <Hui.2.Huang@nokia.com> + + Reviewed by Laszlo Gombos. + + [Qt] Fix compiling errors with QtWebkit 2.2 WINSCW build. + https://bugs.webkit.org/show_bug.cgi?id=64391 + + (QtWebKit-2.2 only, patch not in webkit trunk) + + * bindings/generic/ActiveDOMCallback.cpp: + * css/CSSStyleSelector.h: + * page/PrintContext.cpp: + * page/PrintContext.h: + * platform/network/HTTPHeaderMap.cpp: + * xml/XPathFunctions.cpp: + * xml/XPathPredicate.cpp: + * xml/XPathResult.cpp: + +2011-07-16 Sergey Glazunov <serg.glazunov@gmail.com> + + DOMWindow::open performs a security check on a wrong window + https://bugs.webkit.org/show_bug.cgi?id=64651 + + Reviewed by Adam Barth. + + Test: http/tests/security/xss-DENIED-window-open-parent.html + + * page/DOMWindow.cpp: + (WebCore::DOMWindow::open): + +2011-07-14 Adam Barth <abarth@webkit.org> + + The beforeload event allows tracking URI changes in a frame + https://bugs.webkit.org/show_bug.cgi?id=64482 + + Reviewed by Nate Chapin. + + Tests: http/tests/security/beforeload-iframe-client-redirect.html + http/tests/security/beforeload-iframe-server-redirect.html + + Only dispatch the beforeload event for a frame if we haven't yet + committed our first real load. The URL that we send to our parent will + be the same URL the parent seens in the src attribute. + + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::loadWithDocumentLoader): + +2011-07-14 Tim Horton <timothy_horton@apple.com> + + Clear SVGElementInstance's children immediately upon detachment + https://bugs.webkit.org/show_bug.cgi?id=63739 + <rdar://problem/9705708> + + Reviewed by Nikolas Zimmermann. + + In addition to clearing the instance's children in the destructor, + clear them when the instance is detached from its <use>. This way, + we won't attempt to use them after we're detached but before the + destructor has been called. + + Test: svg/custom/use-crash-using-children-before-destroy.svg + + * svg/SVGElementInstance.cpp: + (WebCore::SVGElementInstance::~SVGElementInstance): + (WebCore::SVGElementInstance::clearChildren): + * svg/SVGElementInstance.h: + * svg/SVGUseElement.cpp: + (WebCore::SVGUseElement::detachInstance): + +2011-06-20 Andras Becsi <abecsi@webkit.org> + + Reviewed by Csaba Osztrogonác. + + make-hash-tools.pl: Perl 5.14 compatibility + https://bugs.webkit.org/show_bug.cgi?id=61890 + + No new tests needed. + + * make-hash-tools.pl: Use if/elsif instead of switch/case. + +2011-07-13 Abhishek Arya <inferno@chromium.org> + + Reviewed by Adam Barth. + + Issue with Frame lifetime due to deletion in beforeload event. + https://bugs.webkit.org/show_bug.cgi?id=64457 + + Copy the Frame protector higher in the stack from loadWithDocumentLoader + to loadFrameRequest since any of loadPostRequest or loadURL can call + loadWithDocumentLoader, thereby dispatching the beforeload event and + blowing away the frame. This deleted frame will be later accessed in + the loadFrameRequest function causing a crash. + + Test: fast/events/form-iframe-target-before-load-crash2.html + + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::loadFrameRequest): + (WebCore::FrameLoader::loadWithDocumentLoader): + +2011-06-03 Yael Aharon <yael.aharon@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + Frame flattening is broken with nested frames + https://bugs.webkit.org/show_bug.cgi?id=61491 + + Do not flatten offscreen iframes during frame flattening, as flattening might make them visible. + + Test: fast/frames/flattening/iframe-flattening-out-of-view.html + fast/frames/flattening/iframe-flattening-out-of-view-and-scroll.html + fast/frames/flattening/iframe-flattening-out-of-view-scroll-and-relayout.html + + * rendering/RenderIFrame.cpp: + (WebCore::RenderIFrame::flattenFrame): + +2011-06-23 Robert Hogan <robert@webkit.org> + + Reviewed by Simon Hausmann. + + [Qt] Windowless Plugins : <input> cursor blinks even after transferring focus to plugin + https://bugs.webkit.org/show_bug.cgi?id=30355 + + Test: plugins/mouse-click-plugin-clears-selection.html + + PluginView needs to use page->focusController()->setFocusedNode() when focusing a plugin + in order to clear the FrameSelection in the currently focused node. In its platform-specific + code Chromium already does this (WebPluginContainerImpl.cpp). + + * WebCore.exp.in: Add symbol for FocusController::setFocusedNode + * plugins/PluginView.cpp: + (WebCore::PluginView::focusPluginElement): Using FocusController::setFocusedNode() makes + the call to FocusController:setFocusedFrame() and Document::setFocusedNode() + redundant, since it calls both. + +2011-06-30 Julien Chaffraix <jchaffraix@webkit.org> + + Reviewed by Nikolas Zimmermann. + + Assertion failure in RenderSVGInlineText::characterStartsNewTextChunk + https://bugs.webkit.org/show_bug.cgi?id=63076 + + Tests: svg/custom/crash-text-in-textpath.svg + svg/custom/text-node-in-text-invalidated.svg + + The problem was that we did not call setNeedsPositionUpdate on RenderSVGText. When + doing our layout, we would not update the attributes on our SVGRenderInlineText as + we would not lay it out. + + This was caused by childrenChanged being overridden on SVGTextPositioningElement but + not on SVGTextPathElement. + + As both classes shared the same mother class, it made sense to move the logic here. + There should be no other side effects as SVGTextPathElement and SVGTextPositioningElement + are the only classes deriving from SVGTextContentElement. + + * svg/SVGTextContentElement.cpp: + (WebCore::SVGTextContentElement::childrenChanged): Moved this method from SVGTextPositioningElement. + * svg/SVGTextContentElement.h: + * svg/SVGTextPositioningElement.cpp: + (WebCore::SVGTextPositioningElement::svgAttributeChanged): Updated after updatePositioningValuesInRenderer + removal, replaced by RenderSVGText::locateRenderSVGTextAncestor. + * svg/SVGTextPositioningElement.h: + +2011-06-30 Abhishek Arya <inferno@chromium.org> + + Reviewed by Ryosuke Niwa. + + Crash when calling DOMSubtreeModified event when extracting range + contents. + https://bugs.webkit.org/show_bug.cgi?id=63650 + + Convert a few nodes to RefPtrs and add commonRoot verification checks + for Range::processContents. + + Tests: fast/dom/Range/range-extract-contents-event-fire-crash.html + fast/dom/Range/range-extract-contents-event-fire-crash2.html + + * dom/Range.cpp: + (WebCore::childOfCommonRootBeforeOffset): + (WebCore::Range::processContents): + (WebCore::Range::processContentsBetweenOffsets): + (WebCore::Range::processAncestorsAndTheirSiblings): + +2011-06-23 Abhishek Arya <inferno@chromium.org> + + Reviewed by James Robinson. + + In RenderBlock, RenderWidget and RenderReplaced destroy functions, + call dirtyLinesFromChangedChild to tell our parent that we are going away. + https://bugs.webkit.org/show_bug.cgi?id=60307 + + Test: fast/block/child-not-removed-from-parent-lineboxes-crash.html + fast/block/block-not-removed-from-parent-lineboxes-crash.html + + * rendering/RenderBlock.cpp: + (WebCore::RenderBlock::destroy): + * rendering/RenderReplaced.cpp: + (WebCore::RenderReplaced::destroy): + * rendering/RenderReplaced.h: + * rendering/RenderWidget.cpp: + (WebCore::RenderWidget::destroy): + +2011-05-05 David Hyatt <hyatt@apple.com> + + Reviewed by Darin Adler. + + <rdar://problem/9354979> REGRESSION (r83070-r83126): Conversation takes 10 seconds to load and makes mail unresponsive + + Culled inlines were triggering some pathological line box tree groveling that isn't even necessary. + Removed the ancient code (that used to be in RenderFlow), since it made no sense in the RenderBlock case + (it was running for inline blocks, which was definitely not even the intent) or in the RenderInline case + (the object being removed has no effect on any lines). + + Also tweaked culledInlineFirstLineBox and culledInlineLastLineBox to avoid bailing if the first replaced object that + is encountered has a null inlineBoxWrapper(). Just a slight speed optimization to avoid an extra null check. + + * rendering/RenderBlock.cpp: + (WebCore::RenderBlock::destroy): + * rendering/RenderInline.cpp: + (WebCore::RenderInline::destroy): + (WebCore::RenderInline::culledInlineFirstLineBox): + (WebCore::RenderInline::culledInlineLastLineBox): + 2011-06-28 Roland Steiner <rolandsteiner@chromium.org> Reviewed by Eric Seidel. @@ -242,17 +977,6 @@ * loader/DocumentLoader.cpp: (WebCore::DocumentLoader::detachFromFrame): Rollout the fix for bug 62764. -2011-06-24 Alexis Menard <alexis.menard@openbossa.org> - - Unreviewed build fix. - - Build fix on Linux when using the GStreamer backend. - - No new tests, just a build fix. - - * platform/graphics/gstreamer/PlatformVideoWindowQt.cpp: - (FullScreenVideoWindow::keyPressEvent): - 2011-06-23 Abhishek Arya <inferno@chromium.org> Reviewed by Adam Barth. diff --git a/src/3rdparty/webkit/Source/WebCore/WebCore.exp.in b/src/3rdparty/webkit/Source/WebCore/WebCore.exp.in index 83317a8..a183d66 100644 --- a/src/3rdparty/webkit/Source/WebCore/WebCore.exp.in +++ b/src/3rdparty/webkit/Source/WebCore/WebCore.exp.in @@ -389,6 +389,7 @@ __ZN7WebCore15DatabaseTracker8setQuotaEPNS_14SecurityOriginEy __ZN7WebCore15DatabaseTracker9setClientEPNS_21DatabaseTrackerClientE __ZN7WebCore15FocusController10setFocusedEb __ZN7WebCore15FocusController15setFocusedFrameEN3WTF10PassRefPtrINS_5FrameEEE +__ZN7WebCore15FocusController14setFocusedNodeEPNS_4NodeEN3WTF10PassRefPtrINS_5FrameEEE __ZN7WebCore15FocusController15setInitialFocusENS_14FocusDirectionEPNS_13KeyboardEventE __ZN7WebCore15FocusController9setActiveEb __ZN7WebCore15GraphicsContext12setFillColorERKNS_5ColorENS_10ColorSpaceE @@ -1325,6 +1326,8 @@ _wkCopyNSURLResponseStatusLine _wkCopyRequestWithStorageSession _wkCreateCTLineWithUniCharProvider _wkCreateCustomCFReadStream +_wkCreateMediaUIBackgroundView +_wkCreateMediaUIControl _wkCreateNSURLConnectionDelegateProxy _wkCreatePrivateStorageSession _wkCreateURLNPasteboardFlavorTypeName @@ -1394,6 +1397,8 @@ _wkSignalCFReadStreamEnd _wkSignalCFReadStreamError _wkSignalCFReadStreamHasBytes _wkSignedPublicKeyAndChallengeString +_wkWindowSetAlpha +_wkWindowSetScaledFrame #if ENABLE(DOM_STORAGE) __ZN7WebCore14StorageTracker17initializeTrackerERKN3WTF6StringE @@ -1800,6 +1805,9 @@ __ZNK7WebCore16HTMLMediaElement6volumeEv __ZNK7WebCore16HTMLMediaElement7canPlayEv __ZNK7WebCore16HTMLMediaElement12playbackRateEv __ZNK7WebCore16HTMLMediaElement8durationEv +__ZN7WebCore16HTMLMediaElement16returnToRealtimeEv +__ZNK7WebCore16HTMLMediaElement12isFullscreenEv +.objc_class_name_WebVideoFullscreenController #endif #if ENABLE(PLUGIN_PROXY_FOR_VIDEO) diff --git a/src/3rdparty/webkit/Source/WebCore/WebCore.pri b/src/3rdparty/webkit/Source/WebCore/WebCore.pri index 4ba1117..97644ed 100644 --- a/src/3rdparty/webkit/Source/WebCore/WebCore.pri +++ b/src/3rdparty/webkit/Source/WebCore/WebCore.pri @@ -242,26 +242,22 @@ contains(DEFINES, WTF_USE_QT_BEARER=1) { } contains(DEFINES, ENABLE_VIDEO=1) { - contains(DEFINES, USE_QTKIT=1) { - DEFINES += WTF_USE_QTKIT=1 - + contains(DEFINES, WTF_USE_QTKIT=1) { INCLUDEPATH += $$PWD/platform/graphics/mac LIBS += -framework AppKit -framework AudioUnit \ -framework AudioToolbox -framework CoreAudio \ -framework QuartzCore -framework QTKit - } else:contains(DEFINES, USE_GSTREAMER=1) { - DEFINES += WTF_USE_GSTREAMER=1 + } else:contains(DEFINES, WTF_USE_GSTREAMER=1) { DEFINES += ENABLE_GLIB_SUPPORT=1 INCLUDEPATH += $$PWD/platform/graphics/gstreamer PKGCONFIG += glib-2.0 gio-2.0 gstreamer-0.10 gstreamer-app-0.10 gstreamer-base-0.10 gstreamer-interfaces-0.10 gstreamer-pbutils-0.10 gstreamer-plugins-base-0.10 gstreamer-video-0.10 - } else:contains(MOBILITY_CONFIG, multimedia) { + } else:contains(DEFINES, WTF_USE_QT_MULTIMEDIA=1) { CONFIG *= mobility MOBILITY *= multimedia - DEFINES += WTF_USE_QT_MULTIMEDIA=1 } } @@ -343,7 +339,7 @@ use_qt_mobile_theme: DEFINES += WTF_USE_QT_MOBILE_THEME=1 defineTest(prependWebCoreLib) { pathToWebCoreOutput = $$ARGS/$$WEBCORE_DESTDIR - win32-msvc*|wince* { + win32-msvc*|wince*|win32-icc { LIBS = -l$$WEBCORE_TARGET $$LIBS LIBS = -L$$pathToWebCoreOutput $$LIBS POST_TARGETDEPS += $${pathToWebCoreOutput}$${QMAKE_DIR_SEP}$${WEBCORE_TARGET}.lib diff --git a/src/3rdparty/webkit/Source/WebCore/WebCore.pro b/src/3rdparty/webkit/Source/WebCore/WebCore.pro index 107ff35..141290d 100644 --- a/src/3rdparty/webkit/Source/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/Source/WebCore/WebCore.pro @@ -2934,31 +2934,43 @@ contains(DEFINES, ENABLE_VIDEO=1) { bindings/js/JSAudioConstructor.cpp } - contains(DEFINES, USE_QTKIT=1) { + contains(DEFINES, WTF_USE_QTKIT=1) { + INCLUDEPATH += \ + $$SOURCE_DIR/../WebKitLibraries/ + HEADERS += \ platform/graphics/mac/MediaPlayerPrivateQTKit.h \ platform/mac/WebCoreObjCExtras.h \ platform/qt/WebCoreSystemInterface.h \ platform/mac/BlockExceptions.h \ - platform/mac/WebCoreObjCExtras.h + platform/mac/WebCoreObjCExtras.h \ + platform/mac/WebVideoFullscreenController.h \ + platform/mac/WebVideoFullscreenHUDWindowController.h \ + platform/mac/WebWindowAnimation.h + SOURCES += \ + platform/graphics/cg/IntRectCG.cpp \ + platform/graphics/cg/FloatSizeCG.cpp \ + platform/cf/SharedBufferCF.cpp \ + platform/cf/KURLCFNet.cpp + + OBJECTIVE_SOURCES += \ + platform/qt/WebCoreSystemInterface.mm \ + platform/mac/BlockExceptions.mm \ + platform/mac/WebCoreObjCExtras.mm \ platform/graphics/mac/MediaPlayerPrivateQTKit.mm \ platform/mac/SharedBufferMac.mm \ platform/mac/KURLMac.mm \ platform/text/mac/StringMac.mm \ platform/graphics/mac/FloatSizeMac.mm \ platform/graphics/mac/IntRectMac.mm \ - platform/graphics/cg/IntRectCG.cpp \ - platform/graphics/cg/FloatSizeCG.cpp \ - platform/cf/SharedBufferCF.cpp \ - platform/cf/KURLCFNet.cpp \ - platform/qt/WebCoreSystemInterface.mm \ - platform/mac/BlockExceptions.mm \ - platform/mac/WebCoreObjCExtras.mm + platform/mac/WebVideoFullscreenController.mm \ + platform/mac/WebVideoFullscreenHUDWindowController.mm \ + platform/mac/WebWindowAnimation.mm DEFINES+=NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES - } else: contains(DEFINES, USE_GSTREAMER=1) { + } else: contains(DEFINES, WTF_USE_GSTREAMER=1) { HEADERS += \ platform/graphics/gstreamer/GOwnPtrGStreamer.h \ platform/graphics/gstreamer/GRefPtrGStreamer.h \ @@ -2979,7 +2991,7 @@ contains(DEFINES, ENABLE_VIDEO=1) { platform/graphics/gstreamer/PlatformVideoWindowQt.cpp \ platform/graphics/gstreamer/ImageGStreamerQt.cpp - } else:contains(MOBILITY_CONFIG, multimedia) { + } else:contains(DEFINES, WTF_USE_QT_MULTIMEDIA=1) { HEADERS += \ platform/graphics/qt/MediaPlayerPrivateQt.h diff --git a/src/3rdparty/webkit/Source/WebCore/bindings/generic/ActiveDOMCallback.cpp b/src/3rdparty/webkit/Source/WebCore/bindings/generic/ActiveDOMCallback.cpp index ff02a42..86bfc56 100644 --- a/src/3rdparty/webkit/Source/WebCore/bindings/generic/ActiveDOMCallback.cpp +++ b/src/3rdparty/webkit/Source/WebCore/bindings/generic/ActiveDOMCallback.cpp @@ -38,29 +38,6 @@ namespace WebCore { -static void destroyOnContextThread(PassOwnPtr<ActiveDOMObjectCallbackImpl>); - -class DestroyOnContextThreadTask : public ScriptExecutionContext::Task { -public: - static PassOwnPtr<DestroyOnContextThreadTask> create(PassOwnPtr<ActiveDOMObjectCallbackImpl> impl) - { - return adoptPtr(new DestroyOnContextThreadTask(impl)); - } - - virtual void performTask(ScriptExecutionContext*) - { - destroyOnContextThread(m_impl.release()); - } - -private: - DestroyOnContextThreadTask(PassOwnPtr<ActiveDOMObjectCallbackImpl> impl) - : m_impl(impl) - { - } - - OwnPtr<ActiveDOMObjectCallbackImpl> m_impl; -}; - class ActiveDOMObjectCallbackImpl : public ActiveDOMObject { public: ActiveDOMObjectCallbackImpl(ScriptExecutionContext* context) @@ -109,6 +86,29 @@ private: bool m_stopped; }; +static void destroyOnContextThread(PassOwnPtr<ActiveDOMObjectCallbackImpl>); + +class DestroyOnContextThreadTask : public ScriptExecutionContext::Task { +public: + static PassOwnPtr<DestroyOnContextThreadTask> create(PassOwnPtr<ActiveDOMObjectCallbackImpl> impl) + { + return adoptPtr(new DestroyOnContextThreadTask(impl)); + } + + virtual void performTask(ScriptExecutionContext*) + { + destroyOnContextThread(m_impl.release()); + } + +private: + DestroyOnContextThreadTask(PassOwnPtr<ActiveDOMObjectCallbackImpl> impl) + : m_impl(impl) + { + } + + OwnPtr<ActiveDOMObjectCallbackImpl> m_impl; +}; + static void destroyOnContextThread(PassOwnPtr<ActiveDOMObjectCallbackImpl> impl) { OwnPtr<ActiveDOMObjectCallbackImpl> implOwnPtr = impl; diff --git a/src/3rdparty/webkit/Source/WebCore/bindings/js/JSExceptionBase.h b/src/3rdparty/webkit/Source/WebCore/bindings/js/JSExceptionBase.h index a9366ed..01c6ac2 100644 --- a/src/3rdparty/webkit/Source/WebCore/bindings/js/JSExceptionBase.h +++ b/src/3rdparty/webkit/Source/WebCore/bindings/js/JSExceptionBase.h @@ -1,43 +1,43 @@ -/* - * Copyright (C) 2009 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef JSExceptionBase_h -#define JSExceptionBase_h - -namespace JSC { - -class JSValue; - -} // namespace JSC - -namespace WebCore { - -class ExceptionBase; - -ExceptionBase* toExceptionBase(JSC::JSValue); - -} // namespace WebCore - -#endif // JSExceptionBase_h +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef JSExceptionBase_h +#define JSExceptionBase_h + +namespace JSC { + +class JSValue; + +} // namespace JSC + +namespace WebCore { + +class ExceptionBase; + +ExceptionBase* toExceptionBase(JSC::JSValue); + +} // namespace WebCore + +#endif // JSExceptionBase_h diff --git a/src/3rdparty/webkit/Source/WebCore/css/CSSStyleSelector.h b/src/3rdparty/webkit/Source/WebCore/css/CSSStyleSelector.h index a9b0c3e..1fe4ea2 100644 --- a/src/3rdparty/webkit/Source/WebCore/css/CSSStyleSelector.h +++ b/src/3rdparty/webkit/Source/WebCore/css/CSSStyleSelector.h @@ -209,7 +209,7 @@ public: bool checkSelector(const RuleData&); - template <bool firstPass> + template <bool applyFirst> void applyDeclarations(bool important, int startIndex, int endIndex); void matchPageRules(RuleSet*, bool isLeftPage, bool isFirstPage, const String& pageName); diff --git a/src/3rdparty/webkit/Source/WebCore/css/CSSStyleSheet.cpp b/src/3rdparty/webkit/Source/WebCore/css/CSSStyleSheet.cpp index 16c2ba8..37e5c2a 100644 --- a/src/3rdparty/webkit/Source/WebCore/css/CSSStyleSheet.cpp +++ b/src/3rdparty/webkit/Source/WebCore/css/CSSStyleSheet.cpp @@ -220,13 +220,13 @@ void CSSStyleSheet::checkLoaded() { if (isLoading()) return; - if (parent()) - parent()->checkLoaded(); // Avoid |this| being deleted by scripts that run via // ScriptableDocumentParser::executeScriptsWaitingForStylesheets(). // See <rdar://problem/6622300>. RefPtr<CSSStyleSheet> protector(this); + if (parent()) + parent()->checkLoaded(); m_loadCompleted = ownerNode() ? ownerNode()->sheetLoaded() : true; } diff --git a/src/3rdparty/webkit/Source/WebCore/dom/Document.h b/src/3rdparty/webkit/Source/WebCore/dom/Document.h index 6e2f5ec..0948592 100644 --- a/src/3rdparty/webkit/Source/WebCore/dom/Document.h +++ b/src/3rdparty/webkit/Source/WebCore/dom/Document.h @@ -1227,7 +1227,7 @@ private: typedef ListHashSet<Element*, 64> FormElementListHashSet; FormElementListHashSet m_formElementsWithState; - typedef ListHashSet<FormAssociatedElement*, 32> FormAssociatedElementListHashSet; + typedef ListHashSet<RefPtr<FormAssociatedElement>, 32> FormAssociatedElementListHashSet; FormAssociatedElementListHashSet m_formElementsWithFormAttribute; typedef HashMap<FormElementKey, Vector<String>, FormElementKeyHash, FormElementKeyHashTraits> FormElementStateMap; diff --git a/src/3rdparty/webkit/Source/WebCore/dom/Element.cpp b/src/3rdparty/webkit/Source/WebCore/dom/Element.cpp index e7bfbc0..32e47ca 100644 --- a/src/3rdparty/webkit/Source/WebCore/dom/Element.cpp +++ b/src/3rdparty/webkit/Source/WebCore/dom/Element.cpp @@ -1208,7 +1208,13 @@ void Element::removeShadowRoot() InspectorInstrumentation::willRemoveDOMNode(document(), this); data->m_shadowRoot = 0; document()->removeFocusedNodeOfSubtree(oldRoot.get()); + + // Remove from rendering tree + if (oldRoot->attached()) + oldRoot->detach(); + oldRoot->setShadowHost(0); + oldRoot->setTreeScopeRecursively(document()); if (oldRoot->inDocument()) oldRoot->removedFromDocument(); else diff --git a/src/3rdparty/webkit/Source/WebCore/dom/Range.cpp b/src/3rdparty/webkit/Source/WebCore/dom/Range.cpp index be196c8..0c247c2 100644 --- a/src/3rdparty/webkit/Source/WebCore/dom/Range.cpp +++ b/src/3rdparty/webkit/Source/WebCore/dom/Range.cpp @@ -621,7 +621,9 @@ static inline Node* childOfCommonRootBeforeOffset(Node* container, unsigned offs { ASSERT(container); ASSERT(commonRoot); - ASSERT(commonRoot->contains(container)); + + if (!commonRoot->contains(container)) + return 0; if (container == commonRoot) { container = container->firstChild(); @@ -675,7 +677,7 @@ PassRefPtr<DocumentFragment> Range::processContents(ActionType action, Exception if (ec) return 0; - Node* commonRoot = commonAncestorContainer(ec); + RefPtr<Node> commonRoot = commonAncestorContainer(ec); if (ec) return 0; ASSERT(commonRoot); @@ -686,8 +688,8 @@ PassRefPtr<DocumentFragment> Range::processContents(ActionType action, Exception } // what is the highest node that partially selects the start / end of the range? - Node* partialStart = highestAncestorUnderCommonRoot(m_start.container(), commonRoot); - Node* partialEnd = highestAncestorUnderCommonRoot(m_end.container(), commonRoot); + RefPtr<Node> partialStart = highestAncestorUnderCommonRoot(m_start.container(), commonRoot.get()); + RefPtr<Node> partialEnd = highestAncestorUnderCommonRoot(m_end.container(), commonRoot.get()); // Start and end containers are different. // There are three possibilities here: @@ -706,29 +708,32 @@ PassRefPtr<DocumentFragment> Range::processContents(ActionType action, Exception // // These are deleted, cloned, or extracted (i.e. both) depending on action. + // Note that we are verifying that our common root hierarchy is still intact + // after any DOM mutation event, at various stages below. See webkit bug 60350. + RefPtr<Node> leftContents; - if (m_start.container() != commonRoot) { + if (m_start.container() != commonRoot && commonRoot->contains(m_start.container())) { leftContents = processContentsBetweenOffsets(action, 0, m_start.container(), m_start.offset(), lengthOfContentsInNode(m_start.container()), ec); - leftContents = processAncestorsAndTheirSiblings(action, m_start.container(), ProcessContentsForward, leftContents, commonRoot, ec); + leftContents = processAncestorsAndTheirSiblings(action, m_start.container(), ProcessContentsForward, leftContents, commonRoot.get(), ec); } RefPtr<Node> rightContents; - if (m_end.container() != commonRoot) { + if (m_end.container() != commonRoot && commonRoot->contains(m_end.container())) { rightContents = processContentsBetweenOffsets(action, 0, m_end.container(), 0, m_end.offset(), ec); - rightContents = processAncestorsAndTheirSiblings(action, m_end.container(), ProcessContentsBackward, rightContents, commonRoot, ec); + rightContents = processAncestorsAndTheirSiblings(action, m_end.container(), ProcessContentsBackward, rightContents, commonRoot.get(), ec); } // delete all children of commonRoot between the start and end container - Node* processStart = childOfCommonRootBeforeOffset(m_start.container(), m_start.offset(), commonRoot); - if (m_start.container() != commonRoot) // processStart contains nodes before m_start. + RefPtr<Node> processStart = childOfCommonRootBeforeOffset(m_start.container(), m_start.offset(), commonRoot.get()); + if (processStart && m_start.container() != commonRoot) // processStart contains nodes before m_start. processStart = processStart->nextSibling(); - Node* processEnd = childOfCommonRootBeforeOffset(m_end.container(), m_end.offset(), commonRoot); + RefPtr<Node> processEnd = childOfCommonRootBeforeOffset(m_end.container(), m_end.offset(), commonRoot.get()); // Collapse the range, making sure that the result is not within a node that was partially selected. if (action == EXTRACT_CONTENTS || action == DELETE_CONTENTS) { - if (partialStart) + if (partialStart && commonRoot->contains(partialStart.get())) setStart(partialStart->parentNode(), partialStart->nodeIndex() + 1, ec); - else if (partialEnd) + else if (partialEnd && commonRoot->contains(partialEnd.get())) setStart(partialEnd->parentNode(), partialEnd->nodeIndex(), ec); if (ec) return 0; @@ -743,7 +748,7 @@ PassRefPtr<DocumentFragment> Range::processContents(ActionType action, Exception if (processStart) { NodeVector nodes; - for (Node* n = processStart; n && n != processEnd; n = n->nextSibling()) + for (Node* n = processStart.get(); n && n != processEnd; n = n->nextSibling()) nodes.append(n); processNodes(action, nodes, commonRoot, fragment, ec); } @@ -834,7 +839,7 @@ PassRefPtr<Node> Range::processContentsBetweenOffsets(ActionType action, PassRef break; } - return result; + return result.release(); } void Range::processNodes(ActionType action, Vector<RefPtr<Node> >& nodes, PassRefPtr<Node> oldContainer, PassRefPtr<Node> newContainer, ExceptionCode& ec) @@ -899,7 +904,7 @@ PassRefPtr<Node> Range::processAncestorsAndTheirSiblings(ActionType action, Node firstChildInAncestorToProcess = direction == ProcessContentsForward ? ancestor->nextSibling() : ancestor->previousSibling(); } - return clonedContainer; + return clonedContainer.release(); } PassRefPtr<DocumentFragment> Range::extractContents(ExceptionCode& ec) diff --git a/src/3rdparty/webkit/Source/WebCore/editing/ReplaceSelectionCommand.cpp b/src/3rdparty/webkit/Source/WebCore/editing/ReplaceSelectionCommand.cpp index 279bb35..a256bd1 100644 --- a/src/3rdparty/webkit/Source/WebCore/editing/ReplaceSelectionCommand.cpp +++ b/src/3rdparty/webkit/Source/WebCore/editing/ReplaceSelectionCommand.cpp @@ -291,7 +291,7 @@ void ReplacementFragment::restoreTestRenderingNodesToFragment(StyledElement* hol void ReplacementFragment::removeUnrenderedNodes(Node* holder) { - Vector<Node*> unrendered; + Vector<RefPtr<Node> > unrendered; for (Node* node = holder->firstChild(); node; node = node->traverseNextNode(holder)) if (!isNodeRendered(node) && !isTableStructureNode(node)) diff --git a/src/3rdparty/webkit/Source/WebCore/editing/TextIterator.cpp b/src/3rdparty/webkit/Source/WebCore/editing/TextIterator.cpp index b09c226..3de365b 100644 --- a/src/3rdparty/webkit/Source/WebCore/editing/TextIterator.cpp +++ b/src/3rdparty/webkit/Source/WebCore/editing/TextIterator.cpp @@ -2563,6 +2563,9 @@ tryAgain: PassRefPtr<Range> findPlainText(const Range* range, const String& target, FindOptions options) { + // CharacterIterator requires renderers to be up-to-date + range->ownerDocument()->updateLayout(); + // First, find the text. size_t matchStart; size_t matchLength; diff --git a/src/3rdparty/webkit/Source/WebCore/features.pri b/src/3rdparty/webkit/Source/WebCore/features.pri index c56c9fc..2db8eb5 100644 --- a/src/3rdparty/webkit/Source/WebCore/features.pri +++ b/src/3rdparty/webkit/Source/WebCore/features.pri @@ -162,17 +162,23 @@ symbian|maemo5|maemo6 { DEFINES -= ENABLE_VIDEO=1 DEFINES += ENABLE_VIDEO=0 - contains(DEFINES, USE_QTKIT=1) { + mac:!contains(DEFINES, USE_QTMULTIMEDIA=1) { DEFINES -= ENABLE_VIDEO=0 DEFINES += ENABLE_VIDEO=1 - DEFINES -= WTF_USE_QT_MULTIMEDIA=1 - DEFINES += WTF_USE_QT_MULTIMEDIA=0 - } else: contains(DEFINES, USE_GSTREAMER=1) { - DEFINES -= ENABLE_VIDEO=0 - DEFINES += ENABLE_VIDEO=1 - DEFINES -= WTF_USE_QT_MULTIMEDIA=1 - DEFINES += WTF_USE_QT_MULTIMEDIA=0 - } else:contains(MOBILITY_CONFIG, multimedia) { + DEFINES += WTF_USE_QTKIT=1 + DEFINES -= WTF_USE_QTKIT=0 + } else: linux-*:!contains(DEFINES, USE_QTMULTIMEDIA=1) { + system(pkg-config --exists glib-2.0 gio-2.0 gstreamer-0.10): { + DEFINES -= ENABLE_VIDEO=0 + DEFINES += ENABLE_VIDEO=1 + DEFINES += WTF_USE_GSTREAMER=1 + DEFINES -= WTF_USE_GSTREAMER=0 + } else { + message("Disabling video due the lack of GLib/Gio/GStreamer.") + DEFINES -= ENABLE_VIDEO=1 + DEFINES += ENABLE_VIDEO=0 + } + } else: contains(MOBILITY_CONFIG, multimedia) { DEFINES -= ENABLE_VIDEO=0 DEFINES += ENABLE_VIDEO=1 DEFINES -= WTF_USE_QT_MULTIMEDIA=0 diff --git a/src/3rdparty/webkit/Source/WebCore/generated/CSSGrammar.cpp b/src/3rdparty/webkit/Source/WebCore/generated/CSSGrammar.cpp index 1da5e2f..df97459 100644 --- a/src/3rdparty/webkit/Source/WebCore/generated/CSSGrammar.cpp +++ b/src/3rdparty/webkit/Source/WebCore/generated/CSSGrammar.cpp @@ -1,8 +1,10 @@ -/* A Bison parser, made by GNU Bison 2.5. */ -/* Bison implementation for Yacc-like parsers in C +/* A Bison parser, made by GNU Bison 2.4.1. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,7 +46,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.5" +#define YYBISON_VERSION "2.4.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -73,7 +75,7 @@ /* Copy the first part of user declarations. */ -/* Line 268 of yacc.c */ +/* Line 189 of yacc.c */ #line 1 "../Source/WebCore/css/CSSGrammar.y" @@ -135,8 +137,8 @@ using namespace HTMLNames; -/* Line 268 of yacc.c */ -#line 140 "/Source/WebCore/generated/CSSGrammar.tab.c" +/* Line 189 of yacc.c */ +#line 142 "/Source/WebCore/generated/CSSGrammar.tab.c" /* Enabling traces. */ #ifndef YYDEBUG @@ -252,7 +254,7 @@ using namespace HTMLNames; typedef union YYSTYPE { -/* Line 293 of yacc.c */ +/* Line 214 of yacc.c */ #line 63 "../Source/WebCore/css/CSSGrammar.y" bool boolean; @@ -280,8 +282,8 @@ typedef union YYSTYPE -/* Line 293 of yacc.c */ -#line 285 "/Source/WebCore/generated/CSSGrammar.tab.c" +/* Line 214 of yacc.c */ +#line 287 "/Source/WebCore/generated/CSSGrammar.tab.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -291,7 +293,7 @@ typedef union YYSTYPE /* Copy the second part of user declarations. */ -/* Line 343 of yacc.c */ +/* Line 264 of yacc.c */ #line 88 "../Source/WebCore/css/CSSGrammar.y" @@ -307,8 +309,8 @@ static int cssyylex(YYSTYPE* yylval, void* parser) -/* Line 343 of yacc.c */ -#line 312 "/Source/WebCore/generated/CSSGrammar.tab.c" +/* Line 264 of yacc.c */ +#line 314 "/Source/WebCore/generated/CSSGrammar.tab.c" #ifdef short # undef short @@ -358,7 +360,7 @@ typedef short int yytype_int16; #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS +# if YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -411,11 +413,11 @@ YYID (yyi) # define alloca _alloca # else # define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 +# ifndef _STDLIB_H +# define _STDLIB_H 1 # endif # endif # endif @@ -438,24 +440,24 @@ YYID (yyi) # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ +# if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 +# ifndef _STDLIB_H +# define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif @@ -484,7 +486,23 @@ union yyalloc ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) -# define YYCOPY_NEEDED 1 +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of @@ -504,26 +522,6 @@ union yyalloc #endif -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (YYID (0)) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - /* YYFINAL -- State number of the termination state. */ #define YYFINAL 21 /* YYLAST -- Last index in YYTABLE. */ @@ -898,8 +896,8 @@ static const yytype_uint8 yyr2[] = 3 }; -/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE doesn't specify something else to do. Zero +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint16 yydefact[] = { @@ -1054,7 +1052,8 @@ static const yytype_int16 yypgoto[] = /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which - number is the opposite. If YYTABLE_NINF, syntax error. */ + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -276 static const yytype_int16 yytable[] = { @@ -1228,12 +1227,6 @@ static const yytype_int16 yytable[] = 87, 88, 0, 0, 90, 91, 92 }; -#define yypact_value_is_default(yystate) \ - ((yystate) == (-305)) - -#define yytable_value_is_error(yytable_value) \ - YYID (0) - static const yytype_int16 yycheck[] = { 0, 87, 127, 37, 243, 212, 5, 250, 8, 9, @@ -1479,18 +1472,9 @@ static const yytype_uint8 yystos[] = /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. However, - YYFAIL appears to be in use. Nevertheless, it is formally deprecated - in Bison 2.4.2's NEWS entry, where a plan to phase it out is - discussed. */ + Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab -#if defined YYFAIL - /* This is here to suppress warnings from the GCC cpp's - -Wunused-macros. Normally we don't worry about that warning, but - some users do, and we want to make it easy for users to remove - YYFAIL uses, which will produce warnings from Bison 2.5. */ -#endif #define YYRECOVERING() (!!yyerrstatus) @@ -1500,6 +1484,7 @@ do \ { \ yychar = (Token); \ yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ @@ -1541,10 +1526,19 @@ while (YYID (0)) #endif -/* This macro is provided for backward compatibility. */ +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif #endif @@ -1736,6 +1730,7 @@ int yydebug; # define YYMAXDEPTH 10000 #endif + #if YYERROR_VERBOSE @@ -1838,142 +1833,115 @@ yytnamerr (char *yyres, const char *yystr) } # endif -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) { - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); - YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *yyformat = 0; - /* Arguments of yyformat. */ - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int yycount = 0; - - /* There are many possibilities here to consider: - - Assume YYFAIL is not used. It's too flawed to consider. See - <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> - for details. YYERROR is fine as it does not invoke this - function. - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yytoken != YYEMPTY) - { - int yyn = yypact[*yyssp]; - yyarg[yycount++] = yytname[yytoken]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - break; - } - yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - } - } + int yyn = yypact[yystate]; - switch (yycount) - { -# define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } - yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; - } + if (yysize_overflow) + return YYSIZE_MAXIMUM; - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyformat += 2; - } - else - { - yyp++; - yyformat++; - } - } - return 0; + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } } #endif /* YYERROR_VERBOSE */ + /*-----------------------------------------------. | Release the memory associated to this symbol. | @@ -2006,7 +1974,6 @@ yydestruct (yymsg, yytype, yyvaluep) } } - /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus @@ -2023,9 +1990,12 @@ int yyparse (); #endif /* ! YYPARSE_PARAM */ -/*----------. -| yyparse. | -`----------*/ + + + +/*-------------------------. +| yyparse or yypush_parse. | +`-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ @@ -2212,7 +2182,7 @@ yybackup: /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) + if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ @@ -2243,8 +2213,8 @@ yybackup: yyn = yytable[yyn]; if (yyn <= 0) { - if (yytable_value_is_error (yyn)) - goto yyerrlab; + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; yyn = -yyn; goto yyreduce; } @@ -2299,34 +2269,34 @@ yyreduce: { case 9: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 303 "../Source/WebCore/css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->m_rule = (yyvsp[(4) - (6)].rule); - } + ;} break; case 10: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 309 "../Source/WebCore/css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->m_keyframe = (yyvsp[(4) - (6)].keyframeRule); - } + ;} break; case 11: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 315 "../Source/WebCore/css/CSSGrammar.y" { /* can be empty */ - } + ;} break; case 12: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 321 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2338,22 +2308,22 @@ yyreduce: delete p->m_valueList; p->m_valueList = 0; } - } + ;} break; case 13: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 335 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); p->m_mediaQuery = p->sinkFloatingMediaQuery((yyvsp[(4) - (5)].mediaQuery)); - } + ;} break; case 14: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 342 "../Source/WebCore/css/CSSGrammar.y" { if ((yyvsp[(4) - (5)].selectorList)) { @@ -2361,94 +2331,94 @@ yyreduce: if (p->m_selectorListForParseSelector) p->m_selectorListForParseSelector->adoptSelectorVector(*(yyvsp[(4) - (5)].selectorList)); } - } + ;} break; case 21: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 364 "../Source/WebCore/css/CSSGrammar.y" { - } + ;} break; case 24: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 374 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.rule) = static_cast<CSSParser*>(parser)->createCharsetRule((yyvsp[(3) - (5)].string)); if ((yyval.rule) && p->m_styleSheet) p->m_styleSheet->append((yyval.rule)); - } + ;} break; case 25: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 380 "../Source/WebCore/css/CSSGrammar.y" { - } + ;} break; case 26: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 382 "../Source/WebCore/css/CSSGrammar.y" { - } + ;} break; case 27: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 387 "../Source/WebCore/css/CSSGrammar.y" { // Ignore any @charset rule not at the beginning of the style sheet. (yyval.rule) = 0; - } + ;} break; case 29: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 395 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); if ((yyvsp[(2) - (3)].rule) && p->m_styleSheet) p->m_styleSheet->append((yyvsp[(2) - (3)].rule)); - } + ;} break; case 30: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 403 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = (yyvsp[(2) - (2)].rule); - } + ;} break; case 37: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 415 "../Source/WebCore/css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->m_hadSyntacticallyValidCSSRule = true; - } + ;} break; case 41: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 424 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.ruleList) = 0; } + { (yyval.ruleList) = 0; ;} break; case 42: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 425 "../Source/WebCore/css/CSSGrammar.y" { (yyval.ruleList) = (yyvsp[(1) - (3)].ruleList); @@ -2457,357 +2427,357 @@ yyreduce: (yyval.ruleList) = static_cast<CSSParser*>(parser)->createRuleList(); (yyval.ruleList)->append((yyvsp[(2) - (3)].rule)); } - } + ;} break; case 53: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 453 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createImportRule((yyvsp[(3) - (6)].string), (yyvsp[(5) - (6)].mediaList)); - } + ;} break; case 54: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 456 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; - } + ;} break; case 55: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 459 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; - } + ;} break; case 56: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 462 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; - } + ;} break; case 57: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 468 "../Source/WebCore/css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->addNamespace((yyvsp[(3) - (6)].string), (yyvsp[(4) - (6)].string)); (yyval.rule) = 0; -} +;} break; case 58: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 472 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; -} +;} break; case 59: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 475 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; -} +;} break; case 60: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 478 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; -} +;} break; case 61: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 484 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.string).characters = 0; } + { (yyval.string).characters = 0; ;} break; case 62: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 485 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.string) = (yyvsp[(1) - (2)].string); } + { (yyval.string) = (yyvsp[(1) - (2)].string); ;} break; case 65: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 494 "../Source/WebCore/css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); - } + ;} break; case 66: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 500 "../Source/WebCore/css/CSSGrammar.y" { (yyval.valueList) = 0; - } + ;} break; case 67: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 503 "../Source/WebCore/css/CSSGrammar.y" { (yyval.valueList) = (yyvsp[(3) - (4)].valueList); - } + ;} break; case 68: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 509 "../Source/WebCore/css/CSSGrammar.y" { (yyvsp[(3) - (7)].string).lower(); (yyval.mediaQueryExp) = static_cast<CSSParser*>(parser)->createFloatingMediaQueryExp((yyvsp[(3) - (7)].string), (yyvsp[(5) - (7)].valueList)); - } + ;} break; case 69: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 516 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.mediaQueryExpList) = p->createFloatingMediaQueryExpList(); (yyval.mediaQueryExpList)->append(p->sinkFloatingMediaQueryExp((yyvsp[(1) - (1)].mediaQueryExp))); - } + ;} break; case 70: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 521 "../Source/WebCore/css/CSSGrammar.y" { (yyval.mediaQueryExpList) = (yyvsp[(1) - (5)].mediaQueryExpList); (yyval.mediaQueryExpList)->append(static_cast<CSSParser*>(parser)->sinkFloatingMediaQueryExp((yyvsp[(5) - (5)].mediaQueryExp))); - } + ;} break; case 71: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 528 "../Source/WebCore/css/CSSGrammar.y" { (yyval.mediaQueryExpList) = static_cast<CSSParser*>(parser)->createFloatingMediaQueryExpList(); - } + ;} break; case 72: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 531 "../Source/WebCore/css/CSSGrammar.y" { (yyval.mediaQueryExpList) = (yyvsp[(3) - (3)].mediaQueryExpList); - } + ;} break; case 73: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 537 "../Source/WebCore/css/CSSGrammar.y" { (yyval.mediaQueryRestrictor) = MediaQuery::None; - } + ;} break; case 74: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 540 "../Source/WebCore/css/CSSGrammar.y" { (yyval.mediaQueryRestrictor) = MediaQuery::Only; - } + ;} break; case 75: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 543 "../Source/WebCore/css/CSSGrammar.y" { (yyval.mediaQueryRestrictor) = MediaQuery::Not; - } + ;} break; case 76: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 549 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.mediaQuery) = p->createFloatingMediaQuery(p->sinkFloatingMediaQueryExpList((yyvsp[(1) - (1)].mediaQueryExpList))); - } + ;} break; case 77: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 554 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyvsp[(3) - (4)].string).lower(); (yyval.mediaQuery) = p->createFloatingMediaQuery((yyvsp[(1) - (4)].mediaQueryRestrictor), (yyvsp[(3) - (4)].string), p->sinkFloatingMediaQueryExpList((yyvsp[(4) - (4)].mediaQueryExpList))); - } + ;} break; case 78: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 562 "../Source/WebCore/css/CSSGrammar.y" { (yyval.mediaList) = static_cast<CSSParser*>(parser)->createMediaList(); - } + ;} break; case 80: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 569 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.mediaList) = p->createMediaList(); (yyval.mediaList)->appendMediaQuery(p->sinkFloatingMediaQuery((yyvsp[(1) - (1)].mediaQuery))); - } + ;} break; case 81: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 574 "../Source/WebCore/css/CSSGrammar.y" { (yyval.mediaList) = (yyvsp[(1) - (4)].mediaList); if ((yyval.mediaList)) (yyval.mediaList)->appendMediaQuery(static_cast<CSSParser*>(parser)->sinkFloatingMediaQuery((yyvsp[(4) - (4)].mediaQuery))); - } + ;} break; case 82: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 579 "../Source/WebCore/css/CSSGrammar.y" { (yyval.mediaList) = 0; - } + ;} break; case 83: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 585 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createMediaRule((yyvsp[(3) - (7)].mediaList), (yyvsp[(6) - (7)].ruleList)); - } + ;} break; case 84: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 588 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createMediaRule(0, (yyvsp[(5) - (6)].ruleList)); - } + ;} break; case 85: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 594 "../Source/WebCore/css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); - } + ;} break; case 86: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 600 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = (yyvsp[(7) - (8)].keyframesRule); (yyvsp[(7) - (8)].keyframesRule)->setNameInternal((yyvsp[(3) - (8)].string)); - } + ;} break; case 89: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 612 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.keyframesRule) = static_cast<CSSParser*>(parser)->createKeyframesRule(); } + { (yyval.keyframesRule) = static_cast<CSSParser*>(parser)->createKeyframesRule(); ;} break; case 90: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 613 "../Source/WebCore/css/CSSGrammar.y" { (yyval.keyframesRule) = (yyvsp[(1) - (3)].keyframesRule); if ((yyvsp[(2) - (3)].keyframeRule)) (yyval.keyframesRule)->append((yyvsp[(2) - (3)].keyframeRule)); - } + ;} break; case 91: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 621 "../Source/WebCore/css/CSSGrammar.y" { (yyval.keyframeRule) = static_cast<CSSParser*>(parser)->createKeyframeRule((yyvsp[(1) - (6)].valueList)); - } + ;} break; case 92: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 627 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.valueList) = p->createFloatingValueList(); (yyval.valueList)->addValue(p->sinkFloatingValue((yyvsp[(1) - (1)].value))); - } + ;} break; case 93: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 632 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.valueList) = (yyvsp[(1) - (5)].valueList); if ((yyval.valueList)) (yyval.valueList)->addValue(p->sinkFloatingValue((yyvsp[(5) - (5)].value))); - } + ;} break; case 94: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 641 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).isInt = false; (yyval.value).fValue = (yyvsp[(1) - (1)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; } + { (yyval.value).id = 0; (yyval.value).isInt = false; (yyval.value).fValue = (yyvsp[(1) - (1)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; ;} break; case 95: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 642 "../Source/WebCore/css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).isInt = false; (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; @@ -2818,12 +2788,12 @@ yyreduce: (yyval.value).fValue = 100; else YYERROR; - } + ;} break; case 96: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 656 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2835,42 +2805,42 @@ yyreduce: // Also clear margin at-rules here once we fully implement margin at-rules parsing. (yyval.rule) = 0; } - } + ;} break; case 97: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 667 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; - } + ;} break; case 98: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 670 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; - } + ;} break; case 99: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 676 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.selector) = p->createFloatingSelector(); (yyval.selector)->setTag(QualifiedName(nullAtom, (yyvsp[(1) - (1)].string), p->m_defaultNamespace)); (yyval.selector)->setForPage(); - } + ;} break; case 100: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 682 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2879,312 +2849,312 @@ yyreduce: (yyval.selector)->setTag(QualifiedName(nullAtom, (yyvsp[(1) - (2)].string), p->m_defaultNamespace)); (yyval.selector)->setForPage(); } - } + ;} break; case 101: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 690 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (1)].selector); if ((yyval.selector)) (yyval.selector)->setForPage(); - } + ;} break; case 102: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 695 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.selector) = p->createFloatingSelector(); (yyval.selector)->setForPage(); - } + ;} break; case 105: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 708 "../Source/WebCore/css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->startDeclarationsForMarginBox(); - } + ;} break; case 106: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 710 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createMarginAtRule((yyvsp[(1) - (7)].marginBox)); - } + ;} break; case 107: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 716 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::TopLeftCornerMarginBox; - } + ;} break; case 108: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 719 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::TopLeftMarginBox; - } + ;} break; case 109: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 722 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::TopCenterMarginBox; - } + ;} break; case 110: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 725 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::TopRightMarginBox; - } + ;} break; case 111: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 728 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::TopRightCornerMarginBox; - } + ;} break; case 112: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 731 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::BottomLeftCornerMarginBox; - } + ;} break; case 113: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 734 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::BottomLeftMarginBox; - } + ;} break; case 114: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 737 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::BottomCenterMarginBox; - } + ;} break; case 115: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 740 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::BottomRightMarginBox; - } + ;} break; case 116: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 743 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::BottomRightCornerMarginBox; - } + ;} break; case 117: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 746 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::LeftTopMarginBox; - } + ;} break; case 118: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 749 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::LeftMiddleMarginBox; - } + ;} break; case 119: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 752 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::LeftBottomMarginBox; - } + ;} break; case 120: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 755 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::RightTopMarginBox; - } + ;} break; case 121: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 758 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::RightMiddleMarginBox; - } + ;} break; case 122: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 761 "../Source/WebCore/css/CSSGrammar.y" { (yyval.marginBox) = CSSSelector::RightBottomMarginBox; - } + ;} break; case 123: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 768 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createFontFaceRule(); - } + ;} break; case 124: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 771 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; - } + ;} break; case 125: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 774 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; - } + ;} break; case 126: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 780 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.relation) = CSSSelector::DirectAdjacent; } + { (yyval.relation) = CSSSelector::DirectAdjacent; ;} break; case 127: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 781 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.relation) = CSSSelector::IndirectAdjacent; } + { (yyval.relation) = CSSSelector::IndirectAdjacent; ;} break; case 128: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 782 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.relation) = CSSSelector::Child; } + { (yyval.relation) = CSSSelector::Child; ;} break; case 129: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 786 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.integer) = (yyvsp[(1) - (1)].integer); } + { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;} break; case 130: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 787 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.integer) = 1; } + { (yyval.integer) = 1; ;} break; case 131: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 791 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.integer) = -1; } + { (yyval.integer) = -1; ;} break; case 132: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 792 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.integer) = 1; } + { (yyval.integer) = 1; ;} break; case 133: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 796 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); p->markPropertyStart(); - } + ;} break; case 134: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 803 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); p->markSelectorListStart(); - } + ;} break; case 135: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 810 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); p->markSelectorListEnd(); - } + ;} break; case 136: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 817 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.rule) = p->createStyleRule((yyvsp[(1) - (6)].selectorList)); - } + ;} break; case 137: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 824 "../Source/WebCore/css/CSSGrammar.y" { if ((yyvsp[(1) - (1)].selector)) { @@ -3194,12 +3164,12 @@ yyreduce: (yyval.selectorList)->append(p->sinkFloatingSelector((yyvsp[(1) - (1)].selector))); p->updateLastSelectorLineAndPosition(); } - } + ;} break; case 138: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 833 "../Source/WebCore/css/CSSGrammar.y" { if ((yyvsp[(1) - (4)].selectorList) && (yyvsp[(4) - (4)].selector)) { @@ -3209,48 +3179,48 @@ yyreduce: p->updateLastSelectorLineAndPosition(); } else (yyval.selectorList) = 0; - } + ;} break; case 139: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 842 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selectorList) = 0; - } + ;} break; case 140: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 848 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (2)].selector); - } + ;} break; case 141: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 854 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (1)].selector); - } + ;} break; case 142: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 858 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (1)].selector); - } + ;} break; case 143: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 862 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(2) - (2)].selector); @@ -3264,12 +3234,12 @@ yyreduce: end->setRelation(CSSSelector::Descendant); end->setTagHistory(p->sinkFloatingSelector((yyvsp[(1) - (2)].selector))); } - } + ;} break; case 144: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 875 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(3) - (3)].selector); @@ -3283,75 +3253,75 @@ yyreduce: end->setRelation((yyvsp[(2) - (3)].relation)); end->setTagHistory(p->sinkFloatingSelector((yyvsp[(1) - (3)].selector))); } - } + ;} break; case 145: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 888 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = 0; - } + ;} break; case 146: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 894 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.string).characters = 0; (yyval.string).length = 0; } + { (yyval.string).characters = 0; (yyval.string).length = 0; ;} break; case 147: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 895 "../Source/WebCore/css/CSSGrammar.y" - { static UChar star = '*'; (yyval.string).characters = ☆ (yyval.string).length = 1; } + { static UChar star = '*'; (yyval.string).characters = ☆ (yyval.string).length = 1; ;} break; case 148: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 896 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.string) = (yyvsp[(1) - (2)].string); } + { (yyval.string) = (yyvsp[(1) - (2)].string); ;} break; case 149: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 900 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.selector) = p->createFloatingSelector(); (yyval.selector)->setTag(QualifiedName(nullAtom, (yyvsp[(1) - (1)].string), p->m_defaultNamespace)); - } + ;} break; case 150: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 905 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(2) - (2)].selector); if ((yyval.selector)) static_cast<CSSParser*>(parser)->updateSpecifiersWithElementName(nullAtom, (yyvsp[(1) - (2)].string), (yyval.selector)); - } + ;} break; case 151: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 910 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (1)].selector); if ((yyval.selector)) static_cast<CSSParser*>(parser)->updateSpecifiersWithElementName(nullAtom, starAtom, (yyval.selector)); - } + ;} break; case 152: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 915 "../Source/WebCore/css/CSSGrammar.y" { AtomicString namespacePrefix = (yyvsp[(1) - (2)].string); @@ -3362,34 +3332,34 @@ yyreduce: p->m_styleSheet->determineNamespace(namespacePrefix))); else // FIXME: Shouldn't this case be an error? (yyval.selector)->setTag(QualifiedName(nullAtom, (yyvsp[(2) - (2)].string), p->m_defaultNamespace)); - } + ;} break; case 153: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 925 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(3) - (3)].selector); if ((yyval.selector)) static_cast<CSSParser*>(parser)->updateSpecifiersWithElementName((yyvsp[(1) - (3)].string), (yyvsp[(2) - (3)].string), (yyval.selector)); - } + ;} break; case 154: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 930 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(2) - (2)].selector); if ((yyval.selector)) static_cast<CSSParser*>(parser)->updateSpecifiersWithElementName((yyvsp[(1) - (2)].string), starAtom, (yyval.selector)); - } + ;} break; case 155: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 938 "../Source/WebCore/css/CSSGrammar.y" { if ((yyvsp[(1) - (1)].selector)) { @@ -3403,7 +3373,7 @@ yyreduce: case 156: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 946 "../Source/WebCore/css/CSSGrammar.y" { if ((yyvsp[(1) - (5)].selectorList) && (yyvsp[(5) - (5)].selector)) { @@ -3412,21 +3382,21 @@ yyreduce: (yyval.selectorList)->append(p->sinkFloatingSelector((yyvsp[(5) - (5)].selector))); } else (yyval.selectorList) = 0; - } + ;} break; case 157: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 954 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selectorList) = 0; - } + ;} break; case 158: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 960 "../Source/WebCore/css/CSSGrammar.y" { CSSParserString& str = (yyvsp[(1) - (1)].string); @@ -3435,53 +3405,53 @@ yyreduce: if (doc && doc->isHTMLDocument()) str.lower(); (yyval.string) = str; - } + ;} break; case 159: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 968 "../Source/WebCore/css/CSSGrammar.y" { static UChar star = '*'; (yyval.string).characters = ☆ (yyval.string).length = 1; - } + ;} break; case 160: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 976 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (1)].selector); - } + ;} break; case 161: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 979 "../Source/WebCore/css/CSSGrammar.y" { if (!(yyvsp[(2) - (2)].selector)) (yyval.selector) = 0; else if ((yyvsp[(1) - (2)].selector)) (yyval.selector) = static_cast<CSSParser*>(parser)->updateSpecifiers((yyvsp[(1) - (2)].selector), (yyvsp[(2) - (2)].selector)); - } + ;} break; case 162: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 985 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = 0; - } + ;} break; case 163: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 991 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -3490,12 +3460,12 @@ yyreduce: if (!p->m_strict) (yyvsp[(1) - (1)].string).lower(); (yyval.selector)->setValue((yyvsp[(1) - (1)].string)); - } + ;} break; case 164: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 999 "../Source/WebCore/css/CSSGrammar.y" { if ((yyvsp[(1) - (1)].string).characters[0] >= '0' && (yyvsp[(1) - (1)].string).characters[0] <= '9') { @@ -3508,12 +3478,12 @@ yyreduce: (yyvsp[(1) - (1)].string).lower(); (yyval.selector)->setValue((yyvsp[(1) - (1)].string)); } - } + ;} break; case 168: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1017 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -3522,12 +3492,12 @@ yyreduce: if (!p->m_strict) (yyvsp[(2) - (2)].string).lower(); (yyval.selector)->setValue((yyvsp[(2) - (2)].string)); - } + ;} break; case 169: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1028 "../Source/WebCore/css/CSSGrammar.y" { CSSParserString& str = (yyvsp[(1) - (2)].string); @@ -3536,35 +3506,35 @@ yyreduce: if (doc && doc->isHTMLDocument()) str.lower(); (yyval.string) = str; - } + ;} break; case 170: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1039 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector(); (yyval.selector)->setAttribute(QualifiedName(nullAtom, (yyvsp[(3) - (4)].string), nullAtom)); (yyval.selector)->setMatch(CSSSelector::Set); - } + ;} break; case 171: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1044 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector(); (yyval.selector)->setAttribute(QualifiedName(nullAtom, (yyvsp[(3) - (8)].string), nullAtom)); (yyval.selector)->setMatch((CSSSelector::Match)(yyvsp[(4) - (8)].integer)); (yyval.selector)->setValue((yyvsp[(6) - (8)].string)); - } + ;} break; case 172: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1050 "../Source/WebCore/css/CSSGrammar.y" { AtomicString namespacePrefix = (yyvsp[(3) - (5)].string); @@ -3573,12 +3543,12 @@ yyreduce: (yyval.selector)->setAttribute(QualifiedName(namespacePrefix, (yyvsp[(4) - (5)].string), p->m_styleSheet->determineNamespace(namespacePrefix))); (yyval.selector)->setMatch(CSSSelector::Set); - } + ;} break; case 173: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1058 "../Source/WebCore/css/CSSGrammar.y" { AtomicString namespacePrefix = (yyvsp[(3) - (9)].string); @@ -3588,66 +3558,66 @@ yyreduce: p->m_styleSheet->determineNamespace(namespacePrefix))); (yyval.selector)->setMatch((CSSSelector::Match)(yyvsp[(5) - (9)].integer)); (yyval.selector)->setValue((yyvsp[(7) - (9)].string)); - } + ;} break; case 174: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1070 "../Source/WebCore/css/CSSGrammar.y" { (yyval.integer) = CSSSelector::Exact; - } + ;} break; case 175: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1073 "../Source/WebCore/css/CSSGrammar.y" { (yyval.integer) = CSSSelector::List; - } + ;} break; case 176: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1076 "../Source/WebCore/css/CSSGrammar.y" { (yyval.integer) = CSSSelector::Hyphen; - } + ;} break; case 177: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1079 "../Source/WebCore/css/CSSGrammar.y" { (yyval.integer) = CSSSelector::Begin; - } + ;} break; case 178: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1082 "../Source/WebCore/css/CSSGrammar.y" { (yyval.integer) = CSSSelector::End; - } + ;} break; case 179: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1085 "../Source/WebCore/css/CSSGrammar.y" { (yyval.integer) = CSSSelector::Contain; - } + ;} break; case 182: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1096 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector(); @@ -3657,12 +3627,12 @@ yyreduce: CSSSelector::PseudoType type = (yyval.selector)->pseudoType(); if (type == CSSSelector::PseudoUnknown) (yyval.selector) = 0; - } + ;} break; case 183: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1107 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector(); @@ -3672,12 +3642,12 @@ yyreduce: CSSSelector::PseudoType type = (yyval.selector)->pseudoType(); if (type == CSSSelector::PseudoUnknown) (yyval.selector) = 0; - } + ;} break; case 184: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1116 "../Source/WebCore/css/CSSGrammar.y" { (yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector(); @@ -3686,12 +3656,12 @@ yyreduce: (yyval.selector)->setValue((yyvsp[(3) - (3)].string)); // FIXME: This call is needed to force selector to compute the pseudoType early enough. (yyval.selector)->pseudoType(); - } + ;} break; case 185: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1129 "../Source/WebCore/css/CSSGrammar.y" { if ((yyvsp[(4) - (6)].selectorList)) { @@ -3706,12 +3676,12 @@ yyreduce: (yyval.selector) = 0; } else (yyval.selector) = 0; - } + ;} break; case 186: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1144 "../Source/WebCore/css/CSSGrammar.y" { CSSParser *p = static_cast<CSSParser*>(parser); @@ -3722,12 +3692,12 @@ yyreduce: CSSSelector::PseudoType type = (yyval.selector)->pseudoType(); if (type == CSSSelector::PseudoUnknown) (yyval.selector) = 0; - } + ;} break; case 187: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1155 "../Source/WebCore/css/CSSGrammar.y" { CSSParser *p = static_cast<CSSParser*>(parser); @@ -3738,12 +3708,12 @@ yyreduce: CSSSelector::PseudoType type = (yyval.selector)->pseudoType(); if (type == CSSSelector::PseudoUnknown) (yyval.selector) = 0; - } + ;} break; case 188: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1166 "../Source/WebCore/css/CSSGrammar.y" { CSSParser *p = static_cast<CSSParser*>(parser); @@ -3762,12 +3732,12 @@ yyreduce: if (!isValidNthToken((yyvsp[(4) - (6)].string))) (yyval.selector) = 0; } - } + ;} break; case 189: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1185 "../Source/WebCore/css/CSSGrammar.y" { if (!(yyvsp[(4) - (6)].selector) || !(yyvsp[(4) - (6)].selector)->isSimple()) @@ -3784,126 +3754,126 @@ yyreduce: (yyvsp[(2) - (6)].string).lower(); (yyval.selector)->setValue((yyvsp[(2) - (6)].string)); } - } + ;} break; case 190: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1204 "../Source/WebCore/css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (1)].boolean); - } + ;} break; case 191: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1207 "../Source/WebCore/css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (2)].boolean); if ( (yyvsp[(2) - (2)].boolean) ) (yyval.boolean) = (yyvsp[(2) - (2)].boolean); - } + ;} break; case 192: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1212 "../Source/WebCore/css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (1)].boolean); - } + ;} break; case 193: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1215 "../Source/WebCore/css/CSSGrammar.y" { (yyval.boolean) = false; - } + ;} break; case 194: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1218 "../Source/WebCore/css/CSSGrammar.y" { (yyval.boolean) = false; - } + ;} break; case 195: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1221 "../Source/WebCore/css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (2)].boolean); - } + ;} break; case 196: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1224 "../Source/WebCore/css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (2)].boolean); - } + ;} break; case 197: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1230 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); p->markPropertyStart(); (yyval.boolean) = (yyvsp[(1) - (3)].boolean); - } + ;} break; case 198: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1235 "../Source/WebCore/css/CSSGrammar.y" { (yyval.boolean) = false; - } + ;} break; case 199: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1238 "../Source/WebCore/css/CSSGrammar.y" { (yyval.boolean) = false; - } + ;} break; case 200: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1241 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); p->markPropertyStart(); (yyval.boolean) = false; - } + ;} break; case 201: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1246 "../Source/WebCore/css/CSSGrammar.y" { (yyval.boolean) = false; - } + ;} break; case 202: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1249 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -3911,34 +3881,34 @@ yyreduce: (yyval.boolean) = (yyvsp[(1) - (4)].boolean); if ((yyvsp[(2) - (4)].boolean)) (yyval.boolean) = (yyvsp[(2) - (4)].boolean); - } + ;} break; case 203: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1256 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); p->markPropertyStart(); (yyval.boolean) = (yyvsp[(1) - (4)].boolean); - } + ;} break; case 204: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1261 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); p->markPropertyStart(); (yyval.boolean) = (yyvsp[(1) - (6)].boolean); - } + ;} break; case 205: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1269 "../Source/WebCore/css/CSSGrammar.y" { (yyval.boolean) = false; @@ -3956,21 +3926,21 @@ yyreduce: p->m_valueList = 0; } p->markPropertyEnd((yyvsp[(5) - (5)].boolean), isPropertyParsed); - } + ;} break; case 206: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1287 "../Source/WebCore/css/CSSGrammar.y" { (yyval.boolean) = false; - } + ;} break; case 207: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1291 "../Source/WebCore/css/CSSGrammar.y" { /* The default movable type template has letter-spacing: .none; Handle this by looking for @@ -3979,102 +3949,102 @@ yyreduce: CSSParser* p = static_cast<CSSParser*>(parser); p->markPropertyEnd(false, false); (yyval.boolean) = false; - } + ;} break; case 208: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1300 "../Source/WebCore/css/CSSGrammar.y" { /* When we encounter something like p {color: red !important fail;} we should drop the declaration */ CSSParser* p = static_cast<CSSParser*>(parser); p->markPropertyEnd(false, false); (yyval.boolean) = false; - } + ;} break; case 209: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1307 "../Source/WebCore/css/CSSGrammar.y" { /* Handle this case: div { text-align: center; !important } Just reduce away the stray !important. */ (yyval.boolean) = false; - } + ;} break; case 210: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1312 "../Source/WebCore/css/CSSGrammar.y" { /* div { font-family: } Just reduce away this property with no value. */ CSSParser* p = static_cast<CSSParser*>(parser); p->markPropertyEnd(false, false); (yyval.boolean) = false; - } + ;} break; case 211: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1319 "../Source/WebCore/css/CSSGrammar.y" { /* if we come across rules with invalid values like this case: p { weight: *; }, just discard the rule */ CSSParser* p = static_cast<CSSParser*>(parser); p->markPropertyEnd(false, false); (yyval.boolean) = false; - } + ;} break; case 212: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1326 "../Source/WebCore/css/CSSGrammar.y" { /* if we come across: div { color{;color:maroon} }, ignore everything within curly brackets */ (yyval.boolean) = false; - } + ;} break; case 213: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1333 "../Source/WebCore/css/CSSGrammar.y" { (yyval.integer) = cssPropertyID((yyvsp[(1) - (2)].string)); - } + ;} break; case 214: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1339 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.boolean) = true; } + { (yyval.boolean) = true; ;} break; case 215: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1340 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.boolean) = false; } + { (yyval.boolean) = false; ;} break; case 216: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1344 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.valueList) = p->createFloatingValueList(); (yyval.valueList)->addValue(p->sinkFloatingValue((yyvsp[(1) - (1)].value))); - } + ;} break; case 217: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1349 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -4089,316 +4059,316 @@ yyreduce: } (yyval.valueList)->addValue(p->sinkFloatingValue((yyvsp[(3) - (3)].value))); } - } + ;} break; case 218: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1363 "../Source/WebCore/css/CSSGrammar.y" { (yyval.valueList) = 0; - } + ;} break; case 219: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1366 "../Source/WebCore/css/CSSGrammar.y" { (yyval.valueList) = 0; - } + ;} break; case 220: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1369 "../Source/WebCore/css/CSSGrammar.y" { (yyval.valueList) = 0; - } + ;} break; case 221: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1375 "../Source/WebCore/css/CSSGrammar.y" { (yyval.character) = '/'; - } + ;} break; case 222: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1378 "../Source/WebCore/css/CSSGrammar.y" { (yyval.character) = ','; - } + ;} break; case 223: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1381 "../Source/WebCore/css/CSSGrammar.y" { (yyval.character) = 0; - } + ;} break; case 224: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1387 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value) = (yyvsp[(1) - (1)].value); } + { (yyval.value) = (yyvsp[(1) - (1)].value); ;} break; case 225: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1388 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value) = (yyvsp[(2) - (2)].value); (yyval.value).fValue *= (yyvsp[(1) - (2)].integer); } + { (yyval.value) = (yyvsp[(2) - (2)].value); (yyval.value).fValue *= (yyvsp[(1) - (2)].integer); ;} break; case 226: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1389 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_STRING; } + { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_STRING; ;} break; case 227: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1390 "../Source/WebCore/css/CSSGrammar.y" { (yyval.value).id = cssValueKeywordID((yyvsp[(1) - (2)].string)); (yyval.value).unit = CSSPrimitiveValue::CSS_IDENT; (yyval.value).string = (yyvsp[(1) - (2)].string); - } + ;} break; case 228: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1396 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_DIMENSION; } + { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_DIMENSION; ;} break; case 229: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1397 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(2) - (3)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_DIMENSION; } + { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(2) - (3)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_DIMENSION; ;} break; case 230: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1398 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_URI; } + { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_URI; ;} break; case 231: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1399 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_UNICODE_RANGE; } + { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_UNICODE_RANGE; ;} break; case 232: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1400 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; } + { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; ;} break; case 233: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1401 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).string = CSSParserString(); (yyval.value).unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; } + { (yyval.value).id = 0; (yyval.value).string = CSSParserString(); (yyval.value).unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; ;} break; case 234: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1403 "../Source/WebCore/css/CSSGrammar.y" { (yyval.value) = (yyvsp[(1) - (1)].value); - } + ;} break; case 235: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1406 "../Source/WebCore/css/CSSGrammar.y" { (yyval.value) = (yyvsp[(1) - (1)].value); - } + ;} break; case 236: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1409 "../Source/WebCore/css/CSSGrammar.y" { (yyval.value) = (yyvsp[(1) - (1)].value); - } + ;} break; case 237: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1412 "../Source/WebCore/css/CSSGrammar.y" { /* Handle width: %; */ (yyval.value).id = 0; (yyval.value).unit = 0; - } + ;} break; case 238: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1418 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).isInt = true; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; } + { (yyval.value).id = 0; (yyval.value).isInt = true; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; ;} break; case 239: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1419 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).isInt = false; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; } + { (yyval.value).id = 0; (yyval.value).isInt = false; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; ;} break; case 240: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1420 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PERCENTAGE; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PERCENTAGE; ;} break; case 241: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1421 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PX; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PX; ;} break; case 242: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1422 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_CM; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_CM; ;} break; case 243: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1423 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_MM; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_MM; ;} break; case 244: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1424 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_IN; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_IN; ;} break; case 245: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1425 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PT; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PT; ;} break; case 246: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1426 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PC; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PC; ;} break; case 247: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1427 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_DEG; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_DEG; ;} break; case 248: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1428 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_RAD; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_RAD; ;} break; case 249: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1429 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_GRAD; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_GRAD; ;} break; case 250: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1430 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_TURN; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_TURN; ;} break; case 251: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1431 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_MS; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_MS; ;} break; case 252: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1432 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_S; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_S; ;} break; case 253: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1433 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_HZ; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_HZ; ;} break; case 254: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1434 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_KHZ; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_KHZ; ;} break; case 255: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1435 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_EMS; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_EMS; ;} break; case 256: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1436 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSParserValue::Q_EMS; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSParserValue::Q_EMS; ;} break; case 257: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1437 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_EXS; } + { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_EXS; ;} break; case 258: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1438 "../Source/WebCore/css/CSSGrammar.y" { (yyval.value).id = 0; @@ -4407,12 +4377,12 @@ yyreduce: CSSParser* p = static_cast<CSSParser*>(parser); if (Document* doc = p->document()) doc->setUsesRemUnits(true); - } + ;} break; case 259: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1449 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -4422,12 +4392,12 @@ yyreduce: (yyval.value).id = 0; (yyval.value).unit = CSSParserValue::Function; (yyval.value).function = f; - } + ;} break; case 260: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1458 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -4437,74 +4407,74 @@ yyreduce: (yyval.value).id = 0; (yyval.value).unit = CSSParserValue::Function; (yyval.value).function = f; - } + ;} break; case 261: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1470 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value) = (yyvsp[(1) - (1)].value); } + { (yyval.value) = (yyvsp[(1) - (1)].value); ;} break; case 262: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1471 "../Source/WebCore/css/CSSGrammar.y" - { (yyval.value) = (yyvsp[(2) - (2)].value); (yyval.value).fValue *= (yyvsp[(1) - (2)].integer); } + { (yyval.value) = (yyvsp[(2) - (2)].value); (yyval.value).fValue *= (yyvsp[(1) - (2)].integer); ;} break; case 263: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1475 "../Source/WebCore/css/CSSGrammar.y" { (yyval.character) = '+'; - } + ;} break; case 264: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1478 "../Source/WebCore/css/CSSGrammar.y" { (yyval.character) = '-'; - } + ;} break; case 265: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1481 "../Source/WebCore/css/CSSGrammar.y" { (yyval.character) = '*'; - } + ;} break; case 266: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1484 "../Source/WebCore/css/CSSGrammar.y" { (yyval.character) = '/'; - } + ;} break; case 267: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1487 "../Source/WebCore/css/CSSGrammar.y" { if (equalIgnoringCase("mod", (yyvsp[(1) - (2)].string).characters, (yyvsp[(1) - (2)].string).length)) (yyval.character) = '%'; else (yyval.character) = 0; - } + ;} break; case 268: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1496 "../Source/WebCore/css/CSSGrammar.y" { if ((yyvsp[(3) - (6)].valueList)) { @@ -4518,23 +4488,23 @@ yyreduce: (yyval.valueList)->addValue(v); } else (yyval.valueList) = 0; - } + ;} break; case 269: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1511 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.valueList) = p->createFloatingValueList(); (yyval.valueList)->addValue(p->sinkFloatingValue((yyvsp[(1) - (2)].value))); - } + ;} break; case 270: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1516 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -4549,12 +4519,12 @@ yyreduce: } else (yyval.valueList) = 0; - } + ;} break; case 271: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1530 "../Source/WebCore/css/CSSGrammar.y" { if ((yyvsp[(1) - (3)].valueList) && (yyvsp[(2) - (3)].character) && (yyvsp[(3) - (3)].valueList)) { @@ -4567,30 +4537,30 @@ yyreduce: (yyval.valueList)->extend(*((yyvsp[(3) - (3)].valueList))); } else (yyval.valueList) = 0; - } + ;} break; case 273: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1543 "../Source/WebCore/css/CSSGrammar.y" { (yyval.valueList) = 0; - } + ;} break; case 274: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1549 "../Source/WebCore/css/CSSGrammar.y" { (yyval.valueList) = (yyvsp[(1) - (1)].valueList); - } + ;} break; case 275: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1552 "../Source/WebCore/css/CSSGrammar.y" { if ((yyvsp[(1) - (4)].valueList) && (yyvsp[(4) - (4)].valueList)) { @@ -4603,12 +4573,12 @@ yyreduce: (yyval.valueList)->extend(*((yyvsp[(4) - (4)].valueList))); } else (yyval.valueList) = 0; - } + ;} break; case 276: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1567 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -4618,39 +4588,39 @@ yyreduce: (yyval.value).id = 0; (yyval.value).unit = CSSParserValue::Function; (yyval.value).function = f; - } + ;} break; case 277: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1576 "../Source/WebCore/css/CSSGrammar.y" { YYERROR; - } + ;} break; case 278: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1583 "../Source/WebCore/css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (1)].string); - } + ;} break; case 279: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1586 "../Source/WebCore/css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (1)].string); - } + ;} break; case 280: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1592 "../Source/WebCore/css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -4660,98 +4630,87 @@ yyreduce: (yyval.value).id = 0; (yyval.value).unit = CSSParserValue::Function; (yyval.value).function = f; - } + ;} break; case 281: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1601 "../Source/WebCore/css/CSSGrammar.y" { YYERROR; - } + ;} break; case 282: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1609 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; - } + ;} break; case 283: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1612 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; - } + ;} break; case 284: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1618 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; - } + ;} break; case 285: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1621 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; - } + ;} break; case 286: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1627 "../Source/WebCore/css/CSSGrammar.y" { (yyval.rule) = 0; - } + ;} break; case 287: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1645 "../Source/WebCore/css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->invalidBlockHit(); - } + ;} break; case 288: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 1648 "../Source/WebCore/css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->invalidBlockHit(); - } + ;} break; -/* Line 1806 of yacc.c */ -#line 4742 "/Source/WebCore/generated/CSSGrammar.tab.c" +/* Line 1455 of yacc.c */ +#line 4712 "/Source/WebCore/generated/CSSGrammar.tab.c" default: break; } - /* User semantic actions sometimes alter yychar, and that requires - that yytoken be updated with the new translation. We take the - approach of translating immediately before every use of yytoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); @@ -4779,10 +4738,6 @@ yyreduce: | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); - /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { @@ -4790,36 +4745,37 @@ yyerrlab: #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else -# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ - yyssp, yytoken) { - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = YYSYNTAX_ERROR; - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == 1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); - if (!yymsg) - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = 2; - } - else - { - yysyntax_error_status = YYSYNTAX_ERROR; - yymsgp = yymsg; - } - } - yyerror (yymsgp); - if (yysyntax_error_status == 2) - goto yyexhaustedlab; + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } } -# undef YYSYNTAX_ERROR #endif } @@ -4878,7 +4834,7 @@ yyerrlab1: for (;;) { yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) + if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) @@ -4937,13 +4893,8 @@ yyexhaustedlab: yyreturn: if (yychar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = YYTRANSLATE (yychar); - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - } + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); @@ -4968,7 +4919,7 @@ yyreturn: -/* Line 2067 of yacc.c */ +/* Line 1675 of yacc.c */ #line 1658 "../Source/WebCore/css/CSSGrammar.y" diff --git a/src/3rdparty/webkit/Source/WebCore/generated/CSSGrammar.h b/src/3rdparty/webkit/Source/WebCore/generated/CSSGrammar.h index 59225d8..2fcae75 100644 --- a/src/3rdparty/webkit/Source/WebCore/generated/CSSGrammar.h +++ b/src/3rdparty/webkit/Source/WebCore/generated/CSSGrammar.h @@ -1,10 +1,12 @@ #ifndef CSSGRAMMAR_H #define CSSGRAMMAR_H -/* A Bison parser, made by GNU Bison 2.5. */ -/* Bison interface for Yacc-like parsers in C +/* A Bison parser, made by GNU Bison 2.4.1. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -128,7 +130,7 @@ typedef union YYSTYPE { -/* Line 2068 of yacc.c */ +/* Line 1676 of yacc.c */ #line 63 "../Source/WebCore/css/CSSGrammar.y" bool boolean; @@ -156,8 +158,8 @@ typedef union YYSTYPE -/* Line 2068 of yacc.c */ -#line 159 "/Source/WebCore/generated/CSSGrammar.tab.h" +/* Line 1676 of yacc.c */ +#line 161 "/Source/WebCore/generated/CSSGrammar.tab.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/src/3rdparty/webkit/Source/WebCore/generated/CSSPropertyNames.cpp b/src/3rdparty/webkit/Source/WebCore/generated/CSSPropertyNames.cpp index 945ba7d..1294a34 100644 --- a/src/3rdparty/webkit/Source/WebCore/generated/CSSPropertyNames.cpp +++ b/src/3rdparty/webkit/Source/WebCore/generated/CSSPropertyNames.cpp @@ -1,4 +1,4 @@ -/* C++ code produced by gperf version 3.0.4 */ +/* C++ code produced by gperf version 3.0.3 */ /* Command-line: gperf --key-positions='*' -D -n -s 2 CSSPropertyNames.gperf */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ diff --git a/src/3rdparty/webkit/Source/WebCore/generated/CSSValueKeywords.cpp b/src/3rdparty/webkit/Source/WebCore/generated/CSSValueKeywords.cpp index 92c7541..081d323 100644 --- a/src/3rdparty/webkit/Source/WebCore/generated/CSSValueKeywords.cpp +++ b/src/3rdparty/webkit/Source/WebCore/generated/CSSValueKeywords.cpp @@ -1,4 +1,4 @@ -/* C++ code produced by gperf version 3.0.4 */ +/* C++ code produced by gperf version 3.0.3 */ /* Command-line: gperf --key-positions='*' -D -n -s 2 CSSValueKeywords.gperf */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ diff --git a/src/3rdparty/webkit/Source/WebCore/generated/ColorData.cpp b/src/3rdparty/webkit/Source/WebCore/generated/ColorData.cpp index da31ef8..3b09b89 100644 --- a/src/3rdparty/webkit/Source/WebCore/generated/ColorData.cpp +++ b/src/3rdparty/webkit/Source/WebCore/generated/ColorData.cpp @@ -1,4 +1,4 @@ -/* C++ code produced by gperf version 3.0.4 */ +/* C++ code produced by gperf version 3.0.3 */ /* Command-line: gperf --key-positions='*' -D -s 2 /Source/WebCore/platform/ColorData.gperf */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ diff --git a/src/3rdparty/webkit/Source/WebCore/generated/DocTypeStrings.cpp b/src/3rdparty/webkit/Source/WebCore/generated/DocTypeStrings.cpp index 5667009..e0a2b4f 100644 --- a/src/3rdparty/webkit/Source/WebCore/generated/DocTypeStrings.cpp +++ b/src/3rdparty/webkit/Source/WebCore/generated/DocTypeStrings.cpp @@ -1,4 +1,4 @@ -/* C++ code produced by gperf version 3.0.4 */ +/* C++ code produced by gperf version 3.0.3 */ /* Command-line: gperf --key-positions='*' -s 2 /Source/WebCore/html/DocTypeStrings.gperf */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ diff --git a/src/3rdparty/webkit/Source/WebCore/generated/JSWebGLRenderingContext.cpp b/src/3rdparty/webkit/Source/WebCore/generated/JSWebGLRenderingContext.cpp index 6f38364..e2a03c2 100644 --- a/src/3rdparty/webkit/Source/WebCore/generated/JSWebGLRenderingContext.cpp +++ b/src/3rdparty/webkit/Source/WebCore/generated/JSWebGLRenderingContext.cpp @@ -30,6 +30,7 @@ #include "JSDOMBinding.h" #include "JSHTMLCanvasElement.h" #include "JSHTMLImageElement.h" +#include "JSHTMLVideoElement.h" #include "JSImageData.h" #include "JSWebGLActiveInfo.h" #include "JSWebGLBuffer.h" @@ -2985,6 +2986,40 @@ static EncodedJSValue JSC_HOST_CALL jsWebGLRenderingContextPrototypeFunctionTexI return JSValue::encode(jsUndefined()); } +static EncodedJSValue JSC_HOST_CALL jsWebGLRenderingContextPrototypeFunctionTexImage2D5(ExecState* exec) +{ + JSValue thisValue = exec->hostThisValue(); + if (!thisValue.inherits(&JSWebGLRenderingContext::s_info)) + return throwVMTypeError(exec); + JSWebGLRenderingContext* castedThis = static_cast<JSWebGLRenderingContext*>(asObject(thisValue)); + WebGLRenderingContext* imp = static_cast<WebGLRenderingContext*>(castedThis->impl()); + ExceptionCode ec = 0; + unsigned target(exec->argument(0).toUInt32(exec)); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + int level(exec->argument(1).toInt32(exec)); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + unsigned internalformat(exec->argument(2).toUInt32(exec)); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + unsigned format(exec->argument(3).toUInt32(exec)); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + unsigned type(exec->argument(4).toUInt32(exec)); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + if (exec->argumentCount() > 5 && !exec->argument(5).isUndefinedOrNull() && !exec->argument(5).inherits(&JSHTMLVideoElement::s_info)) + return throwVMTypeError(exec); + HTMLVideoElement* video(toHTMLVideoElement(exec->argument(5))); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + + imp->texImage2D(target, level, internalformat, format, type, video, ec); + setDOMException(exec, ec); + return JSValue::encode(jsUndefined()); +} + EncodedJSValue JSC_HOST_CALL jsWebGLRenderingContextPrototypeFunctionTexImage2D(ExecState* exec) { if ((exec->argumentCount() == 9 && (exec->argument(8).isNull() || (exec->argument(8).isObject() && asObject(exec->argument(8))->inherits(&JSArrayBufferView::s_info))))) @@ -2995,6 +3030,8 @@ EncodedJSValue JSC_HOST_CALL jsWebGLRenderingContextPrototypeFunctionTexImage2D( return jsWebGLRenderingContextPrototypeFunctionTexImage2D3(exec); if ((exec->argumentCount() == 6 && (exec->argument(5).isNull() || (exec->argument(5).isObject() && asObject(exec->argument(5))->inherits(&JSHTMLCanvasElement::s_info))))) return jsWebGLRenderingContextPrototypeFunctionTexImage2D4(exec); + if ((exec->argumentCount() == 6 && (exec->argument(5).isNull() || (exec->argument(5).isObject() && asObject(exec->argument(5))->inherits(&JSHTMLVideoElement::s_info))))) + return jsWebGLRenderingContextPrototypeFunctionTexImage2D5(exec); return throwVMTypeError(exec); } @@ -3152,6 +3189,43 @@ static EncodedJSValue JSC_HOST_CALL jsWebGLRenderingContextPrototypeFunctionTexS return JSValue::encode(jsUndefined()); } +static EncodedJSValue JSC_HOST_CALL jsWebGLRenderingContextPrototypeFunctionTexSubImage2D5(ExecState* exec) +{ + JSValue thisValue = exec->hostThisValue(); + if (!thisValue.inherits(&JSWebGLRenderingContext::s_info)) + return throwVMTypeError(exec); + JSWebGLRenderingContext* castedThis = static_cast<JSWebGLRenderingContext*>(asObject(thisValue)); + WebGLRenderingContext* imp = static_cast<WebGLRenderingContext*>(castedThis->impl()); + ExceptionCode ec = 0; + unsigned target(exec->argument(0).toUInt32(exec)); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + int level(exec->argument(1).toInt32(exec)); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + int xoffset(exec->argument(2).toInt32(exec)); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + int yoffset(exec->argument(3).toInt32(exec)); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + unsigned format(exec->argument(4).toUInt32(exec)); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + unsigned type(exec->argument(5).toUInt32(exec)); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + if (exec->argumentCount() > 6 && !exec->argument(6).isUndefinedOrNull() && !exec->argument(6).inherits(&JSHTMLVideoElement::s_info)) + return throwVMTypeError(exec); + HTMLVideoElement* video(toHTMLVideoElement(exec->argument(6))); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + + imp->texSubImage2D(target, level, xoffset, yoffset, format, type, video, ec); + setDOMException(exec, ec); + return JSValue::encode(jsUndefined()); +} + EncodedJSValue JSC_HOST_CALL jsWebGLRenderingContextPrototypeFunctionTexSubImage2D(ExecState* exec) { if ((exec->argumentCount() == 9 && (exec->argument(8).isNull() || (exec->argument(8).isObject() && asObject(exec->argument(8))->inherits(&JSArrayBufferView::s_info))))) @@ -3162,6 +3236,8 @@ EncodedJSValue JSC_HOST_CALL jsWebGLRenderingContextPrototypeFunctionTexSubImage return jsWebGLRenderingContextPrototypeFunctionTexSubImage2D3(exec); if ((exec->argumentCount() == 7 && (exec->argument(6).isNull() || (exec->argument(6).isObject() && asObject(exec->argument(6))->inherits(&JSHTMLCanvasElement::s_info))))) return jsWebGLRenderingContextPrototypeFunctionTexSubImage2D4(exec); + if ((exec->argumentCount() == 7 && (exec->argument(6).isNull() || (exec->argument(6).isObject() && asObject(exec->argument(6))->inherits(&JSHTMLVideoElement::s_info))))) + return jsWebGLRenderingContextPrototypeFunctionTexSubImage2D5(exec); return throwVMTypeError(exec); } diff --git a/src/3rdparty/webkit/Source/WebCore/generated/XPathGrammar.cpp b/src/3rdparty/webkit/Source/WebCore/generated/XPathGrammar.cpp index dc82e12..4e5cb97 100644 --- a/src/3rdparty/webkit/Source/WebCore/generated/XPathGrammar.cpp +++ b/src/3rdparty/webkit/Source/WebCore/generated/XPathGrammar.cpp @@ -1,8 +1,10 @@ -/* A Bison parser, made by GNU Bison 2.5. */ -/* Bison implementation for Yacc-like parsers in C +/* A Bison parser, made by GNU Bison 2.4.1. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,7 +46,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.5" +#define YYBISON_VERSION "2.4.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -73,7 +75,7 @@ /* Copy the first part of user declarations. */ -/* Line 268 of yacc.c */ +/* Line 189 of yacc.c */ #line 28 "../Source/WebCore/xml/XPathGrammar.y" @@ -104,8 +106,8 @@ using namespace XPath; -/* Line 268 of yacc.c */ -#line 109 "/Source/WebCore/generated/XPathGrammar.tab.c" +/* Line 189 of yacc.c */ +#line 111 "/Source/WebCore/generated/XPathGrammar.tab.c" /* Enabling traces. */ #ifndef YYDEBUG @@ -159,7 +161,7 @@ using namespace XPath; typedef union YYSTYPE { -/* Line 293 of yacc.c */ +/* Line 214 of yacc.c */ #line 60 "../Source/WebCore/xml/XPathGrammar.y" Step::Axis axis; @@ -175,8 +177,8 @@ typedef union YYSTYPE -/* Line 293 of yacc.c */ -#line 180 "/Source/WebCore/generated/XPathGrammar.tab.c" +/* Line 214 of yacc.c */ +#line 182 "/Source/WebCore/generated/XPathGrammar.tab.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -186,7 +188,7 @@ typedef union YYSTYPE /* Copy the second part of user declarations. */ -/* Line 343 of yacc.c */ +/* Line 264 of yacc.c */ #line 73 "../Source/WebCore/xml/XPathGrammar.y" @@ -195,8 +197,8 @@ static void xpathyyerror(const char*) { } -/* Line 343 of yacc.c */ -#line 200 "/Source/WebCore/generated/XPathGrammar.tab.c" +/* Line 264 of yacc.c */ +#line 202 "/Source/WebCore/generated/XPathGrammar.tab.c" #ifdef short # undef short @@ -246,7 +248,7 @@ typedef short int yytype_int16; #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS +# if YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -299,11 +301,11 @@ YYID (yyi) # define alloca _alloca # else # define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 +# ifndef _STDLIB_H +# define _STDLIB_H 1 # endif # endif # endif @@ -326,24 +328,24 @@ YYID (yyi) # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ +# if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 +# ifndef _STDLIB_H +# define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif @@ -372,7 +374,23 @@ union yyalloc ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) -# define YYCOPY_NEEDED 1 +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of @@ -392,26 +410,6 @@ union yyalloc #endif -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (YYID (0)) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - /* YYFINAL -- State number of the termination state. */ #define YYFINAL 47 /* YYLAST -- Last index in YYTABLE. */ @@ -570,8 +568,8 @@ static const yytype_uint8 yyr2[] = 1, 2 }; -/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE doesn't specify something else to do. Zero +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { @@ -622,7 +620,8 @@ static const yytype_int8 yypgoto[] = /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which - number is the opposite. If YYTABLE_NINF, syntax error. */ + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { @@ -641,12 +640,6 @@ static const yytype_uint8 yytable[] = 15 }; -#define yypact_value_is_default(yystate) \ - ((yystate) == (-44)) - -#define yytable_value_is_error(yytable_value) \ - YYID (0) - static const yytype_int8 yycheck[] = { 1, 12, 0, 19, 22, 48, 49, 43, 10, 11, @@ -692,18 +685,9 @@ static const yytype_uint8 yystos[] = /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. However, - YYFAIL appears to be in use. Nevertheless, it is formally deprecated - in Bison 2.4.2's NEWS entry, where a plan to phase it out is - discussed. */ + Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab -#if defined YYFAIL - /* This is here to suppress warnings from the GCC cpp's - -Wunused-macros. Normally we don't worry about that warning, but - some users do, and we want to make it easy for users to remove - YYFAIL uses, which will produce warnings from Bison 2.5. */ -#endif #define YYRECOVERING() (!!yyerrstatus) @@ -713,6 +697,7 @@ do \ { \ yychar = (Token); \ yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ @@ -754,10 +739,19 @@ while (YYID (0)) #endif -/* This macro is provided for backward compatibility. */ +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif #endif @@ -949,6 +943,7 @@ int yydebug; # define YYMAXDEPTH 10000 #endif + #if YYERROR_VERBOSE @@ -1051,142 +1046,115 @@ yytnamerr (char *yyres, const char *yystr) } # endif -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) { - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); - YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *yyformat = 0; - /* Arguments of yyformat. */ - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int yycount = 0; - - /* There are many possibilities here to consider: - - Assume YYFAIL is not used. It's too flawed to consider. See - <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> - for details. YYERROR is fine as it does not invoke this - function. - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yytoken != YYEMPTY) - { - int yyn = yypact[*yyssp]; - yyarg[yycount++] = yytname[yytoken]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - break; - } - yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - } - } + int yyn = yypact[yystate]; - switch (yycount) + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else { -# define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } - yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; - } + if (yysize_overflow) + return YYSIZE_MAXIMUM; - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyformat += 2; - } - else - { - yyp++; - yyformat++; - } - } - return 0; + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } } #endif /* YYERROR_VERBOSE */ + /*-----------------------------------------------. | Release the memory associated to this symbol. | @@ -1219,7 +1187,6 @@ yydestruct (yymsg, yytype, yyvaluep) } } - /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus @@ -1236,9 +1203,12 @@ int yyparse (); #endif /* ! YYPARSE_PARAM */ -/*----------. -| yyparse. | -`----------*/ + + + +/*-------------------------. +| yyparse or yypush_parse. | +`-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ @@ -1425,7 +1395,7 @@ yybackup: /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) + if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ @@ -1456,8 +1426,8 @@ yybackup: yyn = yytable[yyn]; if (yyn <= 0) { - if (yytable_value_is_error (yyn)) - goto yyerrlab; + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; yyn = -yyn; goto yyreduce; } @@ -1512,98 +1482,98 @@ yyreduce: { case 2: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 122 "../Source/WebCore/xml/XPathGrammar.y" { PARSER->m_topExpr = (yyvsp[(1) - (1)].expr); - } + ;} break; case 3: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 129 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.locationPath)->setAbsolute(false); - } + ;} break; case 4: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 134 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.locationPath)->setAbsolute(true); - } + ;} break; case 5: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 141 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.locationPath) = new LocationPath; PARSER->registerParseNode((yyval.locationPath)); - } + ;} break; case 6: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 147 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.locationPath) = (yyvsp[(2) - (2)].locationPath); - } + ;} break; case 7: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 152 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.locationPath) = (yyvsp[(2) - (2)].locationPath); (yyval.locationPath)->insertFirstStep((yyvsp[(1) - (2)].step)); PARSER->unregisterParseNode((yyvsp[(1) - (2)].step)); - } + ;} break; case 8: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 161 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.locationPath) = new LocationPath; (yyval.locationPath)->appendStep((yyvsp[(1) - (1)].step)); PARSER->unregisterParseNode((yyvsp[(1) - (1)].step)); PARSER->registerParseNode((yyval.locationPath)); - } + ;} break; case 9: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 169 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.locationPath)->appendStep((yyvsp[(3) - (3)].step)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].step)); - } + ;} break; case 10: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 175 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.locationPath)->appendStep((yyvsp[(2) - (3)].step)); (yyval.locationPath)->appendStep((yyvsp[(3) - (3)].step)); PARSER->unregisterParseNode((yyvsp[(2) - (3)].step)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].step)); - } + ;} break; case 11: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 185 "../Source/WebCore/xml/XPathGrammar.y" { if ((yyvsp[(2) - (2)].predList)) { @@ -1613,12 +1583,12 @@ yyreduce: (yyval.step) = new Step(Step::ChildAxis, *(yyvsp[(1) - (2)].nodeTest)); PARSER->deleteNodeTest((yyvsp[(1) - (2)].nodeTest)); PARSER->registerParseNode((yyval.step)); - } + ;} break; case 12: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 196 "../Source/WebCore/xml/XPathGrammar.y" { String localName; @@ -1635,12 +1605,12 @@ yyreduce: (yyval.step) = new Step(Step::ChildAxis, Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI)); PARSER->deleteString((yyvsp[(1) - (2)].str)); PARSER->registerParseNode((yyval.step)); - } + ;} break; case 13: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 214 "../Source/WebCore/xml/XPathGrammar.y" { if ((yyvsp[(3) - (3)].predList)) { @@ -1650,12 +1620,12 @@ yyreduce: (yyval.step) = new Step((yyvsp[(1) - (3)].axis), *(yyvsp[(2) - (3)].nodeTest)); PARSER->deleteNodeTest((yyvsp[(2) - (3)].nodeTest)); PARSER->registerParseNode((yyval.step)); - } + ;} break; case 14: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 225 "../Source/WebCore/xml/XPathGrammar.y" { String localName; @@ -1672,21 +1642,21 @@ yyreduce: (yyval.step) = new Step((yyvsp[(1) - (3)].axis), Step::NodeTest(Step::NodeTest::NameTest, localName, namespaceURI)); PARSER->deleteString((yyvsp[(2) - (3)].str)); PARSER->registerParseNode((yyval.step)); - } + ;} break; case 17: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 249 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.axis) = Step::AttributeAxis; - } + ;} break; case 18: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 256 "../Source/WebCore/xml/XPathGrammar.y" { if (*(yyvsp[(1) - (3)].str) == "node") @@ -1698,147 +1668,147 @@ yyreduce: PARSER->deleteString((yyvsp[(1) - (3)].str)); PARSER->registerNodeTest((yyval.nodeTest)); - } + ;} break; case 19: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 269 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.nodeTest) = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest); PARSER->deleteString((yyvsp[(1) - (3)].str)); PARSER->registerNodeTest((yyval.nodeTest)); - } + ;} break; case 20: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 276 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.nodeTest) = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest, (yyvsp[(3) - (4)].str)->stripWhiteSpace()); PARSER->deleteString((yyvsp[(1) - (4)].str)); PARSER->deleteString((yyvsp[(3) - (4)].str)); PARSER->registerNodeTest((yyval.nodeTest)); - } + ;} break; case 21: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 286 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.predList) = 0; - } + ;} break; case 23: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 295 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.predList) = new Vector<Predicate*>; (yyval.predList)->append(new Predicate((yyvsp[(1) - (1)].expr))); PARSER->unregisterParseNode((yyvsp[(1) - (1)].expr)); PARSER->registerPredicateVector((yyval.predList)); - } + ;} break; case 24: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 303 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.predList)->append(new Predicate((yyvsp[(2) - (2)].expr))); PARSER->unregisterParseNode((yyvsp[(2) - (2)].expr)); - } + ;} break; case 25: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 311 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = (yyvsp[(2) - (3)].expr); - } + ;} break; case 26: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 318 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.step) = new Step(Step::DescendantOrSelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); PARSER->registerParseNode((yyval.step)); - } + ;} break; case 27: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 326 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.step) = new Step(Step::SelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); PARSER->registerParseNode((yyval.step)); - } + ;} break; case 28: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 332 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.step) = new Step(Step::ParentAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); PARSER->registerParseNode((yyval.step)); - } + ;} break; case 29: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 340 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = new VariableReference(*(yyvsp[(1) - (1)].str)); PARSER->deleteString((yyvsp[(1) - (1)].str)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 30: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 347 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = (yyvsp[(2) - (3)].expr); - } + ;} break; case 31: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 352 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = new StringExpression(*(yyvsp[(1) - (1)].str)); PARSER->deleteString((yyvsp[(1) - (1)].str)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 32: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 359 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = new Number((yyvsp[(1) - (1)].str)->toDouble()); PARSER->deleteString((yyvsp[(1) - (1)].str)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 34: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 370 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = createFunction(*(yyvsp[(1) - (3)].str)); @@ -1846,12 +1816,12 @@ yyreduce: YYABORT; PARSER->deleteString((yyvsp[(1) - (3)].str)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 35: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 379 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = createFunction(*(yyvsp[(1) - (4)].str), *(yyvsp[(3) - (4)].argList)); @@ -1860,34 +1830,34 @@ yyreduce: PARSER->deleteString((yyvsp[(1) - (4)].str)); PARSER->deleteExpressionVector((yyvsp[(3) - (4)].argList)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 36: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 391 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.argList) = new Vector<Expression*>; (yyval.argList)->append((yyvsp[(1) - (1)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (1)].expr)); PARSER->registerExpressionVector((yyval.argList)); - } + ;} break; case 37: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 399 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.argList)->append((yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].expr)); - } + ;} break; case 40: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 413 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = new Union; @@ -1896,21 +1866,21 @@ yyreduce: PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].expr)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 41: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 425 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = (yyvsp[(1) - (1)].locationPath); - } + ;} break; case 43: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 432 "../Source/WebCore/xml/XPathGrammar.y" { (yyvsp[(3) - (3)].locationPath)->setAbsolute(true); @@ -1918,12 +1888,12 @@ yyreduce: PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].locationPath)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 44: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 441 "../Source/WebCore/xml/XPathGrammar.y" { (yyvsp[(3) - (3)].locationPath)->insertFirstStep((yyvsp[(2) - (3)].step)); @@ -1933,134 +1903,123 @@ yyreduce: PARSER->unregisterParseNode((yyvsp[(2) - (3)].step)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].locationPath)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 46: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 456 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = new Filter((yyvsp[(1) - (2)].expr), *(yyvsp[(2) - (2)].predList)); PARSER->unregisterParseNode((yyvsp[(1) - (2)].expr)); PARSER->deletePredicateVector((yyvsp[(2) - (2)].predList)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 48: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 468 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = new LogicalOp(LogicalOp::OP_Or, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].expr)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 50: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 480 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = new LogicalOp(LogicalOp::OP_And, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].expr)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 52: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 492 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = new EqTestOp((yyvsp[(2) - (3)].eqop), (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].expr)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 54: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 504 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = new EqTestOp((yyvsp[(2) - (3)].eqop), (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].expr)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 56: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 516 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = new NumericOp(NumericOp::OP_Add, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].expr)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 57: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 524 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = new NumericOp(NumericOp::OP_Sub, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].expr)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 59: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 536 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = new NumericOp((yyvsp[(2) - (3)].numop), (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].expr)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; case 61: -/* Line 1806 of yacc.c */ +/* Line 1455 of yacc.c */ #line 548 "../Source/WebCore/xml/XPathGrammar.y" { (yyval.expr) = new Negative; (yyval.expr)->addSubExpression((yyvsp[(2) - (2)].expr)); PARSER->unregisterParseNode((yyvsp[(2) - (2)].expr)); PARSER->registerParseNode((yyval.expr)); - } + ;} break; -/* Line 1806 of yacc.c */ -#line 2051 "/Source/WebCore/generated/XPathGrammar.tab.c" +/* Line 1455 of yacc.c */ +#line 2021 "/Source/WebCore/generated/XPathGrammar.tab.c" default: break; } - /* User semantic actions sometimes alter yychar, and that requires - that yytoken be updated with the new translation. We take the - approach of translating immediately before every use of yytoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); @@ -2088,10 +2047,6 @@ yyreduce: | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); - /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { @@ -2099,36 +2054,37 @@ yyerrlab: #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else -# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ - yyssp, yytoken) { - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = YYSYNTAX_ERROR; - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == 1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); - if (!yymsg) - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = 2; - } - else - { - yysyntax_error_status = YYSYNTAX_ERROR; - yymsgp = yymsg; - } - } - yyerror (yymsgp); - if (yysyntax_error_status == 2) - goto yyexhaustedlab; + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } } -# undef YYSYNTAX_ERROR #endif } @@ -2187,7 +2143,7 @@ yyerrlab1: for (;;) { yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) + if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) @@ -2246,13 +2202,8 @@ yyexhaustedlab: yyreturn: if (yychar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = YYTRANSLATE (yychar); - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - } + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); @@ -2277,7 +2228,7 @@ yyreturn: -/* Line 2067 of yacc.c */ +/* Line 1675 of yacc.c */ #line 556 "../Source/WebCore/xml/XPathGrammar.y" diff --git a/src/3rdparty/webkit/Source/WebCore/generated/XPathGrammar.h b/src/3rdparty/webkit/Source/WebCore/generated/XPathGrammar.h index 2911272..fa6a7b3 100644 --- a/src/3rdparty/webkit/Source/WebCore/generated/XPathGrammar.h +++ b/src/3rdparty/webkit/Source/WebCore/generated/XPathGrammar.h @@ -1,8 +1,10 @@ -/* A Bison parser, made by GNU Bison 2.5. */ -/* Bison interface for Yacc-like parsers in C +/* A Bison parser, made by GNU Bison 2.4.1. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -64,7 +66,7 @@ typedef union YYSTYPE { -/* Line 2068 of yacc.c */ +/* Line 1676 of yacc.c */ #line 60 "../Source/WebCore/xml/XPathGrammar.y" Step::Axis axis; @@ -80,8 +82,8 @@ typedef union YYSTYPE -/* Line 2068 of yacc.c */ -#line 85 "/Source/WebCore/generated/XPathGrammar.tab.h" +/* Line 1676 of yacc.c */ +#line 87 "/Source/WebCore/generated/XPathGrammar.tab.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/src/3rdparty/webkit/Source/WebCore/html/HTMLSourceElement.cpp b/src/3rdparty/webkit/Source/WebCore/html/HTMLSourceElement.cpp index 59b3882..0631a20 100644 --- a/src/3rdparty/webkit/Source/WebCore/html/HTMLSourceElement.cpp +++ b/src/3rdparty/webkit/Source/WebCore/html/HTMLSourceElement.cpp @@ -57,13 +57,15 @@ PassRefPtr<HTMLSourceElement> HTMLSourceElement::create(const QualifiedName& tag void HTMLSourceElement::insertedIntoTree(bool deep) { HTMLElement::insertedIntoTree(deep); - if (parentNode() && (parentNode()->hasTagName(audioTag) || parentNode()->hasTagName(videoTag))) + Element* parent = parentElement(); + if (parent && parent->isMediaElement()) static_cast<HTMLMediaElement*>(parentNode())->sourceWasAdded(this); } void HTMLSourceElement::willRemove() { - if (parentNode() && (parentNode()->hasTagName(audioTag) || parentNode()->hasTagName(videoTag))) + Element* parent = parentElement(); + if (parent && parent->isMediaElement()) static_cast<HTMLMediaElement*>(parentNode())->sourceWillBeRemoved(this); HTMLElement::willRemove(); } diff --git a/src/3rdparty/webkit/Source/WebCore/html/HTMLTrackElement.cpp b/src/3rdparty/webkit/Source/WebCore/html/HTMLTrackElement.cpp index 63f2788..4de878b 100644 --- a/src/3rdparty/webkit/Source/WebCore/html/HTMLTrackElement.cpp +++ b/src/3rdparty/webkit/Source/WebCore/html/HTMLTrackElement.cpp @@ -53,7 +53,8 @@ PassRefPtr<HTMLTrackElement> HTMLTrackElement::create(const QualifiedName& tagNa void HTMLTrackElement::insertedIntoTree(bool deep) { HTMLElement::insertedIntoTree(deep); - if (parentNode() && (parentNode()->hasTagName(audioTag) || parentNode()->hasTagName(videoTag))) { + Element* parent = parentElement(); + if (parent && parent->isMediaElement()) { // TODO(annacc): // static_cast<HTMLMediaElement*>(parentNode())->trackWasAdded(this); } @@ -61,7 +62,8 @@ void HTMLTrackElement::insertedIntoTree(bool deep) void HTMLTrackElement::willRemove() { - if (parentNode() && (parentNode()->hasTagName(audioTag) || parentNode()->hasTagName(videoTag))) { + Element* parent = parentElement(); + if (parent && parent->isMediaElement()) { // TODO(annacc): // static_cast<HTMLMediaElement*>(parentNode())->trackWillBeRemoved(this); } diff --git a/src/3rdparty/webkit/Source/WebCore/html/shadow/MediaControlElements.cpp b/src/3rdparty/webkit/Source/WebCore/html/shadow/MediaControlElements.cpp index ac5d5e2..c3bfb9a 100644 --- a/src/3rdparty/webkit/Source/WebCore/html/shadow/MediaControlElements.cpp +++ b/src/3rdparty/webkit/Source/WebCore/html/shadow/MediaControlElements.cpp @@ -57,7 +57,7 @@ HTMLMediaElement* toParentMediaElement(RenderObject* o) { Node* node = o->node(); Node* mediaNode = node ? node->shadowAncestorNode() : 0; - if (!mediaNode || (!mediaNode->hasTagName(HTMLNames::videoTag) && !mediaNode->hasTagName(HTMLNames::audioTag))) + if (!mediaNode || !mediaNode->isElementNode() || !static_cast<Element*>(mediaNode)->isMediaElement()) return 0; return static_cast<HTMLMediaElement*>(mediaNode); diff --git a/src/3rdparty/webkit/Source/WebCore/inspector/InspectorValues.cpp b/src/3rdparty/webkit/Source/WebCore/inspector/InspectorValues.cpp index 09d1258..c80de51 100644 --- a/src/3rdparty/webkit/Source/WebCore/inspector/InspectorValues.cpp +++ b/src/3rdparty/webkit/Source/WebCore/inspector/InspectorValues.cpp @@ -620,7 +620,18 @@ void InspectorBasicValue::writeJSON(Vector<UChar>* output) const output->append(falseString, 5); } else if (type() == TypeNumber) { NumberToStringBuffer buffer; - unsigned length = DecimalNumber(m_doubleValue).toStringDecimal(buffer, WTF::NumberToStringBufferLength); + DecimalNumber decimal = m_doubleValue; + unsigned length = 0; + if (decimal.bufferLengthForStringDecimal() > WTF::NumberToStringBufferLength) { + // Not enough room for decimal. Use exponential format. + if (decimal.bufferLengthForStringExponential() > WTF::NumberToStringBufferLength) { + // Fallback for an abnormal case if it's too little even for exponential. + output->append("NaN", 3); + return; + } + length = decimal.toStringExponential(buffer, WTF::NumberToStringBufferLength); + } else + length = decimal.toStringDecimal(buffer, WTF::NumberToStringBufferLength); output->append(buffer, length); } } diff --git a/src/3rdparty/webkit/Source/WebCore/loader/FrameLoader.cpp b/src/3rdparty/webkit/Source/WebCore/loader/FrameLoader.cpp index 75daae5..1b046b3 100644 --- a/src/3rdparty/webkit/Source/WebCore/loader/FrameLoader.cpp +++ b/src/3rdparty/webkit/Source/WebCore/loader/FrameLoader.cpp @@ -1331,6 +1331,9 @@ static bool isFeedWithNestedProtocolInHTTPFamily(const KURL& url) void FrameLoader::loadFrameRequest(const FrameLoadRequest& request, bool lockHistory, bool lockBackForwardList, PassRefPtr<Event> event, PassRefPtr<FormState> formState, ReferrerPolicy referrerPolicy) { + // Protect frame from getting blown away inside dispatchBeforeLoadEvent in loadWithDocumentLoader. + RefPtr<Frame> protect(m_frame); + KURL url = request.resourceRequest().url(); ASSERT(m_frame->document()); @@ -1388,7 +1391,7 @@ void FrameLoader::loadURL(const KURL& newURL, const String& referrer, const Stri RefPtr<SecurityOrigin> referrerOrigin = SecurityOrigin::createFromString(referrer); addHTTPOriginIfNeeded(request, referrerOrigin->toString()); } - addExtraFieldsToRequest(request, newLoadType, true, event || isFormSubmission); + addExtraFieldsToRequest(request, newLoadType, true); if (newLoadType == FrameLoadTypeReload || newLoadType == FrameLoadTypeReloadFromOrigin) request.setCachePolicy(ReloadIgnoringCacheData); @@ -1567,7 +1570,13 @@ void FrameLoader::loadWithDocumentLoader(DocumentLoader* loader, FrameLoadType t loader->setTriggeringAction(NavigationAction(newURL, policyChecker()->loadType(), isFormSubmission)); if (Element* ownerElement = m_frame->ownerElement()) { - if (!ownerElement->dispatchBeforeLoadEvent(loader->request().url().string())) { + // We skip dispatching the beforeload event if we've already + // committed a real document load because the event would leak + // subsequent activity by the frame which the parent frame isn't + // supposed to learn. For example, if the child frame navigated to + // a new URL, the parent frame shouldn't learn the URL. + if (!m_stateMachine.committedFirstRealDocumentLoad() + && !ownerElement->dispatchBeforeLoadEvent(loader->request().url().string())) { continueLoadAfterNavigationPolicy(loader->request(), formState, false); return; } @@ -2700,20 +2709,20 @@ void FrameLoader::detachViewsAndDocumentLoader() void FrameLoader::addExtraFieldsToSubresourceRequest(ResourceRequest& request) { - addExtraFieldsToRequest(request, m_loadType, false, false); + addExtraFieldsToRequest(request, m_loadType, false); } void FrameLoader::addExtraFieldsToMainResourceRequest(ResourceRequest& request) { - addExtraFieldsToRequest(request, m_loadType, true, false); + addExtraFieldsToRequest(request, m_loadType, true); } -void FrameLoader::addExtraFieldsToRequest(ResourceRequest& request, FrameLoadType loadType, bool mainResource, bool cookiePolicyURLFromRequest) +void FrameLoader::addExtraFieldsToRequest(ResourceRequest& request, FrameLoadType loadType, bool mainResource) { // Don't set the cookie policy URL if it's already been set. // But make sure to set it on all requests, as it has significance beyond the cookie policy for all protocols (<rdar://problem/6616664>). if (request.firstPartyForCookies().isEmpty()) { - if (mainResource && (isLoadingMainFrame() || cookiePolicyURLFromRequest)) + if (mainResource && isLoadingMainFrame()) request.setFirstPartyForCookies(request.url()); else if (Document* document = m_frame->document()) request.setFirstPartyForCookies(document->firstPartyForCookies()); @@ -2812,7 +2821,7 @@ void FrameLoader::loadPostRequest(const ResourceRequest& inRequest, const String workingResourceRequest.setHTTPMethod("POST"); workingResourceRequest.setHTTPBody(formData); workingResourceRequest.setHTTPContentType(contentType); - addExtraFieldsToRequest(workingResourceRequest, loadType, true, true); + addExtraFieldsToRequest(workingResourceRequest, loadType, true); NavigationAction action(url, loadType, true, event); @@ -3286,7 +3295,7 @@ void FrameLoader::loadDifferentDocumentItem(HistoryItem* item, FrameLoadType loa // Make sure to add extra fields to the request after the Origin header is added for the FormData case. // See https://bugs.webkit.org/show_bug.cgi?id=22194 for more discussion. - addExtraFieldsToRequest(request, m_loadType, true, formData); + addExtraFieldsToRequest(request, m_loadType, true); addedExtraFields = true; // FIXME: Slight hack to test if the NSURL cache contains the page we're going to. @@ -3329,7 +3338,7 @@ void FrameLoader::loadDifferentDocumentItem(HistoryItem* item, FrameLoadType loa } if (!addedExtraFields) - addExtraFieldsToRequest(request, m_loadType, true, formData); + addExtraFieldsToRequest(request, m_loadType, true); loadWithNavigationAction(request, action, false, loadType, 0); } diff --git a/src/3rdparty/webkit/Source/WebCore/loader/FrameLoader.h b/src/3rdparty/webkit/Source/WebCore/loader/FrameLoader.h index f2b16d9..728459c 100644 --- a/src/3rdparty/webkit/Source/WebCore/loader/FrameLoader.h +++ b/src/3rdparty/webkit/Source/WebCore/loader/FrameLoader.h @@ -356,7 +356,7 @@ private: void updateFirstPartyForCookies(); void setFirstPartyForCookies(const KURL&); - void addExtraFieldsToRequest(ResourceRequest&, FrameLoadType loadType, bool isMainResource, bool cookiePolicyURLFromRequest); + void addExtraFieldsToRequest(ResourceRequest&, FrameLoadType, bool isMainResource); // Also not cool. void stopLoadingSubframes(ClearProvisionalItemPolicy); diff --git a/src/3rdparty/webkit/Source/WebCore/loader/cache/CachedResource.cpp b/src/3rdparty/webkit/Source/WebCore/loader/cache/CachedResource.cpp index 0f205da..8e5038a 100644 --- a/src/3rdparty/webkit/Source/WebCore/loader/cache/CachedResource.cpp +++ b/src/3rdparty/webkit/Source/WebCore/loader/cache/CachedResource.cpp @@ -250,6 +250,8 @@ void CachedResource::setRequest(CachedResourceRequest* request) m_status = Pending; m_request = request; + CachedResourceHandle<CachedResource> protect(this); + // All loads finish with data(allDataReceived = true) or error(), except for // canceled loads, which silently set our request to 0. Be sure to notify our // client in that case, so we don't seem to continue loading forever. @@ -258,9 +260,6 @@ void CachedResource::setRequest(CachedResourceRequest* request) setStatus(Canceled); checkNotify(); } - - if (canDelete() && !inCache()) - delete this; } void CachedResource::addClient(CachedResourceClient* client) diff --git a/src/3rdparty/webkit/Source/WebCore/make-hash-tools.pl b/src/3rdparty/webkit/Source/WebCore/make-hash-tools.pl index 37639eb..2812ce7 100644 --- a/src/3rdparty/webkit/Source/WebCore/make-hash-tools.pl +++ b/src/3rdparty/webkit/Source/WebCore/make-hash-tools.pl @@ -20,7 +20,6 @@ # Boston, MA 02110-1301, USA. use strict; -use Switch; use File::Basename; my $outdir = $ARGV[0]; @@ -28,9 +27,7 @@ shift; my $option = basename($ARGV[0],".gperf"); -switch ($option) { - -case "DocTypeStrings" { +if ($option eq "DocTypeStrings") { my $docTypeStringsGenerated = "$outdir/DocTypeStrings.cpp"; my $docTypeStringsGperf = $ARGV[0]; @@ -38,9 +35,7 @@ case "DocTypeStrings" { system("gperf --key-positions=\"*\" -s 2 $docTypeStringsGperf > $docTypeStringsGenerated") == 0 || die "calling gperf failed: $?"; -} # case "DocTypeStrings" - -case "ColorData" { +} elsif ($option eq "ColorData") { my $colorDataGenerated = "$outdir/ColorData.cpp"; my $colorDataGperf = $ARGV[0]; @@ -48,6 +43,6 @@ case "ColorData" { system("gperf --key-positions=\"*\" -D -s 2 $colorDataGperf > $colorDataGenerated") == 0 || die "calling gperf failed: $?"; -} # case "ColorData" - -} # switch ($option) +} else { + die "Unknown option."; +} diff --git a/src/3rdparty/webkit/Source/WebCore/page/DOMWindow.cpp b/src/3rdparty/webkit/Source/WebCore/page/DOMWindow.cpp index d1d60ad..a86c1af 100644 --- a/src/3rdparty/webkit/Source/WebCore/page/DOMWindow.cpp +++ b/src/3rdparty/webkit/Source/WebCore/page/DOMWindow.cpp @@ -1667,7 +1667,7 @@ void DOMWindow::setLocation(const String& urlString, DOMWindow* activeWindow, DO if (completedURL.isNull()) return; - if (isInsecureScriptAccess(activeWindow, urlString)) + if (isInsecureScriptAccess(activeWindow, completedURL)) return; // We want a new history item if we are processing a user gesture. @@ -1746,7 +1746,7 @@ Frame* DOMWindow::createWindow(const String& urlString, const AtomicString& fram newFrame->loader()->setOpener(openerFrame); newFrame->page()->setOpenedByDOM(); - if (newFrame->domWindow()->isInsecureScriptAccess(activeWindow, urlString)) + if (newFrame->domWindow()->isInsecureScriptAccess(activeWindow, completedURL)) return newFrame; if (function) @@ -1796,7 +1796,9 @@ PassRefPtr<DOMWindow> DOMWindow::open(const String& urlString, const AtomicStrin if (!activeFrame->loader()->shouldAllowNavigation(targetFrame)) return 0; - if (isInsecureScriptAccess(activeWindow, urlString)) + KURL completedURL = firstFrame->document()->completeURL(urlString); + + if (targetFrame->domWindow()->isInsecureScriptAccess(activeWindow, completedURL)) return targetFrame->domWindow(); if (urlString.isEmpty()) @@ -1805,7 +1807,7 @@ PassRefPtr<DOMWindow> DOMWindow::open(const String& urlString, const AtomicStrin // For whatever reason, Firefox uses the first window rather than the active window to // determine the outgoing referrer. We replicate that behavior here. targetFrame->navigationScheduler()->scheduleLocationChange(activeFrame->document()->securityOrigin(), - firstFrame->document()->completeURL(urlString).string(), + completedURL, firstFrame->loader()->outgoingReferrer(), !activeFrame->script()->anyPageIsProcessingUserGesture(), false); diff --git a/src/3rdparty/webkit/Source/WebCore/page/FrameView.cpp b/src/3rdparty/webkit/Source/WebCore/page/FrameView.cpp index b7ff00a..3dadbf3 100644 --- a/src/3rdparty/webkit/Source/WebCore/page/FrameView.cpp +++ b/src/3rdparty/webkit/Source/WebCore/page/FrameView.cpp @@ -1938,7 +1938,7 @@ void FrameView::updateWidget(RenderEmbeddedObject* object) static_cast<HTMLPlugInImageElement*>(ownerElement)->updateWidget(CreateAnyWidgetType); // FIXME: It is not clear that Media elements need or want this updateWidget() call. #if ENABLE(PLUGIN_PROXY_FOR_VIDEO) - else if (ownerElement->hasTagName(videoTag) || ownerElement->hasTagName(audioTag)) + else if (ownerElement->isMediaElement()) static_cast<HTMLMediaElement*>(ownerElement)->updateWidget(CreateAnyWidgetType); #endif else diff --git a/src/3rdparty/webkit/Source/WebCore/page/Geolocation.cpp b/src/3rdparty/webkit/Source/WebCore/page/Geolocation.cpp index fc5b1c6..b93379a 100644 --- a/src/3rdparty/webkit/Source/WebCore/page/Geolocation.cpp +++ b/src/3rdparty/webkit/Source/WebCore/page/Geolocation.cpp @@ -441,6 +441,9 @@ void Geolocation::resume() void Geolocation::setIsAllowed(bool allowed) { + // Protect the Geolocation object from garbage collection during a callback. + RefPtr<Geolocation> protect(this); + // This may be due to either a new position from the service, or a cached // position. m_allowGeolocation = allowed ? Yes : No; diff --git a/src/3rdparty/webkit/Source/WebCore/page/Geolocation.h b/src/3rdparty/webkit/Source/WebCore/page/Geolocation.h index b52ad45..ec48f6e 100644 --- a/src/3rdparty/webkit/Source/WebCore/page/Geolocation.h +++ b/src/3rdparty/webkit/Source/WebCore/page/Geolocation.h @@ -100,7 +100,7 @@ private: void startTimerIfNeeded(); void timerFired(Timer<GeoNotifier>*); - Geolocation* m_geolocation; + RefPtr<Geolocation> m_geolocation; RefPtr<PositionCallback> m_successCallback; RefPtr<PositionErrorCallback> m_errorCallback; RefPtr<PositionOptions> m_options; diff --git a/src/3rdparty/webkit/Source/WebCore/page/PrintContext.cpp b/src/3rdparty/webkit/Source/WebCore/page/PrintContext.cpp index 6c8b312..660ad11 100644 --- a/src/3rdparty/webkit/Source/WebCore/page/PrintContext.cpp +++ b/src/3rdparty/webkit/Source/WebCore/page/PrintContext.cpp @@ -55,6 +55,13 @@ PrintContext::~PrintContext() end(); } +#if COMPILER(WINSCW) +const IntRect& PrintContext::pageRect(size_t pageNumber) const +{ + return m_pageRects[pageNumber]; +} +#endif + void PrintContext::computePageRects(const FloatRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, float& outPageHeight, bool allowHorizontalTiling) { m_pageRects.clear(); diff --git a/src/3rdparty/webkit/Source/WebCore/page/PrintContext.h b/src/3rdparty/webkit/Source/WebCore/page/PrintContext.h index 873937a..aadff47 100644 --- a/src/3rdparty/webkit/Source/WebCore/page/PrintContext.h +++ b/src/3rdparty/webkit/Source/WebCore/page/PrintContext.h @@ -51,7 +51,11 @@ public: // These are only valid after page rects are computed. size_t pageCount() const { return m_pageRects.size(); } +#if COMPILER(WINSCW) + const IntRect& pageRect(size_t pageNumber) const; +#else const IntRect& pageRect(size_t pageNumber) const { return m_pageRects[pageNumber]; } +#endif const Vector<IntRect>& pageRects() const { return m_pageRects; } float computeAutomaticScaleFactor(const FloatSize& availablePaperSize); diff --git a/src/3rdparty/webkit/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp b/src/3rdparty/webkit/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp index a442a2b..7270785 100644 --- a/src/3rdparty/webkit/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp +++ b/src/3rdparty/webkit/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp @@ -61,9 +61,9 @@ void FullScreenVideoWindow::keyPressEvent(QKeyEvent* ev) { if (m_mediaElement && ev->key() == Qt::Key_Space) { if (!m_mediaElement->paused()) - m_mediaElement->pause(); + m_mediaElement->pause(true); else - m_mediaElement->play(); + m_mediaElement->play(true); } else if (ev->key() == Qt::Key_Escape) emit closed(); QWidget::keyPressEvent(ev); diff --git a/src/3rdparty/webkit/Source/WebCore/platform/graphics/mac/FontCacheMac.mm b/src/3rdparty/webkit/Source/WebCore/platform/graphics/mac/FontCacheMac.mm index c71c411..9f5c44e 100644 --- a/src/3rdparty/webkit/Source/WebCore/platform/graphics/mac/FontCacheMac.mm +++ b/src/3rdparty/webkit/Source/WebCore/platform/graphics/mac/FontCacheMac.mm @@ -36,22 +36,33 @@ #import "WebCoreSystemInterface.h" #import "WebFontCache.h" #import <AppKit/AppKit.h> +#import <wtf/MainThread.h> #import <wtf/StdLibExtras.h> namespace WebCore { +// The "void*" parameter makes the function match the prototype for callbacks from callOnMainThread. +static void invalidateFontCache(void*) +{ + if (!isMainThread()) { + callOnMainThread(&invalidateFontCache, 0); + return; + } + fontCache()->invalidate(); +} + #if !defined(BUILDING_ON_LEOPARD) static void fontCacheRegisteredFontsChangedNotificationCallback(CFNotificationCenterRef, void* observer, CFStringRef name, const void *, CFDictionaryRef) { ASSERT_UNUSED(observer, observer == fontCache()); ASSERT_UNUSED(name, CFEqual(name, kCTFontManagerRegisteredFontsChangedNotification)); - fontCache()->invalidate(); + invalidateFontCache(0); } #else static void fontCacheATSNotificationCallback(ATSFontNotificationInfoRef, void*) { - fontCache()->invalidate(); + invalidateFontCache(0); } #endif diff --git a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreSystemInterface.h b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreSystemInterface.h index 7ebfaab..9e05840 100644 --- a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreSystemInterface.h +++ b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreSystemInterface.h @@ -70,6 +70,7 @@ typedef struct _NSRect NSRect; @class AVAsset; @class NSArray; @class NSButtonCell; +@class NSControl; @class NSData; @class NSDate; @class NSEvent; @@ -85,12 +86,14 @@ typedef struct _NSRect NSRect; @class NSURLRequest; @class NSURLResponse; @class NSView; +@class NSWindow; @class QTMovie; @class QTMovieView; #else class AVAsset; class NSArray; class NSButtonCell; +class NSControl; class NSData; class NSDate; class NSEvent; @@ -107,6 +110,7 @@ class NSTextFieldCell; class NSURLConnection; class NSURLResponse; class NSView; +class NSWindow; class QTMovie; class QTMovieView; #endif @@ -151,6 +155,22 @@ extern BOOL (*wkGetNSURLResponseMustRevalidate)(NSURLResponse *response); extern void (*wkGetWheelEventDeltas)(NSEvent*, float* deltaX, float* deltaY, BOOL* continuous); extern BOOL (*wkHitTestMediaUIPart)(int part, int themeStyle, CGRect bounds, CGPoint point); extern void (*wkMeasureMediaUIPart)(int part, int themeStyle, CGRect *bounds, CGSize *naturalSize); +extern NSView *(*wkCreateMediaUIBackgroundView)(void); + +typedef enum { + wkMediaUIControlTimeline, + wkMediaUIControlSlider, + wkMediaUIControlPlayPauseButton, + wkMediaUIControlExitFullscreenButton, + wkMediaUIControlRewindButton, + wkMediaUIControlFastForwardButton, + wkMediaUIControlVolumeUpButton, + wkMediaUIControlVolumeDownButton +}; +extern NSControl *(*wkCreateMediaUIControl)(int); + +extern void (*wkWindowSetAlpha)(NSWindow *, float); +extern void (*wkWindowSetScaledFrame)(NSWindow *, NSRect, NSRect); extern BOOL (*wkMediaControllerThemeAvailable)(int themeStyle); extern void (*wkPopupMenu)(NSMenu*, NSPoint location, float width, NSView*, int selectedItem, NSFont*); extern unsigned (*wkQTIncludeOnlyModernMediaFileTypes)(void); diff --git a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreSystemInterface.mm b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreSystemInterface.mm index 9cc6677..94191b7 100644 --- a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreSystemInterface.mm +++ b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreSystemInterface.mm @@ -46,6 +46,10 @@ void (*wkDrawMediaSliderTrack)(int themeStyle, CGContextRef context, CGRect rect BOOL (*wkHitTestMediaUIPart)(int part, int themeStyle, CGRect bounds, CGPoint point); void (*wkDrawMediaUIPart)(int part, int themeStyle, CGContextRef context, CGRect rect, unsigned state); void (*wkMeasureMediaUIPart)(int part, int themeStyle, CGRect *bounds, CGSize *naturalSize); +NSView *(*wkCreateMediaUIBackgroundView)(void); +NSControl *(*wkCreateMediaUIControl)(int); +void (*wkWindowSetAlpha)(NSWindow *, float); +void (*wkWindowSetScaledFrame)(NSWindow *, NSRect, NSRect); BOOL (*wkMediaControllerThemeAvailable)(int themeStyle); NSString* (*wkGetPreferredExtensionForMIMEType)(NSString*); CFStringRef (*wkSignedPublicKeyAndChallengeString)(unsigned keySize, CFStringRef challenge, CFStringRef keyDescription); diff --git a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenController.h b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenController.h new file mode 100644 index 0000000..88df1d6 --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenController.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if ENABLE(VIDEO) + +#import <Cocoa/Cocoa.h> +#import <wtf/RefPtr.h> + +namespace WebCore { + class HTMLMediaElement; +} + +@protocol WebVideoFullscreenControllerDelegate; +@class WebVideoFullscreenHUDWindowController; +@class WebWindowFadeAnimation; +@class QTMovieLayer; + +@interface WebVideoFullscreenController : NSWindowController { +@private + RefPtr<WebCore::HTMLMediaElement> _mediaElement; // (retain) + id <WebVideoFullscreenControllerDelegate> _delegate; // (assign) + + NSWindow *_backgroundFullscreenWindow; // (retain) + WebVideoFullscreenHUDWindowController *_hudController; // (retain) + + WebWindowFadeAnimation *_fadeAnimation; // (retain) + + BOOL _isEndingFullscreen; + BOOL _isWindowLoaded; + BOOL _forceDisableAnimation; + uint32_t _idleDisplaySleepAssertion; + uint32_t _idleSystemSleepAssertion; + NSTimer *_tickleTimer; + uint32_t _savedUIMode; + uint32_t _savedUIOptions; +} + +- (id <WebVideoFullscreenControllerDelegate>)delegate; +- (void)setDelegate:(id <WebVideoFullscreenControllerDelegate>)delegate; + +- (void)setupVideoOverlay:(QTMovieLayer*)layer; +- (void)setMediaElement:(WebCore::HTMLMediaElement*)mediaElement; +- (WebCore::HTMLMediaElement*)mediaElement; + +- (void)enterFullscreen:(NSScreen *)screen; +- (void)exitFullscreen; + +@end + +#endif // ENABLE(VIDEO) diff --git a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenController.mm b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenController.mm new file mode 100644 index 0000000..a943fce --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenController.mm @@ -0,0 +1,617 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "config.h" + +#if ENABLE(VIDEO) + +#import "WebVideoFullscreenController.h" + +#import "WebVideoFullscreenHUDWindowController.h" +#import "WebWindowAnimation.h" +#import <Carbon/Carbon.h> +#import <IOKit/pwr_mgt/IOPMLib.h> +#import <QTKit/QTKit.h> +#import <WebCore/HTMLMediaElement.h> +#import <WebCore/SoftLinking.h> +#import <objc/objc-runtime.h> +#import <wtf/UnusedParam.h> + +#if USE(GSTREAMER) +#import <WebCore/GStreamerGWorld.h> +#endif + +SOFT_LINK_FRAMEWORK(QTKit) +SOFT_LINK_CLASS(QTKit, QTMovieLayer) + +SOFT_LINK_POINTER(QTKit, QTMovieRateDidChangeNotification, NSString *) + +#define QTMovieRateDidChangeNotification getQTMovieRateDidChangeNotification() +static const NSTimeInterval tickleTimerInterval = 1.0; + +@interface WebVideoFullscreenWindow : NSWindow +#ifndef BUILDING_ON_LEOPARD +<NSAnimationDelegate> +#endif +{ + SEL _controllerActionOnAnimationEnd; + WebWindowScaleAnimation *_fullscreenAnimation; // (retain) +} +- (void)animateFromRect:(NSRect)startRect toRect:(NSRect)endRect withSubAnimation:(NSAnimation *)subAnimation controllerAction:(SEL)controllerAction; +@end + +@interface WebVideoFullscreenController(HUDWindowControllerDelegate) <WebVideoFullscreenHUDWindowControllerDelegate> +- (void)requestExitFullscreenWithAnimation:(BOOL)animation; +- (void)updateMenuAndDockForFullscreen; +- (void)updatePowerAssertions; +@end + +@interface NSWindow(IsOnActiveSpaceAdditionForTigerAndLeopard) +- (BOOL)isOnActiveSpace; +@end + +@implementation WebVideoFullscreenController +- (id)init +{ + // Do not defer window creation, to make sure -windowNumber is created (needed by WebWindowScaleAnimation). + NSWindow *window = [[WebVideoFullscreenWindow alloc] initWithContentRect:NSZeroRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]; + self = [super initWithWindow:window]; + [window release]; + if (!self) + return nil; + [self windowDidLoad]; + return self; + +} +- (void)dealloc +{ + ASSERT(!_backgroundFullscreenWindow); + ASSERT(!_fadeAnimation); + [_tickleTimer invalidate]; + [_tickleTimer release]; + _tickleTimer = nil; + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [super dealloc]; +} + +- (WebVideoFullscreenWindow *)fullscreenWindow +{ + return (WebVideoFullscreenWindow *)[super window]; +} + +- (void)setupVideoOverlay:(QTMovieLayer*)layer +{ + WebVideoFullscreenWindow *window = [self fullscreenWindow]; +#if USE(GSTREAMER) + if (_mediaElement && _mediaElement->platformMedia().type == WebCore::PlatformMedia::GStreamerGWorldType) { + WebCore::GStreamerGWorld* gstGworld = _mediaElement->platformMedia().media.gstreamerGWorld; + if (gstGworld->enterFullscreen()) + [window setContentView:gstGworld->platformVideoWindow()->window()]; + } +#else + [[window contentView] setLayer:layer]; + [[window contentView] setWantsLayer:YES]; + if (_mediaElement && _mediaElement->platformMedia().type == WebCore::PlatformMedia::QTMovieType) + [layer setMovie:_mediaElement->platformMedia().media.qtMovie]; +#endif +} + +- (void)windowDidLoad +{ + WebVideoFullscreenWindow *window = [self fullscreenWindow]; + [window setHasShadow:YES]; // This is nicer with a shadow. + [window setLevel:NSPopUpMenuWindowLevel-1]; + + QTMovieLayer *layer = [[getQTMovieLayerClass() alloc] init]; + [self setupVideoOverlay:layer]; + [layer release]; + +#if !USE(GSTREAMER) + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidResignActive:) name:NSApplicationDidResignActiveNotification object:NSApp]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidChangeScreenParameters:) name:NSApplicationDidChangeScreenParametersNotification object:NSApp]; +#endif +} + +- (WebCore::HTMLMediaElement*)mediaElement +{ + return _mediaElement.get(); +} + +- (void)setMediaElement:(WebCore::HTMLMediaElement*)mediaElement +{ + _mediaElement = mediaElement; + if ([self isWindowLoaded]) { + QTMovieLayer *movieLayer = (QTMovieLayer *)[[[self fullscreenWindow] contentView] layer]; + + ASSERT(movieLayer && [movieLayer isKindOfClass:[getQTMovieLayerClass() class]]); + [self setupVideoOverlay:movieLayer]; +#if !USE(GSTREAMER) + ASSERT([movieLayer movie]); + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(rateChanged:) + name:QTMovieRateDidChangeNotification + object:[movieLayer movie]]; +#endif + } +} + +- (id <WebVideoFullscreenControllerDelegate>)delegate +{ + return _delegate; +} + +- (void)setDelegate:(id <WebVideoFullscreenControllerDelegate>)delegate +{ + _delegate = delegate; +} + +- (CGFloat)clearFadeAnimation +{ + [_fadeAnimation stopAnimation]; + CGFloat previousAlpha = [_fadeAnimation currentAlpha]; + [_fadeAnimation setWindow:nil]; + [_fadeAnimation release]; + _fadeAnimation = nil; + return previousAlpha; +} + +- (void)windowDidExitFullscreen +{ +#if USE(GSTREAMER) + if (_mediaElement && _mediaElement->platformMedia().type == WebCore::PlatformMedia::GStreamerGWorldType) + _mediaElement->platformMedia().media.gstreamerGWorld->exitFullscreen(); +#endif + [self clearFadeAnimation]; + [[self window] close]; + [self setWindow:nil]; + [self updateMenuAndDockForFullscreen]; + [self updatePowerAssertions]; + [_hudController setDelegate:nil]; + [_hudController release]; + _hudController = nil; + [_backgroundFullscreenWindow close]; + [_backgroundFullscreenWindow release]; + _backgroundFullscreenWindow = nil; + + [self autorelease]; // Associated -retain is in -exitFullscreen. + _isEndingFullscreen = NO; +} + +- (void)windowDidEnterFullscreen +{ + [self clearFadeAnimation]; + + ASSERT(!_hudController); + _hudController = [[WebVideoFullscreenHUDWindowController alloc] init]; + [_hudController setDelegate:self]; + + [self updateMenuAndDockForFullscreen]; + [self updatePowerAssertions]; + [NSCursor setHiddenUntilMouseMoves:YES]; + + // Give the HUD keyboard focus initially + [_hudController fadeWindowIn]; +} + +- (NSRect)mediaElementRect +{ + return _mediaElement->screenRect(); +} + +- (void)applicationDidResignActive:(NSNotification*)notification +{ + UNUSED_PARAM(notification); + // Check to see if the fullscreenWindow is on the active space; this function is available + // on 10.6 and later, so default to YES if the function is not available: + NSWindow* fullscreenWindow = [self fullscreenWindow]; + BOOL isOnActiveSpace = ([fullscreenWindow respondsToSelector:@selector(isOnActiveSpace)] ? [fullscreenWindow isOnActiveSpace] : YES); + + // Replicate the QuickTime Player (X) behavior when losing active application status: + // Is the fullscreen screen the main screen? (Note: this covers the case where only a + // single screen is available.) Is the fullscreen screen on the current space? IFF so, + // then exit fullscreen mode. + if ([fullscreenWindow screen] == [[NSScreen screens] objectAtIndex:0] && isOnActiveSpace) + [self requestExitFullscreenWithAnimation:NO]; +} + + +// MARK: - +// MARK: Exposed Interface + +static void constrainFrameToRatioOfFrame(NSRect *frameToConstrain, const NSRect *frame) +{ + // Keep a constrained aspect ratio for the destination window + CGFloat originalRatio = frame->size.width / frame->size.height; + CGFloat newRatio = frameToConstrain->size.width / frameToConstrain->size.height; + if (newRatio > originalRatio) { + CGFloat newWidth = originalRatio * frameToConstrain->size.height; + CGFloat diff = frameToConstrain->size.width - newWidth; + frameToConstrain->size.width = newWidth; + frameToConstrain->origin.x += diff / 2; + } else { + CGFloat newHeight = frameToConstrain->size.width / originalRatio; + CGFloat diff = frameToConstrain->size.height - newHeight; + frameToConstrain->size.height = newHeight; + frameToConstrain->origin.y += diff / 2; + } +} + +static NSWindow *createBackgroundFullscreenWindow(NSRect frame, int level) +{ + NSWindow *window = [[NSWindow alloc] initWithContentRect:frame styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]; + [window setOpaque:YES]; + [window setBackgroundColor:[NSColor blackColor]]; + [window setLevel:level]; + [window setReleasedWhenClosed:NO]; + return window; +} + +- (void)setupFadeAnimationIfNeededAndFadeIn:(BOOL)fadeIn +{ + CGFloat initialAlpha = fadeIn ? 0 : 1; + if (_fadeAnimation) { + // Make sure we support queuing animation if the previous one isn't over yet + initialAlpha = [self clearFadeAnimation]; + } + if (!_forceDisableAnimation) + _fadeAnimation = [[WebWindowFadeAnimation alloc] initWithDuration:0.2 window:_backgroundFullscreenWindow initialAlpha:initialAlpha finalAlpha:fadeIn ? 1 : 0]; +} + +- (void)enterFullscreen:(NSScreen *)screen +{ + if (!screen) + screen = [NSScreen mainScreen]; + + NSRect frame = [self mediaElementRect]; + NSRect endFrame = [screen frame]; + constrainFrameToRatioOfFrame(&endFrame, &frame); + + // Create a black window if needed + if (!_backgroundFullscreenWindow) + _backgroundFullscreenWindow = createBackgroundFullscreenWindow([screen frame], [[self window] level]-1); + else + [_backgroundFullscreenWindow setFrame:[screen frame] display:NO]; + + [self setupFadeAnimationIfNeededAndFadeIn:YES]; + if (_forceDisableAnimation) { + // This will disable scale animation + frame = NSZeroRect; + } + [[self fullscreenWindow] animateFromRect:frame toRect:endFrame withSubAnimation:_fadeAnimation controllerAction:@selector(windowDidEnterFullscreen)]; + + [_backgroundFullscreenWindow orderWindow:NSWindowBelow relativeTo:[[self fullscreenWindow] windowNumber]]; +} + +- (void)exitFullscreen +{ + if (_isEndingFullscreen) + return; + _isEndingFullscreen = YES; + [_hudController closeWindow]; + + NSRect endFrame = [self mediaElementRect]; + + [self setupFadeAnimationIfNeededAndFadeIn:NO]; + if (_forceDisableAnimation) { + // This will disable scale animation + endFrame = NSZeroRect; + } + + // We have to retain ourselves because we want to be alive for the end of the animation. + // If our owner releases us we could crash if this is not the case. + // Balanced in windowDidExitFullscreen + [self retain]; + + [[self fullscreenWindow] animateFromRect:[[self window] frame] toRect:endFrame withSubAnimation:_fadeAnimation controllerAction:@selector(windowDidExitFullscreen)]; +} + +- (void)applicationDidChangeScreenParameters:(NSNotification*)notification +{ + UNUSED_PARAM(notification); + // The user may have changed the main screen by moving the menu bar, or they may have changed + // the Dock's size or location, or they may have changed the fullscreen screen's dimensions. + // Update our presentation parameters, and ensure that the full screen window occupies the + // entire screen: + [self updateMenuAndDockForFullscreen]; + [[self window] setFrame:[[[self window] screen] frame] display:YES]; +} + +- (void)updateMenuAndDockForFullscreen +{ + // NSApplicationPresentationOptions is available on > 10.6 only: +#ifndef BUILDING_ON_LEOPARD + NSApplicationPresentationOptions options = NSApplicationPresentationDefault; + NSScreen* fullscreenScreen = [[self window] screen]; + + if (!_isEndingFullscreen) { + // Auto-hide the menu bar if the fullscreenScreen contains the menu bar: + // NOTE: if the fullscreenScreen contains the menu bar but not the dock, we must still + // auto-hide the dock, or an exception will be thrown. + if ([[NSScreen screens] objectAtIndex:0] == fullscreenScreen) + options |= (NSApplicationPresentationAutoHideMenuBar | NSApplicationPresentationAutoHideDock); + // Check if the current screen contains the dock by comparing the screen's frame to its + // visibleFrame; if a dock is present, the visibleFrame will differ. If the current screen + // contains the dock, hide it. + else if (!NSEqualRects([fullscreenScreen frame], [fullscreenScreen visibleFrame])) + options |= NSApplicationPresentationAutoHideDock; + } + + if ([NSApp respondsToSelector:@selector(setPresentationOptions:)]) + [NSApp setPresentationOptions:options]; + else +#endif + SetSystemUIMode(_isEndingFullscreen ? kUIModeNormal : kUIModeAllHidden, 0); +} + +- (void)_disableIdleDisplaySleep +{ + if (_idleDisplaySleepAssertion == kIOPMNullAssertionID) +#if defined(BUILDING_ON_LEOPARD) // IOPMAssertionCreateWithName is not defined in the 10.5 SDK + IOPMAssertionCreate(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, &_idleDisplaySleepAssertion); +#else // IOPMAssertionCreate is depreciated in > 10.5 + IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, CFSTR("WebKit playing a video fullscreen."), &_idleDisplaySleepAssertion); +#endif +} + +- (void)_enableIdleDisplaySleep +{ + if (_idleDisplaySleepAssertion != kIOPMNullAssertionID) { + IOPMAssertionRelease(_idleDisplaySleepAssertion); + _idleDisplaySleepAssertion = kIOPMNullAssertionID; + } +} + +- (void)_disableIdleSystemSleep +{ + if (_idleSystemSleepAssertion == kIOPMNullAssertionID) +#if defined(BUILDING_ON_LEOPARD) // IOPMAssertionCreateWithName is not defined in the 10.5 SDK + IOPMAssertionCreate(kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, &_idleSystemSleepAssertion); +#else // IOPMAssertionCreate is depreciated in > 10.5 + IOPMAssertionCreateWithName(kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, CFSTR("WebKit playing a video fullscreen."), &_idleSystemSleepAssertion); +#endif +} + +- (void)_enableIdleSystemSleep +{ + if (_idleSystemSleepAssertion != kIOPMNullAssertionID) { + IOPMAssertionRelease(_idleSystemSleepAssertion); + _idleSystemSleepAssertion = kIOPMNullAssertionID; + } +} + +- (void)_enableTickleTimer +{ + [_tickleTimer invalidate]; + [_tickleTimer release]; + _tickleTimer = [[NSTimer scheduledTimerWithTimeInterval:tickleTimerInterval target:self selector:@selector(_tickleTimerFired) userInfo:nil repeats:YES] retain]; +} + +- (void)_disableTickleTimer +{ + [_tickleTimer invalidate]; + [_tickleTimer release]; + _tickleTimer = nil; +} + +- (void)_tickleTimerFired +{ + UpdateSystemActivity(OverallAct); +} + +- (void)updatePowerAssertions +{ + float rate = 0; + if (_mediaElement && _mediaElement->platformMedia().type == WebCore::PlatformMedia::QTMovieType) + rate = [_mediaElement->platformMedia().media.qtMovie rate]; + + if (rate && !_isEndingFullscreen) { + [self _disableIdleSystemSleep]; + [self _disableIdleDisplaySleep]; + [self _enableTickleTimer]; + } else { + [self _enableIdleSystemSleep]; + [self _enableIdleDisplaySleep]; + [self _disableTickleTimer]; + } +} + +// MARK: - +// MARK: Window callback + +- (void)_requestExit +{ + if (_mediaElement) + _mediaElement->exitFullscreen(); + _forceDisableAnimation = NO; +} + +- (void)requestExitFullscreenWithAnimation:(BOOL)animation +{ + if (_isEndingFullscreen) + return; + + _forceDisableAnimation = !animation; + [self performSelector:@selector(_requestExit) withObject:nil afterDelay:0]; + +} + +- (void)requestExitFullscreen +{ + [self requestExitFullscreenWithAnimation:YES]; +} + +- (void)fadeHUDIn +{ + [_hudController fadeWindowIn]; +} + +// MARK: - +// MARK: QTMovie callbacks + +- (void)rateChanged:(NSNotification *)unusedNotification +{ + UNUSED_PARAM(unusedNotification); + [_hudController updateRate]; + [self updatePowerAssertions]; +} + +@end + +@implementation WebVideoFullscreenWindow + +- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag +{ + UNUSED_PARAM(aStyle); + self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag]; + if (!self) + return nil; + [self setOpaque:NO]; + [self setBackgroundColor:[NSColor clearColor]]; + [self setIgnoresMouseEvents:NO]; + [self setAcceptsMouseMovedEvents:YES]; + return self; +} + +- (void)dealloc +{ + ASSERT(!_fullscreenAnimation); + [super dealloc]; +} + +- (BOOL)resignFirstResponder +{ + return NO; +} + +- (BOOL)canBecomeKeyWindow +{ + return NO; +} + +- (void)mouseDown:(NSEvent *)theEvent +{ + UNUSED_PARAM(theEvent); +} + +- (void)cancelOperation:(id)sender +{ + UNUSED_PARAM(sender); + [[self windowController] requestExitFullscreen]; +} + +- (void)animatedResizeDidEnd +{ + // Call our windowController. + if (_controllerActionOnAnimationEnd) + [[self windowController] performSelector:_controllerActionOnAnimationEnd]; + _controllerActionOnAnimationEnd = NULL; +} + +// +// This function will animate a change of frame rectangle +// We support queuing animation, that means that we'll correctly +// interrupt the running animation, and queue the next one. +// +- (void)animateFromRect:(NSRect)startRect toRect:(NSRect)endRect withSubAnimation:(NSAnimation *)subAnimation controllerAction:(SEL)controllerAction +{ + _controllerActionOnAnimationEnd = controllerAction; + + BOOL wasAnimating = NO; + if (_fullscreenAnimation) { + wasAnimating = YES; + + // Interrupt any running animation. + [_fullscreenAnimation stopAnimation]; + + // Save the current rect to ensure a smooth transition. + startRect = [_fullscreenAnimation currentFrame]; + [_fullscreenAnimation release]; + _fullscreenAnimation = nil; + } + + if (NSIsEmptyRect(startRect) || NSIsEmptyRect(endRect)) { + // Fakely end the subanimation. + [subAnimation setCurrentProgress:1]; + // And remove the weak link to the window. + [subAnimation stopAnimation]; + + [self setFrame:endRect display:NO]; + [self makeKeyAndOrderFront:self]; + [self animatedResizeDidEnd]; + return; + } + + if (!wasAnimating) { + // We'll downscale the window during the animation based on the higher resolution rect + BOOL higherResolutionIsEndRect = startRect.size.width < endRect.size.width && startRect.size.height < endRect.size.height; + [self setFrame:higherResolutionIsEndRect ? endRect : startRect display:NO]; + } + + ASSERT(!_fullscreenAnimation); + _fullscreenAnimation = [[WebWindowScaleAnimation alloc] initWithHintedDuration:0.2 window:self initalFrame:startRect finalFrame:endRect]; + [_fullscreenAnimation setSubAnimation:subAnimation]; + [_fullscreenAnimation setDelegate:self]; + + // Make sure the animation has scaled the window before showing it. + [_fullscreenAnimation setCurrentProgress:0]; + [self makeKeyAndOrderFront:self]; + + [_fullscreenAnimation startAnimation]; +} + +- (void)animationDidEnd:(NSAnimation *)animation +{ + if (![NSThread isMainThread]) { + [self performSelectorOnMainThread:@selector(animationDidEnd:) withObject:animation waitUntilDone:NO]; + return; + } + if (animation != _fullscreenAnimation) + return; + + // The animation is not really over and was interrupted + // Don't send completion events. + if ([animation currentProgress] < 1.0) + return; + + // Ensure that animation (and subanimation) don't keep + // the weak reference to the window ivar that may be destroyed from + // now on. + [_fullscreenAnimation setWindow:nil]; + + [_fullscreenAnimation autorelease]; + _fullscreenAnimation = nil; + + [self animatedResizeDidEnd]; +} + +- (void)mouseMoved:(NSEvent *)theEvent +{ + UNUSED_PARAM(theEvent); + [[self windowController] fadeHUDIn]; +} + +@end + +#endif /* ENABLE(VIDEO) */ diff --git a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.h b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.h new file mode 100644 index 0000000..92bf776 --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if ENABLE(VIDEO) + +#import <Cocoa/Cocoa.h> + +namespace WebCore { + class HTMLMediaElement; +} + +@protocol WebVideoFullscreenHUDWindowControllerDelegate; + +@interface WebVideoFullscreenHUDWindowController : NSWindowController +{ + id <WebVideoFullscreenHUDWindowControllerDelegate> _delegate; + NSTimer *_timelineUpdateTimer; + NSTrackingArea *_area; + BOOL _mouseIsInHUD; + BOOL _isEndingFullscreen; + BOOL _isScrubbing; + + NSControl *_timeline; + NSTextField *_remainingTimeText; + NSTextField *_elapsedTimeText; + NSControl *_volumeSlider; + NSButton *_playButton; +} + +- (id <WebVideoFullscreenHUDWindowControllerDelegate>)delegate; +- (void)setDelegate:(id <WebVideoFullscreenHUDWindowControllerDelegate>)delegate; +- (void)fadeWindowIn; +- (void)fadeWindowOut; +- (void)closeWindow; +- (void)updateRate; + +@end + +@protocol WebVideoFullscreenHUDWindowControllerDelegate <NSObject> +- (void)requestExitFullscreen; +- (WebCore::HTMLMediaElement*)mediaElement; +@end + +#endif diff --git a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.mm b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.mm new file mode 100644 index 0000000..63f15a2 --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.mm @@ -0,0 +1,679 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "config.h" + +#if ENABLE(VIDEO) + +#import "WebVideoFullscreenHUDWindowController.h" + +#import "FloatConversion.h" +#import "WebCoreSystemInterface.h" +#import <WebCore/HTMLMediaElement.h> +#import <wtf/RetainPtr.h> +#import <wtf/UnusedParam.h> + +using namespace WebCore; +using namespace std; + +static inline CGFloat webkit_CGFloor(CGFloat value) +{ + if (sizeof(value) == sizeof(float)) + return floorf(value); + return floor(value); +} + +#define HAVE_MEDIA_CONTROL (!defined(BUILDING_ON_LEOPARD)) + +@interface WebVideoFullscreenHUDWindowController (Private) +#if !defined(BUILDING_ON_LEOPARD) +<NSWindowDelegate> +#endif + +- (void)updateTime; +- (void)timelinePositionChanged:(id)sender; +- (float)currentTime; +- (void)setCurrentTime:(float)currentTime; +- (double)duration; + +- (void)volumeChanged:(id)sender; +- (float)maxVolume; +- (float)volume; +- (void)setVolume:(float)volume; +- (void)decrementVolume; +- (void)incrementVolume; + +- (void)updatePlayButton; +- (void)togglePlaying:(id)sender; +- (BOOL)playing; +- (void)setPlaying:(BOOL)playing; + +- (void)rewind:(id)sender; +- (void)fastForward:(id)sender; + +- (NSString *)remainingTimeText; +- (NSString *)elapsedTimeText; + +- (void)exitFullscreen:(id)sender; +@end + +@interface WebVideoFullscreenHUDWindow : NSWindow +@end + +@implementation WebVideoFullscreenHUDWindow + +- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag +{ + UNUSED_PARAM(aStyle); + self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag]; + if (!self) + return nil; + + [self setOpaque:NO]; + [self setBackgroundColor:[NSColor clearColor]]; + [self setLevel:NSPopUpMenuWindowLevel]; + [self setAcceptsMouseMovedEvents:YES]; + [self setIgnoresMouseEvents:NO]; + [self setMovableByWindowBackground:YES]; + + return self; +} + +- (BOOL)canBecomeKeyWindow +{ + return YES; +} + +- (void)cancelOperation:(id)sender +{ + UNUSED_PARAM(sender); + [[self windowController] exitFullscreen:self]; +} + +- (void)center +{ + NSRect hudFrame = [self frame]; + NSRect screenFrame = [[NSScreen mainScreen] frame]; + [self setFrameTopLeftPoint:NSMakePoint(screenFrame.origin.x + (screenFrame.size.width - hudFrame.size.width) / 2, + screenFrame.origin.y + (screenFrame.size.height - hudFrame.size.height) / 6)]; +} + +- (void)keyDown:(NSEvent *)event +{ + [super keyDown:event]; + [[self windowController] fadeWindowIn]; +} + +- (BOOL)resignFirstResponder +{ + return NO; +} + +- (BOOL)performKeyEquivalent:(NSEvent *)event +{ + // Block all command key events while the fullscreen window is up. + if ([event type] != NSKeyDown) + return NO; + + if (!([event modifierFlags] & NSCommandKeyMask)) + return NO; + + return YES; +} + +@end + +static const CGFloat windowHeight = 59; +static const CGFloat windowWidth = 438; + +static const NSTimeInterval HUDWindowFadeOutDelay = 3; + +@implementation WebVideoFullscreenHUDWindowController + +- (id)init +{ + NSWindow *window = [[WebVideoFullscreenHUDWindow alloc] initWithContentRect:NSMakeRect(0, 0, windowWidth, windowHeight) + styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]; + self = [super initWithWindow:window]; + [window setDelegate:self]; + [window release]; + if (!self) + return nil; + [self windowDidLoad]; + return self; +} + +- (void)dealloc +{ + ASSERT(!_timelineUpdateTimer); + ASSERT(!_area); + ASSERT(!_isScrubbing); + [_timeline release]; + [_remainingTimeText release]; + [_elapsedTimeText release]; + [_volumeSlider release]; + [_playButton release]; + [super dealloc]; +} + +- (void)setArea:(NSTrackingArea *)area +{ + if (area == _area) + return; + [_area release]; + _area = [area retain]; +} + +- (void)keyDown:(NSEvent *)event +{ + NSString *charactersIgnoringModifiers = [event charactersIgnoringModifiers]; + if ([charactersIgnoringModifiers length] == 1) { + switch ([charactersIgnoringModifiers characterAtIndex:0]) { + case ' ': + [self togglePlaying:nil]; + return; + case NSUpArrowFunctionKey: + if ([event modifierFlags] & NSAlternateKeyMask) + [self setVolume:[self maxVolume]]; + else + [self incrementVolume]; + return; + case NSDownArrowFunctionKey: + if ([event modifierFlags] & NSAlternateKeyMask) + [self setVolume:0]; + else + [self decrementVolume]; + return; + default: + break; + } + } + + [super keyDown:event]; +} + +- (id <WebVideoFullscreenHUDWindowControllerDelegate>)delegate +{ + return _delegate; +} + +- (void)setDelegate:(id <WebVideoFullscreenHUDWindowControllerDelegate>)delegate +{ + _delegate = delegate; +} + +- (void)scheduleTimeUpdate +{ + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(unscheduleTimeUpdate) object:self]; + + // First, update right away, then schedule future update + [self updateTime]; + [self updatePlayButton]; + + [_timelineUpdateTimer invalidate]; + [_timelineUpdateTimer release]; + + // Note that this creates a retain cycle between the window and us. + _timelineUpdateTimer = [[NSTimer timerWithTimeInterval:0.25 target:self selector:@selector(updateTime) userInfo:nil repeats:YES] retain]; + [[NSRunLoop currentRunLoop] addTimer:_timelineUpdateTimer forMode:NSRunLoopCommonModes]; +} + +- (void)unscheduleTimeUpdate +{ + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(unscheduleTimeUpdate) object:nil]; + + [_timelineUpdateTimer invalidate]; + [_timelineUpdateTimer release]; + _timelineUpdateTimer = nil; +} + +- (void)fadeWindowIn +{ + NSWindow *window = [self window]; + if (![window isVisible]) + [window setAlphaValue:0]; + + [window makeKeyAndOrderFront:self]; + [[window animator] setAlphaValue:1]; + [self scheduleTimeUpdate]; + + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(fadeWindowOut) object:nil]; + if (!_mouseIsInHUD && [self playing]) // Don't fade out when paused. + [self performSelector:@selector(fadeWindowOut) withObject:nil afterDelay:HUDWindowFadeOutDelay]; +} + +- (void)fadeWindowOut +{ + [NSCursor setHiddenUntilMouseMoves:YES]; + [[[self window] animator] setAlphaValue:0]; + [self performSelector:@selector(unscheduleTimeUpdate) withObject:nil afterDelay:1]; +} + +- (void)closeWindow +{ + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(fadeWindowOut) object:nil]; + [self unscheduleTimeUpdate]; + NSWindow *window = [self window]; + [[window contentView] removeTrackingArea:_area]; + [self setArea:nil]; + [window close]; + [window setDelegate:nil]; + [self setWindow:nil]; +} + +#ifndef HAVE_MEDIA_CONTROL +// FIXME: This code is never compiled, because HAVE_MEDIA_CONTROL is always defined to something, even on Leopard. +// FIXME: Values in this enum have a different order than ones in WKMediaUIControlType. +enum { + WKMediaUIControlPlayPauseButton, + WKMediaUIControlRewindButton, + WKMediaUIControlFastForwardButton, + WKMediaUIControlExitFullscreenButton, + WKMediaUIControlVolumeDownButton, + WKMediaUIControlSlider, + WKMediaUIControlVolumeUpButton, + WKMediaUIControlTimeline +}; +#endif + +static NSControl *createControlWithMediaUIControlType(int controlType, NSRect frame) +{ +#ifdef HAVE_MEDIA_CONTROL + NSControl *control = wkCreateMediaUIControl(controlType); + [control setFrame:frame]; + return control; +#else + // FIXME: This code is never compiled, because HAVE_MEDIA_CONTROL is always defined to something, even on Leopard. + if (controlType == wkMediaUIControlSlider) + return [[NSSlider alloc] initWithFrame:frame]; + return [[NSControl alloc] initWithFrame:frame]; +#endif +} + +static NSTextField *createTimeTextField(NSRect frame) +{ + NSTextField *textField = [[NSTextField alloc] initWithFrame:frame]; + [textField setTextColor:[NSColor whiteColor]]; + [textField setBordered:NO]; + [textField setFont:[NSFont boldSystemFontOfSize:10]]; + [textField setDrawsBackground:NO]; + [textField setBezeled:NO]; + [textField setEditable:NO]; + [textField setSelectable:NO]; + return textField; +} + +- (void)windowDidLoad +{ + static const CGFloat horizontalMargin = 10; + static const CGFloat playButtonWidth = 41; + static const CGFloat playButtonHeight = 35; + static const CGFloat playButtonTopMargin = 4; + static const CGFloat volumeSliderWidth = 50; + static const CGFloat volumeSliderHeight = 13; + static const CGFloat volumeButtonWidth = 18; + static const CGFloat volumeButtonHeight = 16; + static const CGFloat volumeUpButtonLeftMargin = 4; + static const CGFloat volumeControlsTopMargin = 13; + static const CGFloat exitFullscreenButtonWidth = 25; + static const CGFloat exitFullscreenButtonHeight = 21; + static const CGFloat exitFullscreenButtonTopMargin = 11; + static const CGFloat timelineWidth = 315; + static const CGFloat timelineHeight = 14; + static const CGFloat timelineBottomMargin = 7; + static const CGFloat timeTextFieldWidth = 54; + static const CGFloat timeTextFieldHeight = 13; + static const CGFloat timeTextFieldHorizontalMargin = 7; + + NSWindow *window = [self window]; + ASSERT(window); + +#ifdef HAVE_MEDIA_CONTROL + NSView *background = wkCreateMediaUIBackgroundView(); +#else + // FIXME: This code is never compiled, because HAVE_MEDIA_CONTROL is always defined to something, even on Leopard. + NSView *background = [[NSView alloc] init]; +#endif + [window setContentView:background]; + _area = [[NSTrackingArea alloc] initWithRect:[background bounds] options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways owner:self userInfo:nil]; + [background addTrackingArea:_area]; + [background release]; + + NSView *contentView = [window contentView]; + + CGFloat center = webkit_CGFloor((windowWidth - playButtonWidth) / 2); + _playButton = (NSButton *)createControlWithMediaUIControlType(wkMediaUIControlPlayPauseButton, NSMakeRect(center, windowHeight - playButtonTopMargin - playButtonHeight, playButtonWidth, playButtonHeight)); + ASSERT([_playButton isKindOfClass:[NSButton class]]); + [_playButton setTarget:self]; + [_playButton setAction:@selector(togglePlaying:)]; + [contentView addSubview:_playButton]; + + CGFloat closeToRight = windowWidth - horizontalMargin - exitFullscreenButtonWidth; + NSControl *exitFullscreenButton = createControlWithMediaUIControlType(wkMediaUIControlExitFullscreenButton, NSMakeRect(closeToRight, windowHeight - exitFullscreenButtonTopMargin - exitFullscreenButtonHeight, exitFullscreenButtonWidth, exitFullscreenButtonHeight)); + [exitFullscreenButton setAction:@selector(exitFullscreen:)]; + [exitFullscreenButton setTarget:self]; + [contentView addSubview:exitFullscreenButton]; + [exitFullscreenButton release]; + + CGFloat volumeControlsBottom = windowHeight - volumeControlsTopMargin - volumeButtonHeight; + CGFloat left = horizontalMargin; + NSControl *volumeDownButton = createControlWithMediaUIControlType(wkMediaUIControlVolumeDownButton, NSMakeRect(left, volumeControlsBottom, volumeButtonWidth, volumeButtonHeight)); + [contentView addSubview:volumeDownButton]; + [volumeDownButton setTarget:self]; + [volumeDownButton setAction:@selector(setVolumeToZero:)]; + [volumeDownButton release]; + + left += volumeButtonWidth; + _volumeSlider = createControlWithMediaUIControlType(wkMediaUIControlSlider, NSMakeRect(left, volumeControlsBottom + webkit_CGFloor((volumeButtonHeight - volumeSliderHeight) / 2), volumeSliderWidth, volumeSliderHeight)); + [_volumeSlider setValue:[NSNumber numberWithDouble:[self maxVolume]] forKey:@"maxValue"]; + [_volumeSlider setTarget:self]; + [_volumeSlider setAction:@selector(volumeChanged:)]; + [contentView addSubview:_volumeSlider]; + + left += volumeSliderWidth + volumeUpButtonLeftMargin; + NSControl *volumeUpButton = createControlWithMediaUIControlType(wkMediaUIControlVolumeUpButton, NSMakeRect(left, volumeControlsBottom, volumeButtonWidth, volumeButtonHeight)); + [volumeUpButton setTarget:self]; + [volumeUpButton setAction:@selector(setVolumeToMaximum:)]; + [contentView addSubview:volumeUpButton]; + [volumeUpButton release]; + +#ifdef HAVE_MEDIA_CONTROL + _timeline = wkCreateMediaUIControl(wkMediaUIControlTimeline); +#else + // FIXME: This code is never compiled, because HAVE_MEDIA_CONTROL is always defined to something, even on Leopard. + _timeline = [[NSSlider alloc] init]; +#endif + [_timeline setTarget:self]; + [_timeline setAction:@selector(timelinePositionChanged:)]; + [_timeline setFrame:NSMakeRect(webkit_CGFloor((windowWidth - timelineWidth) / 2), timelineBottomMargin, timelineWidth, timelineHeight)]; + [contentView addSubview:_timeline]; + + _elapsedTimeText = createTimeTextField(NSMakeRect(timeTextFieldHorizontalMargin, timelineBottomMargin, timeTextFieldWidth, timeTextFieldHeight)); + [_elapsedTimeText setAlignment:NSLeftTextAlignment]; + [contentView addSubview:_elapsedTimeText]; + + _remainingTimeText = createTimeTextField(NSMakeRect(windowWidth - timeTextFieldHorizontalMargin - timeTextFieldWidth, timelineBottomMargin, timeTextFieldWidth, timeTextFieldHeight)); + [_remainingTimeText setAlignment:NSRightTextAlignment]; + [contentView addSubview:_remainingTimeText]; + + [window recalculateKeyViewLoop]; + [window setInitialFirstResponder:_playButton]; + [window center]; +} + +- (void)updateVolume +{ + [_volumeSlider setFloatValue:[self volume]]; +} + +- (void)updateTime +{ + [self updateVolume]; + + [_timeline setFloatValue:[self currentTime]]; + [_timeline setValue:[NSNumber numberWithDouble:[self duration]] forKey:@"maxValue"]; + + [_remainingTimeText setStringValue:[self remainingTimeText]]; + [_elapsedTimeText setStringValue:[self elapsedTimeText]]; +} + +- (void)endScrubbing +{ + ASSERT(_isScrubbing); + _isScrubbing = NO; + if (HTMLMediaElement* mediaElement = [_delegate mediaElement]) + mediaElement->endScrubbing(); +} + +- (void)timelinePositionChanged:(id)sender +{ + UNUSED_PARAM(sender); + [self setCurrentTime:[_timeline floatValue]]; + if (!_isScrubbing) { + _isScrubbing = YES; + if (HTMLMediaElement* mediaElement = [_delegate mediaElement]) + mediaElement->beginScrubbing(); + static NSArray *endScrubbingModes = [[NSArray alloc] initWithObjects:NSDefaultRunLoopMode, NSModalPanelRunLoopMode, nil]; + // Schedule -endScrubbing for when leaving mouse tracking mode. + [[NSRunLoop currentRunLoop] performSelector:@selector(endScrubbing) target:self argument:nil order:0 modes:endScrubbingModes]; + } +} + +- (float)currentTime +{ + return [_delegate mediaElement] ? [_delegate mediaElement]->currentTime() : 0; +} + +- (void)setCurrentTime:(float)currentTime +{ + if (![_delegate mediaElement]) + return; + WebCore::ExceptionCode e; + [_delegate mediaElement]->setCurrentTime(currentTime, e); + [self updateTime]; +} + +- (double)duration +{ + return [_delegate mediaElement] ? [_delegate mediaElement]->duration() : 0; +} + +- (float)maxVolume +{ + // Set the volume slider resolution + return 100; +} + +- (void)volumeChanged:(id)sender +{ + UNUSED_PARAM(sender); + [self setVolume:[_volumeSlider floatValue]]; +} + +- (void)setVolumeToZero:(id)sender +{ + UNUSED_PARAM(sender); + [self setVolume:0]; +} + +- (void)setVolumeToMaximum:(id)sender +{ + UNUSED_PARAM(sender); + [self setVolume:[self maxVolume]]; +} + +- (void)decrementVolume +{ + if (![_delegate mediaElement]) + return; + + float volume = [self volume] - 10; + [self setVolume:MAX(volume, 0)]; +} + +- (void)incrementVolume +{ + if (![_delegate mediaElement]) + return; + + float volume = [self volume] + 10; + [self setVolume:min(volume, [self maxVolume])]; +} + +- (float)volume +{ + return [_delegate mediaElement] ? [_delegate mediaElement]->volume() * [self maxVolume] : 0; +} + +- (void)setVolume:(float)volume +{ + if (![_delegate mediaElement]) + return; + WebCore::ExceptionCode e; + if ([_delegate mediaElement]->muted()) + [_delegate mediaElement]->setMuted(false); + [_delegate mediaElement]->setVolume(volume / [self maxVolume], e); + [self updateVolume]; +} + +- (void)updatePlayButton +{ + [_playButton setIntValue:[self playing]]; +} + +- (void)updateRate +{ + BOOL playing = [self playing]; + + // Keep the HUD visible when paused. + if (!playing) + [self fadeWindowIn]; + else if (!_mouseIsInHUD) { + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(fadeWindowOut) object:nil]; + [self performSelector:@selector(fadeWindowOut) withObject:nil afterDelay:HUDWindowFadeOutDelay]; + } + [self updatePlayButton]; +} + +- (void)togglePlaying:(id)sender +{ + UNUSED_PARAM(sender); + [self setPlaying:![self playing]]; +} + +- (BOOL)playing +{ + HTMLMediaElement* mediaElement = [_delegate mediaElement]; + if (!mediaElement) + return NO; + + return !mediaElement->canPlay(); +} + +- (void)setPlaying:(BOOL)playing +{ + HTMLMediaElement* mediaElement = [_delegate mediaElement]; + + if (!mediaElement) + return; + + if (playing) + mediaElement->play(mediaElement->processingUserGesture()); + else + mediaElement->pause(mediaElement->processingUserGesture()); +} + +static NSString *timeToString(double time) +{ + ASSERT_ARG(time, time >= 0); + + if (!isfinite(time)) + time = 0; + + int seconds = narrowPrecisionToFloat(abs(time)); + int hours = seconds / (60 * 60); + int minutes = (seconds / 60) % 60; + seconds %= 60; + + if (hours) + return [NSString stringWithFormat:@"%d:%02d:%02d", hours, minutes, seconds]; + + return [NSString stringWithFormat:@"%02d:%02d", minutes, seconds]; +} + +- (NSString *)remainingTimeText +{ + HTMLMediaElement* mediaElement = [_delegate mediaElement]; + if (!mediaElement) + return @""; + + return [@"-" stringByAppendingString:timeToString(mediaElement->duration() - mediaElement->currentTime())]; +} + +- (NSString *)elapsedTimeText +{ + if (![_delegate mediaElement]) + return @""; + + return timeToString([_delegate mediaElement]->currentTime()); +} + +// MARK: NSResponder + +- (void)mouseEntered:(NSEvent *)theEvent +{ + UNUSED_PARAM(theEvent); + // Make sure the HUD won't be hidden from now + _mouseIsInHUD = YES; + [self fadeWindowIn]; +} + +- (void)mouseExited:(NSEvent *)theEvent +{ + UNUSED_PARAM(theEvent); + _mouseIsInHUD = NO; + [self fadeWindowIn]; +} + +- (void)rewind:(id)sender +{ + UNUSED_PARAM(sender); + if (![_delegate mediaElement]) + return; + [_delegate mediaElement]->rewind(30); +} + +- (void)fastForward:(id)sender +{ + UNUSED_PARAM(sender); + if (![_delegate mediaElement]) + return; +} + +- (void)exitFullscreen:(id)sender +{ + UNUSED_PARAM(sender); + if (_isEndingFullscreen) + return; + _isEndingFullscreen = YES; + [_delegate requestExitFullscreen]; +} + +// MARK: NSWindowDelegate + +- (void)windowDidExpose:(NSNotification *)notification +{ + UNUSED_PARAM(notification); + [self scheduleTimeUpdate]; +} + +- (void)windowDidClose:(NSNotification *)notification +{ + UNUSED_PARAM(notification); + [self unscheduleTimeUpdate]; +} + +@end + +#endif diff --git a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebWindowAnimation.h b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebWindowAnimation.h new file mode 100644 index 0000000..ecf975b --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebWindowAnimation.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import <Cocoa/Cocoa.h> + +@interface WebWindowScaleAnimation : NSAnimation { +@private + NSRect _initialFrame, _finalFrame, _realFrame; + NSWindow *_window; // (assign) + NSAnimation *_subAnimation; // (retain) + NSTimeInterval _hintedDuration; +} +- (id)initWithHintedDuration:(NSTimeInterval)duration window:(NSWindow *)window initalFrame:(NSRect)initialFrame finalFrame:(NSRect)finalFrame; + +- (void)setSubAnimation:(NSAnimation *)animation; + +- (NSRect)currentFrame; + +// Be sure to call setWindow:nil to clear the weak link _window when appropriate +- (void)setWindow:(NSWindow *)window; +@end + + +@interface WebWindowFadeAnimation : NSAnimation { +@private + CGFloat _initialAlpha, _finalAlpha; + NSWindow *_window; // (assign) + BOOL _isStopped; + +} +- (id)initWithDuration:(NSTimeInterval)duration window:(NSWindow *)window initialAlpha:(CGFloat)initialAlpha finalAlpha:(CGFloat)finalAlpha; + +- (CGFloat)currentAlpha; + +// Be sure to call setWindow:nil to clear the weak link _window when appropriate +- (void)setWindow:(NSWindow *)window; +@end diff --git a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebWindowAnimation.mm b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebWindowAnimation.mm new file mode 100644 index 0000000..1b11894 --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebWindowAnimation.mm @@ -0,0 +1,234 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "config.h" + +#import "WebWindowAnimation.h" + +#import "FloatConversion.h" +#import "WebCoreSystemInterface.h" +#import <wtf/Assertions.h> +#import <wtf/UnusedParam.h> + +using namespace WebCore; + +static const CGFloat slowMotionFactor = 10; + +static NSTimeInterval WebWindowAnimationDurationFromDuration(NSTimeInterval duration) +{ + return ([[NSApp currentEvent] modifierFlags] & NSShiftKeyMask) ? duration * slowMotionFactor : duration; +} + +static NSRect scaledRect(NSRect _initialFrame, NSRect _finalFrame, CGFloat factor) +{ + NSRect currentRect = _initialFrame; + currentRect.origin.x += (NSMinX(_finalFrame) - NSMinX(_initialFrame)) * factor; + currentRect.origin.y += (NSMinY(_finalFrame) - NSMinY(_initialFrame)) * factor; + currentRect.size.width += (NSWidth(_finalFrame) - NSWidth(_initialFrame)) * factor; + currentRect.size.height += (NSHeight(_finalFrame) - NSHeight(_initialFrame)) * factor; + return currentRect; +} + +static CGFloat squaredDistance(NSPoint point1, NSPoint point2) +{ + CGFloat deltaX = point1.x - point2.x; + CGFloat deltaY = point1.y - point2.y; + return deltaX * deltaX + deltaY * deltaY; +} + +@implementation WebWindowScaleAnimation + +- (id)init +{ + self = [super init]; + if (!self) + return nil; + [self setAnimationBlockingMode:NSAnimationNonblockingThreaded]; + [self setFrameRate:60]; + return self; +} + +- (id)initWithHintedDuration:(NSTimeInterval)duration window:(NSWindow *)window initalFrame:(NSRect)initialFrame finalFrame:(NSRect)finalFrame +{ + self = [self init]; + if (!self) + return nil; + _hintedDuration = duration; + _window = window; + _initialFrame = initialFrame; + _finalFrame = finalFrame; + _realFrame = [window frame]; + return self; +} + +- (void) dealloc +{ + [_subAnimation release]; + [super dealloc]; +} + +- (void)setDuration:(NSTimeInterval)duration +{ + [super setDuration:WebWindowAnimationDurationFromDuration(duration)]; +} + +- (void)setWindow:(NSWindow *)window +{ + _window = window; +} + +- (float)currentValue +{ + return narrowPrecisionToFloat(0.5 - 0.5 * cos(M_PI * (1 - [self currentProgress]))); +} + +- (NSRect)currentFrame +{ + return scaledRect(_finalFrame, _initialFrame, [self currentValue]); +} + +- (void)setCurrentProgress:(NSAnimationProgress)progress +{ + if (!_window) + return; + + [super setCurrentProgress:progress]; + + NSRect currentRect = [self currentFrame]; + wkWindowSetScaledFrame(_window, currentRect, _realFrame); + [_subAnimation setCurrentProgress:progress]; +} + +- (void)setSubAnimation:(NSAnimation *)animation +{ + id oldAnimation = _subAnimation; + _subAnimation = [animation retain]; + [oldAnimation release]; +} + +- (NSTimeInterval)additionalDurationNeededToReachFinalFrame +{ + static const CGFloat maxAdditionalDuration = 1; + static const CGFloat speedFactor = 0.0001f; + + CGFloat maxDist = squaredDistance(_initialFrame.origin, _finalFrame.origin); + CGFloat dist; + + dist = squaredDistance(NSMakePoint(NSMaxX(_initialFrame), NSMinY(_initialFrame)), NSMakePoint(NSMaxX(_finalFrame), NSMinY(_finalFrame))); + if (dist > maxDist) + maxDist = dist; + + dist = squaredDistance(NSMakePoint(NSMaxX(_initialFrame), NSMaxY(_initialFrame)), NSMakePoint(NSMaxX(_finalFrame), NSMaxY(_finalFrame))); + if (dist > maxDist) + maxDist = dist; + + dist = squaredDistance(NSMakePoint(NSMinX(_initialFrame), NSMinY(_initialFrame)), NSMakePoint(NSMinX(_finalFrame), NSMinY(_finalFrame))); + if (dist > maxDist) + maxDist = dist; + + return MIN(sqrt(maxDist) * speedFactor, maxAdditionalDuration); +} + +- (void)startAnimation +{ + // Compute extra time + if (_hintedDuration) + [self setDuration:_hintedDuration + [self additionalDurationNeededToReachFinalFrame]]; + [super startAnimation]; +} + +- (void)stopAnimation +{ + _window = nil; + [super stopAnimation]; + [_subAnimation stopAnimation]; +} + +@end + +@implementation WebWindowFadeAnimation + +- (id)init +{ + self = [super init]; + if (!self) + return nil; + [self setAnimationBlockingMode:NSAnimationNonblockingThreaded]; + [self setFrameRate:60]; + [self setAnimationCurve:NSAnimationEaseInOut]; + return self; +} + +- (id)initWithDuration:(NSTimeInterval)duration window:(NSWindow *)window initialAlpha:(CGFloat)initialAlpha finalAlpha:(CGFloat)finalAlpha +{ + UNUSED_PARAM(duration); + self = [self init]; + if (!self) + return nil; + _window = window; + _initialAlpha = initialAlpha; + _finalAlpha = finalAlpha; + return self; +} + +- (void)setDuration:(NSTimeInterval)duration +{ + [super setDuration:WebWindowAnimationDurationFromDuration(duration)]; +} + +- (CGFloat)currentAlpha +{ + return MAX(0, MIN(1, _initialAlpha + [self currentValue] * (_finalAlpha - _initialAlpha))); +} + +- (void)setCurrentProgress:(NSAnimationProgress)progress +{ + if (_isStopped) + return; + + ASSERT(_window); + [super setCurrentProgress:progress]; + + wkWindowSetAlpha(_window, [self currentAlpha]); +} + +- (void)setWindow:(NSWindow*)window +{ + _window = window; +} + +- (void)stopAnimation +{ + // This is relevant when we are a sub animation of a scale animation. + // In this case we are hosted in the animated thread of the parent + // and even after [super stopAnimation], the parent might call + // setCurrrentProgress. + _isStopped = YES; + + [super stopAnimation]; +} + +@end + diff --git a/src/3rdparty/webkit/Source/WebCore/platform/network/HTTPHeaderMap.cpp b/src/3rdparty/webkit/Source/WebCore/platform/network/HTTPHeaderMap.cpp index 59cbcbe..3541e1e 100644 --- a/src/3rdparty/webkit/Source/WebCore/platform/network/HTTPHeaderMap.cpp +++ b/src/3rdparty/webkit/Source/WebCore/platform/network/HTTPHeaderMap.cpp @@ -97,20 +97,32 @@ struct CaseFoldingCStringTranslator { String HTTPHeaderMap::get(const char* name) const { +#if COMPILER(WINSCW) + return HashMap::get((AtomicString)(name)); +#else const_iterator i = find<const char*, CaseFoldingCStringTranslator>(name); if (i == end()) return String(); return i->second; +#endif } bool HTTPHeaderMap::contains(const char* name) const { +#if COMPILER(WINSCW) + return HashMap::contains((AtomicString)(name)); +#else return find<const char*, CaseFoldingCStringTranslator>(name) != end(); +#endif } pair<HTTPHeaderMap::iterator, bool> HTTPHeaderMap::add(const char* name, const String& value) { +#if COMPILER(WINSCW) + return HashMap::add((AtomicString)(name), value); +#else return HashMap<AtomicString, String, CaseFoldingHash>::add<const char*, CaseFoldingCStringTranslator>(name, value); +#endif } } // namespace WebCore diff --git a/src/3rdparty/webkit/Source/WebCore/platform/qt/WebCoreSystemInterface.h b/src/3rdparty/webkit/Source/WebCore/platform/qt/WebCoreSystemInterface.h index bd530de..40cb449 100644 --- a/src/3rdparty/webkit/Source/WebCore/platform/qt/WebCoreSystemInterface.h +++ b/src/3rdparty/webkit/Source/WebCore/platform/qt/WebCoreSystemInterface.h @@ -38,14 +38,20 @@ typedef struct _NSRect NSRect; #ifdef __OBJC__ @class NSArray; +@class NSControl; @class NSString; @class NSURL; +@class NSView; +@class NSWindow; @class QTMovie; @class QTMovieView; #else class NSArray; +class NSControl; class NSString; class NSURL; +class NSView; +class NSWindow; class QTMovie; class QTMovieView; #endif @@ -53,6 +59,8 @@ class QTMovieView; extern "C" { // In alphabetical order. +extern NSView *(*wkCreateMediaUIBackgroundView)(void); +extern NSControl *(*wkCreateMediaUIControl)(int); extern unsigned (*wkQTIncludeOnlyModernMediaFileTypes)(void); extern int (*wkQTMovieDataRate)(QTMovie*); extern void (*wkQTMovieDisableComponent)(uint32_t[5]); @@ -68,6 +76,8 @@ extern void (*wkQTMovieViewSetDrawSynchronously)(QTMovieView*, BOOL); extern NSArray *(*wkQTGetSitesInMediaDownloadCache)(); extern void (*wkQTClearMediaDownloadCacheForSite)(NSString *site); extern void (*wkQTClearMediaDownloadCache)(); +extern void (*wkWindowSetAlpha)(NSWindow *, float); +extern void (*wkWindowSetScaledFrame)(NSWindow *, NSRect, NSRect); } diff --git a/src/3rdparty/webkit/Source/WebCore/platform/qt/WebCoreSystemInterface.mm b/src/3rdparty/webkit/Source/WebCore/platform/qt/WebCoreSystemInterface.mm index 3e26671..868cbd9 100644 --- a/src/3rdparty/webkit/Source/WebCore/platform/qt/WebCoreSystemInterface.mm +++ b/src/3rdparty/webkit/Source/WebCore/platform/qt/WebCoreSystemInterface.mm @@ -27,6 +27,8 @@ #import "WebCoreSystemInterface.h" #import <Foundation/Foundation.h> +NSView *(*wkCreateMediaUIBackgroundView)(void); +NSControl *(*wkCreateMediaUIControl)(int); unsigned (*wkQTIncludeOnlyModernMediaFileTypes)(void); int (*wkQTMovieDataRate)(QTMovie*); void (*wkQTMovieDisableComponent)(uint32_t[5]); @@ -42,4 +44,6 @@ void (*wkQTMovieViewSetDrawSynchronously)(QTMovieView*, BOOL); NSArray *(*wkQTGetSitesInMediaDownloadCache)(); void (*wkQTClearMediaDownloadCacheForSite)(NSString *site); void (*wkQTClearMediaDownloadCache)(); +void (*wkWindowSetAlpha)(NSWindow *, float); +void (*wkWindowSetScaledFrame)(NSWindow *, NSRect, NSRect); diff --git a/src/3rdparty/webkit/Source/WebCore/plugins/PluginView.cpp b/src/3rdparty/webkit/Source/WebCore/plugins/PluginView.cpp index fd2b0b0..b020946 100644 --- a/src/3rdparty/webkit/Source/WebCore/plugins/PluginView.cpp +++ b/src/3rdparty/webkit/Source/WebCore/plugins/PluginView.cpp @@ -909,8 +909,9 @@ void PluginView::focusPluginElement() { // Focus the plugin if (Page* page = m_parentFrame->page()) - page->focusController()->setFocusedFrame(m_parentFrame); - m_parentFrame->document()->setFocusedNode(m_element); + page->focusController()->setFocusedNode(m_element, m_parentFrame); + else + m_parentFrame->document()->setFocusedNode(m_element); } void PluginView::didReceiveResponse(const ResourceResponse& response) diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlock.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlock.cpp index a212dd4..a4d666e 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlock.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlock.cpp @@ -184,7 +184,7 @@ void RenderBlock::destroy() childBox->remove(); } } - } else if (isInline() && parent()) + } else if (parent()) parent()->dirtyLinesFromChangedChild(this); } diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlockLineLayout.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlockLineLayout.cpp index b0b10e3..2e92801 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlockLineLayout.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlockLineLayout.cpp @@ -1768,7 +1768,7 @@ void TrailingObjects::updateMidpointsForTrailingBoxes(LineMidpointState& lineMid if (lineMidpointState.numMidpoints % 2) { // Find the trailing space object's midpoint. int trailingSpaceMidpoint = lineMidpointState.numMidpoints - 1; - for ( ; trailingSpaceMidpoint >= 0 && lineMidpointState.midpoints[trailingSpaceMidpoint].m_obj != m_whitespace; --trailingSpaceMidpoint) { } + for ( ; trailingSpaceMidpoint > 0 && lineMidpointState.midpoints[trailingSpaceMidpoint].m_obj != m_whitespace; --trailingSpaceMidpoint) { } ASSERT(trailingSpaceMidpoint >= 0); if (collapseFirstSpace == CollapseFirstSpace) lineMidpointState.midpoints[trailingSpaceMidpoint].m_pos--; diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBox.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBox.cpp index 0b33abe..9c2aa48 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBox.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBox.cpp @@ -3200,7 +3200,7 @@ bool RenderBox::shrinkToAvoidFloats() const bool RenderBox::avoidsFloats() const { - return isReplaced() || hasOverflowClip() || isHR() || isLegend() || isWritingModeRoot(); + return isReplaced() || hasOverflowClip() || isHR() || isLegend() || isWritingModeRoot() || isDeprecatedFlexItem(); } void RenderBox::addShadowOverflow() diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBox.h b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBox.h index 258f213..08dc922 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBox.h +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBox.h @@ -378,6 +378,8 @@ public: virtual void markForPaginationRelayoutIfNeeded() { } bool isWritingModeRoot() const { return !parent() || parent()->style()->writingMode() != style()->writingMode(); } + + bool isDeprecatedFlexItem() const { return !isInline() && !isFloatingOrPositioned() && parent() && parent()->isFlexibleBox(); } virtual int lineHeight(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const; virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const; diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderFlexibleBox.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderFlexibleBox.cpp index b55bd9d..2a3b32c 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderFlexibleBox.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderFlexibleBox.cpp @@ -90,8 +90,8 @@ public: current = forward ? current->nextSiblingBox() : current->previousSiblingBox(); if (current && current->style()->boxOrdinalGroup() > lastOrdinal) lastOrdinal = current->style()->boxOrdinalGroup(); - } while (!current || current->style()->boxOrdinalGroup() != currentOrdinal || - current->style()->visibility() == COLLAPSE); + } while (!current || (!current->isAnonymous() + && (current->style()->boxOrdinalGroup() != currentOrdinal || current->style()->visibility() == COLLAPSE))); return current; } diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderIFrame.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderIFrame.cpp index 366d9e7..1ce79d4 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderIFrame.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderIFrame.cpp @@ -102,8 +102,9 @@ bool RenderIFrame::flattenFrame() if (!view) return false; - // Do not flatten offscreen inner frames during frame flattening. - return absoluteBoundingBoxRect().intersects(IntRect(IntPoint(0, 0), view->contentsSize())); + // Do not flatten offscreen inner frames during frame flattening, as flattening might make them visible. + IntRect boundingRect = absoluteBoundingBoxRect(); + return boundingRect.maxX() > 0 && boundingRect.maxY() > 0; } void RenderIFrame::layout() diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderInline.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderInline.cpp index 5fb8683..5bd726d 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderInline.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderInline.cpp @@ -99,8 +99,7 @@ void RenderInline::destroy() for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) box->remove(); } - } else if (isInline() && parent()) - parent()->dirtyLinesFromChangedChild(this); + } } m_lineBoxes.deleteLineBoxes(renderArena()); @@ -845,11 +844,9 @@ InlineBox* RenderInline::culledInlineFirstLineBox() const // We want to get the margin box in the inline direction, and then use our font ascent/descent in the block // direction (aligned to the root box's baseline). - if (curr->isBox()) { - RenderBox* currBox = toRenderBox(curr); - if (currBox->inlineBoxWrapper()) - return currBox->inlineBoxWrapper(); - } else if (curr->isRenderInline()) { + if (curr->isBox()) + return toRenderBox(curr)->inlineBoxWrapper(); + if (curr->isRenderInline()) { RenderInline* currInline = toRenderInline(curr); InlineBox* result = currInline->firstLineBoxIncludingCulling(); if (result) @@ -871,11 +868,9 @@ InlineBox* RenderInline::culledInlineLastLineBox() const // We want to get the margin box in the inline direction, and then use our font ascent/descent in the block // direction (aligned to the root box's baseline). - if (curr->isBox()) { - RenderBox* currBox = toRenderBox(curr); - if (currBox->inlineBoxWrapper()) - return currBox->inlineBoxWrapper(); - } else if (curr->isRenderInline()) { + if (curr->isBox()) + return toRenderBox(curr)->inlineBoxWrapper(); + if (curr->isRenderInline()) { RenderInline* currInline = toRenderInline(curr); InlineBox* result = currInline->lastLineBoxIncludingCulling(); if (result) diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderLineBoxList.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderLineBoxList.cpp index 32f133c..4b50acb 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderLineBoxList.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderLineBoxList.cpp @@ -355,8 +355,21 @@ void RenderLineBoxList::dirtyLinesFromChangedChild(RenderObject* container, Rend if (box) break; } - if (!box) + if (!box) { + if (inlineContainer && !inlineContainer->alwaysCreateLineBoxes()) { + // https://bugs.webkit.org/show_bug.cgi?id=60778 + // We may have just removed a <br> with no line box that was our first child. In this case + // we won't find a previous sibling, but firstBox can be pointing to a following sibling. + // This isn't good enough, since we won't locate the root line box that encloses the removed + // <br>. We have to just over-invalidate a bit and go up to our parent. + if (!inlineContainer->parent()->selfNeedsLayout()) { + inlineContainer->parent()->dirtyLinesFromChangedChild(inlineContainer); + inlineContainer->setNeedsLayout(true); // Mark the container as needing layout to avoid dirtying the same lines again across multiple destroy() calls of the same subtree. + } + return; + } box = firstBox->root(); + } // If we found a line box, then dirty it. if (box) { diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderObject.h b/src/3rdparty/webkit/Source/WebCore/rendering/RenderObject.h index 537f08a..44ee43c 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderObject.h +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderObject.h @@ -1022,10 +1022,13 @@ inline void RenderObject::markContainingBlocksForLayout(bool scheduleRelayout, R if (!container && !o->isRenderView()) return; if (!last->isText() && (last->style()->position() == FixedPosition || last->style()->position() == AbsolutePosition)) { + bool willSkipRelativelyPositionedInlines = !o->isRenderBlock(); while (o && !o->isRenderBlock()) // Skip relatively positioned inlines and get to the enclosing RenderBlock. o = o->container(); if (!o || o->m_posChildNeedsLayout) return; + if (willSkipRelativelyPositionedInlines) + container = o->container(); o->m_posChildNeedsLayout = true; simplifiedNormalFlowLayout = true; ASSERT(!o->isSetNeedsLayoutForbidden()); diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderReplaced.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderReplaced.cpp index c27d336..09a7944 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderReplaced.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderReplaced.cpp @@ -57,6 +57,14 @@ RenderReplaced::~RenderReplaced() { } +void RenderReplaced::destroy() +{ + if (!documentBeingDestroyed() && parent()) + parent()->dirtyLinesFromChangedChild(this); + + RenderBox::destroy(); +} + void RenderReplaced::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) { RenderBox::styleDidChange(diff, oldStyle); diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderReplaced.h b/src/3rdparty/webkit/Source/WebCore/rendering/RenderReplaced.h index d6ebba6..29fc71c 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderReplaced.h +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderReplaced.h @@ -32,6 +32,8 @@ public: RenderReplaced(Node*, const IntSize& intrinsicSize); virtual ~RenderReplaced(); + virtual void destroy(); + protected: virtual void layout(); diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderThemeWinCE.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderThemeWinCE.cpp index a56ab3e..a22ed8c 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderThemeWinCE.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderThemeWinCE.cpp @@ -479,7 +479,7 @@ static HTMLMediaElement* mediaElementParent(Node* node) if (!node) return 0; Node* mediaNode = node->shadowAncestorNode(); - if (!mediaNode || (!mediaNode->hasTagName(HTMLNames::videoTag) && !mediaNode->hasTagName(HTMLNames::audioTag))) + if (!mediaNode || !mediaNode->isElementNode() || !static_cast<Element*>(mediaNode)->isMediaElement()) return 0; return static_cast<HTMLMediaElement*>(mediaNode); diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderWidget.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderWidget.cpp index 894d689..97444cd 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderWidget.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderWidget.cpp @@ -125,6 +125,10 @@ void RenderWidget::destroy() document()->axObjectCache()->childrenChanged(this->parent()); document()->axObjectCache()->remove(this); } + + if (!documentBeingDestroyed() && parent()) + parent()->dirtyLinesFromChangedChild(this); + remove(); if (m_hasCounterNodeMap) diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/svg/RenderSVGInline.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/svg/RenderSVGInline.cpp index 02a85ce..fdfd92d 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/svg/RenderSVGInline.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/svg/RenderSVGInline.cpp @@ -95,6 +95,9 @@ void RenderSVGInline::absoluteQuads(Vector<FloatQuad>& quads) void RenderSVGInline::destroy() { + if (RenderSVGText* textRenderer = RenderSVGText::locateRenderSVGTextAncestor(this)) + textRenderer->setNeedsPositioningValuesUpdate(); + SVGResourcesCache::clientDestroyed(this); RenderInline::destroy(); } diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/svg/SVGInlineFlowBox.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/svg/SVGInlineFlowBox.cpp index 1d0043b..8992a2a 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/svg/SVGInlineFlowBox.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/svg/SVGInlineFlowBox.cpp @@ -74,8 +74,11 @@ void SVGInlineFlowBox::paint(PaintInfo& paintInfo, int, int, int, int) IntRect SVGInlineFlowBox::calculateBoundaries() const { IntRect childRect; - for (InlineBox* child = firstChild(); child; child = child->nextOnLine()) + for (InlineBox* child = firstChild(); child; child = child->nextOnLine()) { + if (!child->isSVGInlineTextBox() && !child->isSVGInlineFlowBox()) + continue; childRect.unite(child->calculateBoundaries()); + } return childRect; } diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/svg/SVGTextLayoutAttributesBuilder.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/svg/SVGTextLayoutAttributesBuilder.cpp index 42eb8e8..4121723 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/svg/SVGTextLayoutAttributesBuilder.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/svg/SVGTextLayoutAttributesBuilder.cpp @@ -39,7 +39,11 @@ void SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextSubtree(RenderS { ASSERT(textRoot); - // Build list of x/y/dx/dy/rotate values for each subtree element that may define these values (tspan/textPath etc). + // We always clear our current attribute as we don't want to keep any stale ones that could survive DOM modification. + Vector<SVGTextLayoutAttributes>& allAttributes = textRoot->layoutAttributes(); + allAttributes.clear(); + + // Build list of x/y/dx/dy/rotate values for each subtree element that may define these values (tspan/textPath etc). unsigned atCharacter = 0; UChar lastCharacter = '\0'; collectTextPositioningElements(textRoot, atCharacter, lastCharacter); @@ -51,8 +55,6 @@ void SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextSubtree(RenderS buildLayoutAttributesForAllCharacters(textRoot, atCharacter); // Propagate layout attributes to each RenderSVGInlineText object, and the whole list to the RenderSVGText root. - Vector<SVGTextLayoutAttributes>& allAttributes = textRoot->layoutAttributes(); - allAttributes.clear(); atCharacter = 0; lastCharacter = '\0'; propagateLayoutAttributes(textRoot, allAttributes, atCharacter, lastCharacter); diff --git a/src/3rdparty/webkit/Source/WebCore/storage/IDBRequest.cpp b/src/3rdparty/webkit/Source/WebCore/storage/IDBRequest.cpp index f8d818a..96abd87 100644 --- a/src/3rdparty/webkit/Source/WebCore/storage/IDBRequest.cpp +++ b/src/3rdparty/webkit/Source/WebCore/storage/IDBRequest.cpp @@ -66,7 +66,7 @@ IDBRequest::IDBRequest(ScriptExecutionContext* context, PassRefPtr<IDBAny> sourc IDBRequest::~IDBRequest() { - ASSERT(m_readyState == DONE || m_readyState == EarlyDeath); + ASSERT(m_readyState == DONE || m_readyState == EarlyDeath || !scriptExecutionContext()); if (m_transaction) m_transaction->unregisterRequest(this); } @@ -149,8 +149,11 @@ void IDBRequest::abort() ASSERT(m_readyState == DONE); return; } + // FIXME: Remove isDocument check when + // https://bugs.webkit.org/show_bug.cgi?id=57789 is resolved. + if (!scriptExecutionContext() || !scriptExecutionContext()->isDocument()) + return; - ASSERT(scriptExecutionContext()->isDocument()); EventQueue* eventQueue = static_cast<Document*>(scriptExecutionContext())->eventQueue(); for (size_t i = 0; i < m_enqueuedEvents.size(); ++i) { bool removed = eventQueue->cancelEvent(m_enqueuedEvents[i].get()); diff --git a/src/3rdparty/webkit/Source/WebCore/svg/SVGElementInstance.cpp b/src/3rdparty/webkit/Source/WebCore/svg/SVGElementInstance.cpp index 6b9c085..0fba66b 100644 --- a/src/3rdparty/webkit/Source/WebCore/svg/SVGElementInstance.cpp +++ b/src/3rdparty/webkit/Source/WebCore/svg/SVGElementInstance.cpp @@ -70,6 +70,11 @@ SVGElementInstance::~SVGElementInstance() // Deregister as instance for passed element. m_element->removeInstanceMapping(this); + clearChildren(); +} + +void SVGElementInstance::clearChildren() +{ removeAllChildrenInContainer<SVGElementInstance, SVGElementInstance>(this); } @@ -105,8 +110,10 @@ void SVGElementInstance::invalidateAllInstancesOfElement(SVGElement* element) const HashSet<SVGElementInstance*>::const_iterator end = set.end(); for (HashSet<SVGElementInstance*>::const_iterator it = set.begin(); it != end; ++it) { ASSERT((*it)->correspondingElement() == element); - if (SVGUseElement* element = (*it)->correspondingUseElement()) + if (SVGUseElement* element = (*it)->correspondingUseElement()) { + ASSERT(element->inDocument()); element->invalidateShadowTree(); + } } // Be sure to rebuild use trees, if needed diff --git a/src/3rdparty/webkit/Source/WebCore/svg/SVGElementInstance.h b/src/3rdparty/webkit/Source/WebCore/svg/SVGElementInstance.h index 2a8c52f..f24c16f 100644 --- a/src/3rdparty/webkit/Source/WebCore/svg/SVGElementInstance.h +++ b/src/3rdparty/webkit/Source/WebCore/svg/SVGElementInstance.h @@ -59,6 +59,7 @@ public: SVGUseElement* correspondingUseElement() const { return m_correspondingUseElement; } SVGUseElement* directUseElement() const { return m_directUseElement; } SVGElement* shadowTreeElement() const { return m_shadowTreeElement.get(); } + void clearChildren(); void clearUseElements() { m_directUseElement = 0; diff --git a/src/3rdparty/webkit/Source/WebCore/svg/SVGTextContentElement.cpp b/src/3rdparty/webkit/Source/WebCore/svg/SVGTextContentElement.cpp index 4021b4f..35f0401 100644 --- a/src/3rdparty/webkit/Source/WebCore/svg/SVGTextContentElement.cpp +++ b/src/3rdparty/webkit/Source/WebCore/svg/SVGTextContentElement.cpp @@ -28,6 +28,7 @@ #include "Frame.h" #include "RenderObject.h" #include "RenderSVGResource.h" +#include "RenderSVGText.h" #include "SVGDocumentExtensions.h" #include "SVGNames.h" #include "SVGTextQuery.h" @@ -292,6 +293,17 @@ SVGTextContentElement* SVGTextContentElement::elementFromRenderer(RenderObject* return static_cast<SVGTextContentElement*>(node); } +void SVGTextContentElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta) +{ + SVGStyledElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta); + + if (changedByParser || !renderer()) + return; + + if (RenderSVGText* textRenderer = RenderSVGText::locateRenderSVGTextAncestor(renderer())) + textRenderer->setNeedsPositioningValuesUpdate(); +} + } #endif // ENABLE(SVG) diff --git a/src/3rdparty/webkit/Source/WebCore/svg/SVGTextContentElement.h b/src/3rdparty/webkit/Source/WebCore/svg/SVGTextContentElement.h index 94bba70..222a06d 100644 --- a/src/3rdparty/webkit/Source/WebCore/svg/SVGTextContentElement.h +++ b/src/3rdparty/webkit/Source/WebCore/svg/SVGTextContentElement.h @@ -71,6 +71,7 @@ protected: void fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap&); virtual bool selfHasRelativeLengths() const; + virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0); private: virtual bool isTextContent() const { return true; } diff --git a/src/3rdparty/webkit/Source/WebCore/svg/SVGTextPositioningElement.cpp b/src/3rdparty/webkit/Source/WebCore/svg/SVGTextPositioningElement.cpp index cd714c3..ebd4789 100644 --- a/src/3rdparty/webkit/Source/WebCore/svg/SVGTextPositioningElement.cpp +++ b/src/3rdparty/webkit/Source/WebCore/svg/SVGTextPositioningElement.cpp @@ -75,30 +75,6 @@ void SVGTextPositioningElement::parseMappedAttribute(Attribute* attr) SVGTextContentElement::parseMappedAttribute(attr); } -static inline void updatePositioningValuesInRenderer(RenderObject* renderer) -{ - RenderSVGText* textRenderer = 0; - - if (renderer->isSVGText()) - textRenderer = toRenderSVGText(renderer); - else { - // Locate RenderSVGText parent renderer. - RenderObject* parent = renderer->parent(); - while (parent && !parent->isSVGText()) - parent = parent->parent(); - - if (parent) { - ASSERT(parent->isSVGText()); - textRenderer = toRenderSVGText(parent); - } - } - - if (!textRenderer) - return; - - textRenderer->setNeedsPositioningValuesUpdate(); -} - void SVGTextPositioningElement::svgAttributeChanged(const QualifiedName& attrName) { SVGTextContentElement::svgAttributeChanged(attrName); @@ -116,23 +92,13 @@ void SVGTextPositioningElement::svgAttributeChanged(const QualifiedName& attrNam return; if (updateRelativeLengths || attrName == SVGNames::rotateAttr) { - updatePositioningValuesInRenderer(renderer); + if (RenderSVGText* textRenderer = RenderSVGText::locateRenderSVGTextAncestor(renderer)) + textRenderer->setNeedsPositioningValuesUpdate(); RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer); return; } } -void SVGTextPositioningElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta) -{ - SVGTextContentElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta); - - if (changedByParser) - return; - - if (RenderObject* object = renderer()) - updatePositioningValuesInRenderer(object); -} - void SVGTextPositioningElement::synchronizeProperty(const QualifiedName& attrName) { SVGTextContentElement::synchronizeProperty(attrName); diff --git a/src/3rdparty/webkit/Source/WebCore/svg/SVGTextPositioningElement.h b/src/3rdparty/webkit/Source/WebCore/svg/SVGTextPositioningElement.h index 5e6dadc..aa8792f 100644 --- a/src/3rdparty/webkit/Source/WebCore/svg/SVGTextPositioningElement.h +++ b/src/3rdparty/webkit/Source/WebCore/svg/SVGTextPositioningElement.h @@ -36,7 +36,6 @@ protected: SVGTextPositioningElement(const QualifiedName&, Document*); virtual void parseMappedAttribute(Attribute*); - virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0); virtual void svgAttributeChanged(const QualifiedName&); virtual void synchronizeProperty(const QualifiedName&); void fillPassedAttributeToPropertyTypeMap(AttributeToPropertyTypeMap&); diff --git a/src/3rdparty/webkit/Source/WebCore/svg/SVGUseElement.cpp b/src/3rdparty/webkit/Source/WebCore/svg/SVGUseElement.cpp index cea8f0d..d8f9674 100644 --- a/src/3rdparty/webkit/Source/WebCore/svg/SVGUseElement.cpp +++ b/src/3rdparty/webkit/Source/WebCore/svg/SVGUseElement.cpp @@ -644,6 +644,7 @@ void SVGUseElement::detachInstance() if (!m_targetElementInstance) return; m_targetElementInstance->clearUseElements(); + m_targetElementInstance->clearChildren(); m_targetElementInstance = 0; } diff --git a/src/3rdparty/webkit/Source/WebCore/xml/XPathFunctions.cpp b/src/3rdparty/webkit/Source/WebCore/xml/XPathFunctions.cpp index d343a59..1807172 100644 --- a/src/3rdparty/webkit/Source/WebCore/xml/XPathFunctions.cpp +++ b/src/3rdparty/webkit/Source/WebCore/xml/XPathFunctions.cpp @@ -39,6 +39,12 @@ #include "XPathValue.h" #include <wtf/MathExtras.h> +#if COMPILER(WINSCW) +#define BOOL_TO_VALUE_CAST (unsigned long) +#else +#define BOOL_TO_VALUE_CAST +#endif + namespace WebCore { namespace XPath { @@ -453,9 +459,9 @@ Value FunStartsWith::evaluate() const String s2 = arg(1)->evaluate().toString(); if (s2.isEmpty()) - return true; + return BOOL_TO_VALUE_CAST true; - return s1.startsWith(s2); + return BOOL_TO_VALUE_CAST (s1.startsWith(s2)); } Value FunContains::evaluate() const @@ -463,10 +469,10 @@ Value FunContains::evaluate() const String s1 = arg(0)->evaluate().toString(); String s2 = arg(1)->evaluate().toString(); - if (s2.isEmpty()) - return true; + if (s2.isEmpty()) + return BOOL_TO_VALUE_CAST true; - return s1.contains(s2) != 0; + return BOOL_TO_VALUE_CAST (s1.contains(s2) != 0); } Value FunSubstringBefore::evaluate() const @@ -571,17 +577,17 @@ Value FunTranslate::evaluate() const Value FunBoolean::evaluate() const { - return arg(0)->evaluate().toBoolean(); + return BOOL_TO_VALUE_CAST (arg(0)->evaluate().toBoolean()); } Value FunNot::evaluate() const { - return !arg(0)->evaluate().toBoolean(); + return BOOL_TO_VALUE_CAST (!arg(0)->evaluate().toBoolean()); } Value FunTrue::evaluate() const { - return true; + return BOOL_TO_VALUE_CAST true; } Value FunLang::evaluate() const @@ -600,12 +606,12 @@ Value FunLang::evaluate() const } if (!languageAttribute) - return false; + return BOOL_TO_VALUE_CAST false; String langValue = languageAttribute->value(); while (true) { if (equalIgnoringCase(langValue, lang)) - return true; + return BOOL_TO_VALUE_CAST true; // Remove suffixes one by one. size_t index = langValue.reverseFind('-'); @@ -614,12 +620,12 @@ Value FunLang::evaluate() const langValue = langValue.left(index); } - return false; + return BOOL_TO_VALUE_CAST false; } Value FunFalse::evaluate() const { - return false; + return BOOL_TO_VALUE_CAST false; } Value FunNumber::evaluate() const diff --git a/src/3rdparty/webkit/Source/WebCore/xml/XPathPredicate.cpp b/src/3rdparty/webkit/Source/WebCore/xml/XPathPredicate.cpp index 2a6482f..d70d309 100644 --- a/src/3rdparty/webkit/Source/WebCore/xml/XPathPredicate.cpp +++ b/src/3rdparty/webkit/Source/WebCore/xml/XPathPredicate.cpp @@ -38,6 +38,12 @@ #include <math.h> #include <wtf/MathExtras.h> +#if COMPILER(WINSCW) +#define BOOL_TO_VALUE_CAST (unsigned long) +#else +#define BOOL_TO_VALUE_CAST +#endif + namespace WebCore { namespace XPath { @@ -142,7 +148,7 @@ bool EqTestOp::compare(const Value& lhs, const Value& rhs) const // If one object to be compared is a node-set and the other is a boolean, then the comparison will be true // if and only if the result of performing the comparison on the boolean and on the result of converting // the node-set to a boolean using the boolean function is true. - return compare(lhs.toBoolean(), rhs); + return compare(BOOL_TO_VALUE_CAST (lhs.toBoolean()), rhs); } ASSERT(0); } @@ -161,7 +167,7 @@ bool EqTestOp::compare(const Value& lhs, const Value& rhs) const return false; } if (lhs.isBoolean()) - return compare(lhs, rhs.toBoolean()); + return compare(lhs, BOOL_TO_VALUE_CAST (rhs.toBoolean())); ASSERT(0); } @@ -198,7 +204,7 @@ Value EqTestOp::evaluate() const Value lhs(subExpr(0)->evaluate()); Value rhs(subExpr(1)->evaluate()); - return compare(lhs, rhs); + return BOOL_TO_VALUE_CAST compare(lhs, rhs); } LogicalOp::LogicalOp(Opcode opcode, Expression* lhs, Expression* rhs) @@ -224,9 +230,9 @@ Value LogicalOp::evaluate() const // dictates that we must do short-circuit evaluation bool lhsBool = lhs.toBoolean(); if (lhsBool == shortCircuitOn()) - return lhsBool; + return BOOL_TO_VALUE_CAST lhsBool; - return subExpr(1)->evaluate().toBoolean(); + return BOOL_TO_VALUE_CAST (subExpr(1)->evaluate().toBoolean()); } Value Union::evaluate() const diff --git a/src/3rdparty/webkit/Source/WebCore/xml/XPathResult.cpp b/src/3rdparty/webkit/Source/WebCore/xml/XPathResult.cpp index 1dcde2e..7377509 100644 --- a/src/3rdparty/webkit/Source/WebCore/xml/XPathResult.cpp +++ b/src/3rdparty/webkit/Source/WebCore/xml/XPathResult.cpp @@ -35,6 +35,12 @@ #include "XPathEvaluator.h" #include "XPathException.h" +#if COMPILER(WINSCW) +#define BOOL_TO_VALUE_CAST (unsigned long) +#else +#define BOOL_TO_VALUE_CAST +#endif + namespace WebCore { using namespace XPath; @@ -84,7 +90,7 @@ void XPathResult::convertTo(unsigned short type, ExceptionCode& ec) break; case BOOLEAN_TYPE: m_resultType = type; - m_value = m_value.toBoolean(); + m_value = BOOL_TO_VALUE_CAST (m_value.toBoolean()); break; case UNORDERED_NODE_ITERATOR_TYPE: case UNORDERED_NODE_SNAPSHOT_TYPE: diff --git a/src/3rdparty/webkit/Source/WebKit.pri b/src/3rdparty/webkit/Source/WebKit.pri index 309357c..00d0db1 100644 --- a/src/3rdparty/webkit/Source/WebKit.pri +++ b/src/3rdparty/webkit/Source/WebKit.pri @@ -157,6 +157,7 @@ disable_uitools: DEFINES *= QT_NO_UITOOLS # Disable a few warnings on Windows. The warnings are also # disabled in WebKitLibraries/win/tools/vsprops/common.vsprops win32-msvc*|wince*: QMAKE_CXXFLAGS += -wd4291 -wd4344 -wd4396 -wd4503 -wd4800 -wd4819 -wd4996 +win32-icc: QMAKE_CXXFLAGS += -wd873 CONFIG(qt_minimal) { DEFINES *= QT_NO_ANIMATION diff --git a/src/3rdparty/webkit/Source/WebKit/ChangeLog b/src/3rdparty/webkit/Source/WebKit/ChangeLog index ac05a54..20f61f5 100644 --- a/src/3rdparty/webkit/Source/WebKit/ChangeLog +++ b/src/3rdparty/webkit/Source/WebKit/ChangeLog @@ -1,3 +1,29 @@ +2011-06-01 Jer Noble <jer.noble@apple.com> + + Reviewed by Eric Carlson. + + Move Full Screen Controllers into WebCore. + + Remove dependency on QTKit from wekitExitFullscreen() + https://bugs.webkit.org/show_bug.cgi?id=61843 + + WebVideoFullscreenController, WebVideoFullscreenHUDController, and WebWindowAnimation + have been moved into WebCore. + + * WebKit.xcodeproj/project.pbxproj: + +2011-06-30 Leandro Pereira <leandro@profusion.mobi> + + Reviewed by Simon Hausmann. + + generate-webkitversion.pl should not "use Switch" + https://bugs.webkit.org/show_bug.cgi?id=63628 + + Switch got deprecated on recent Perl versions and the script wasn't + using the switch statement. + + * scripts/generate-webkitversion.pl: Remove "use Switch;" line. + 2011-04-18 Timothy Hatcher <timothy@apple.com> Make update-webkit-localizable-strings put WebKit/win strings in WebCore diff --git a/src/3rdparty/webkit/Source/WebKit/qt/Api/qwebframe.cpp b/src/3rdparty/webkit/Source/WebKit/qt/Api/qwebframe.cpp index 026a7df..5ea7059 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/Api/qwebframe.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/Api/qwebframe.cpp @@ -751,8 +751,10 @@ QMultiMap<QString, QString> QWebFrame::metaData() const static inline void clearCoreFrame(WebCore::Frame* frame) { - frame->loader()->activeDocumentLoader()->writer()->begin(); - frame->loader()->activeDocumentLoader()->writer()->end(); + WebCore::DocumentLoader* documentLoader = frame->loader()->activeDocumentLoader(); + Q_ASSERT(documentLoader); + documentLoader->writer()->begin(); + documentLoader->writer()->end(); } static inline bool isCoreFrameClear(WebCore::Frame* frame) diff --git a/src/3rdparty/webkit/Source/WebKit/qt/Api/qwebview.cpp b/src/3rdparty/webkit/Source/WebKit/qt/Api/qwebview.cpp index f4b23f3..76b927b 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/Api/qwebview.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/Api/qwebview.cpp @@ -372,7 +372,7 @@ void QWebViewPrivate::detachCurrentPage() Makes \a page the new web page of the web view. The parent QObject of the provided page remains the owner - of the object. If the current document is a child of the web + of the object. If the current page is a child of the web view, it will be deleted. \sa page() diff --git a/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog b/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog index d702142..a9d5e7a 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog @@ -1,3 +1,252 @@ +2011-08-05 Dawit Alemayehu <adawit@kde.org> + + Reviewed by Andreas Kling. + + Reverted commit r87797, http://trac.webkit.org/changeset/87797, because it + causes the regression reported under bug# 63582. + + [Qt] REGRESSION(r87797): Broke KDEWebKit's custom QNAM. + https://bugs.webkit.org/show_bug.cgi?id=63582 + + * WebCoreSupport/FrameLoaderClientQt.cpp: + (WebCore::FrameLoaderClientQt::setFrame): + +2011-07-26 Alexis Menard <alexis.menard@openbossa.org> + + Reviewed by Andreas Kling. + + [Qt] Change default backend to use GStreamer on Linux and QuickTime on Mac. + https://bugs.webkit.org/show_bug.cgi?id=63472 + + Use the flag WTF_USE_QTKIT=1 rather than USE_QTKIT=1 because that flag doesn't + exist anymore, it's the default. Ditto for GStreamer. + + * QtWebKit.pro: + +2011-06-23 Alexis Menard <alexis.menard@openbossa.org> + + Reviewed by Eric Carlson. + + [Qt] Implement fullscreen support on Mac with the QuickTime backend. + https://bugs.webkit.org/show_bug.cgi?id=61728 + + Implement fullscreen support for Qt when using the QuickTime backend. + We mostly use what is already done for the Mac port. + + * QtWebKit.pro: + * WebCoreSupport/ChromeClientQt.cpp: + (WebCore::ChromeClientQt::ChromeClientQt): + (WebCore::ChromeClientQt::~ChromeClientQt): + * WebCoreSupport/ChromeClientQt.h: + * WebCoreSupport/FullScreenVideoQt.cpp: + (WebCore::FullScreenVideoQt::FullScreenVideoQt): + (WebCore::FullScreenVideoQt::~FullScreenVideoQt): + (WebCore::FullScreenVideoQt::enterFullScreenForNode): + (WebCore::FullScreenVideoQt::exitFullScreenForNode): + (WebCore::FullScreenVideoQt::requiresFullScreenForVideoPlayback): + (WebCore::FullScreenVideoQt::isValid): + * WebCoreSupport/FullScreenVideoQt.h: + * WebCoreSupport/QTKitFullScreenVideoHandler.h: Added. + * WebCoreSupport/QTKitFullScreenVideoHandler.mm: Added. + (QTKitFullScreenVideoHandler::QTKitFullScreenVideoHandler): + (QTKitFullScreenVideoHandler::~QTKitFullScreenVideoHandler): + (QTKitFullScreenVideoHandler::enterFullScreen): + (QTKitFullScreenVideoHandler::exitFullScreen): + * WebCoreSupport/WebSystemInterface.mm: + (InitWebCoreSystemInterface): + +2011-07-27 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> + + [Qt] QtWebkit never finishes loading sites when they are loaded after an initial QUrl fails to load. + https://bugs.webkit.org/show_bug.cgi?id=61328 + + Reviewed by Andreas Kling. + + Change the hooks in FrameLoaderClient we use for emitting signals. Instead of + emitting signals in the progress notification functions, we use the + dispatchDid{Start,Finish,Fail}* functions. The main reason behind this change is + that loading code is prepared to handle load() when inside those functions. + + The crash was being caused by setUrl() (and load()) being called when + loadFinished(false) was emitted. The problem here is that when + postProgressFinishedNotification the FrameLoader wasn't ready for taking a load() + call again, because it was still the ProvisionalLoadState but with the + provisionalDocumentLoader already removed. + + To emulate the same behavior that QtWebKit had when using + postProgressFinishedNotification, we now keep track of the frame originating the + load, and emit the signals when this frame's client is called. + + The patch keeps the existing semantics for QWebPage signals, but we now emit the + QWebFrame signals everytime, not only when they are the originating frame for + loading. + + * Api/qwebframe.cpp: + (clearCoreFrame): Document our assumption that activeDocumentLoader will exist. + + * WebCoreSupport/FrameLoaderClientQt.h: Remove m_loadError, add a boolean to keep + track whether the frame is originating the load. Remove the signals from + FrameLoaderClientQt since we will emit QWebFrame and QWebPage signals directly. + + * WebCoreSupport/FrameLoaderClientQt.cpp: + (WebCore::FrameLoaderClientQt::FrameLoaderClientQt): Initialize m_isOriginatingLoad. + + (WebCore::FrameLoaderClientQt::setFrame): Do not connect QWebFrame and QWebPage + signals to our signals for load/finished, signal emission will be done manually. + + (WebCore::FrameLoaderClientQt::dispatchDidStartProvisionalLoad): Emit + loadStarted() signal and make the first notification of estimation change, that + Qt API tests expect to exist and notify 10%. + + (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad): Remove reference to + m_loadError and emit loadFinished() signal. + + (WebCore::FrameLoaderClientQt::postProgressStartedNotification): Remove signal + emission and mark the originating load as true, since only the originating frame + gets this call in its client. + + (WebCore::FrameLoaderClientQt::postProgressFinishedNotification): Remove signal + emission. + + (WebCore::FrameLoaderClientQt::callErrorPageExtension): Return whether the call + was successful or not. This wasn't necessary before because a successful call for + error page would lead to a load(), that cleared the m_loadError. + (WebCore::FrameLoaderClientQt::dispatchDidFailProvisionalLoad): Remove reference + to m_loadError and emit finished signal indicating error if ErrorPage extension + doesn't handle it. + (WebCore::FrameLoaderClientQt::dispatchDidFailLoad): Ditto. + + (WebCore::FrameLoaderClientQt::emitLoadStarted): Emit the loadStarted() signal + for the QWebFrame, and if the originating load also do for the QWebPage. + + (WebCore::FrameLoaderClientQt::emitLoadFinished): Same as before but for + loadFinished(). Take care to reset the originating load flag before the signals + are emitted, since they might want to set it back again. + + * tests/qwebframe/tst_qwebframe.cpp: + (URLSetter::URLSetter): Object that sets the url using either load() or setUrl() + when a certain signal is emitted in the frame. + + (URLSetter::execute): + (tst_QWebFrame::loadInSignalHandlers_data): + (tst_QWebFrame::loadInSignalHandlers): New test inspired by the bug test case. This test + crashes without this patch applied. + +2011-07-25 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> + + [Qt] Add more tests to cover the behavior of loadFinished() signal + https://bugs.webkit.org/show_bug.cgi?id=63490 + + Reviewed by Benjamin Poulain. + + * tests/qwebframe/tst_qwebframe.cpp: + (FakeReply::FakeReply): + (FakeNetworkManager::createRequest): Add a fake reply that gives 404 error code. + + (tst_QWebFrame::loadFinishedAfterNotFoundError): Verify that we get loadFinished(false) + after a 404 error without contents. + + * tests/qwebpage/tst_qwebpage.cpp: + (tst_QWebPage::errorPageExtensionLoadFinished): Verify if the argument of loadFinished() + is true when we use error page extension to produce our own error pages. + +2011-07-12 Hui Huang <Hui.2.Huang@nokia.com> + + Reviewed by Laszlo Gombos. + + [Qt] Fix compiling errors with QtWebkit 2.2 WINSCW build. + https://bugs.webkit.org/show_bug.cgi?id=64391 + + (QtWebKit-2.2 only, patch not in webkit trunk) + + * symbian/bwins/QtWebKitu.def: + +2011-07-19 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> + + [Qt] Improve documentation of QWebView::setPage() + https://bugs.webkit.org/show_bug.cgi?id=64827 + + Reviewed by Noam Rosenthal. + + * Api/qwebview.cpp: Use the word 'page' to refer to a QWebPage instead of 'document'. + +2011-05-16 Robert Hogan <robert@webkit.org> + + Reviewed by Kenneth Rohde Christiansen. + + plugins/invalidate_rect.html fails on linux ports + + Add ChromeClientQt::allowsAcceleratedCompositing(). + + https://bugs.webkit.org/show_bug.cgi?id=54051 + + * WebCoreSupport/ChromeClientQt.cpp: + (WebCore::ChromeClientQt::allowsAcceleratedCompositing): + * WebCoreSupport/ChromeClientQt.h: + +2011-07-05 Rafael Brandao <rafael.lobo@openbossa.org> + + [Qt] Fix tst_QWebFrame::setHtmlWithResource() API test + https://bugs.webkit.org/show_bug.cgi?id=63235 + + Modified baseUrl to be a local file in order to get a security origin + that is allowed to request local resources. Removed QSignalSpy from it + as loadFinished always happens, and the original test was split into two. + + Reviewed by Benjamin Poulain. + + * tests/qwebframe/tst_qwebframe.cpp: + (tst_QWebFrame::setHtmlWithImageResource): + (tst_QWebFrame::setHtmlWithStylesheetResource): + (tst_QWebFrame::setHtmlWithBaseURL): + +2011-07-01 Jade Han <jade.han@nokia.com> + + [Qt][Symbian] Update .def file for Symbian to build Tools + https://bugs.webkit.org/show_bug.cgi?id=61200 + + Reviewed by Laszlo Gombos. + + Add newly introduced symbols to fix building the Tools directory for Symbian. + + * symbian/eabi/QtWebKitu.def: + +2011-06-30 Rafael Brandao <rafael.lobo@openbossa.org> + + Reviewed by Benjamin Poulain. + + [Qt] Fix tst_QWebFrame::renderGeometry() API test + https://bugs.webkit.org/show_bug.cgi?id=63236 + + This test required a security origin with granted permission to request local resources. + By default, only local files can load local resources. So modified baseUrl to be a local file. + + * tests/qwebframe/tst_qwebframe.cpp: + (tst_QWebFrame::renderGeometry): + +2011-07-01 Jade Han <jade.han@nokia.com> + + Reviewed by Laszlo Gombos. + + [Qt][Symbian] Update .def file for Symbian + https://bugs.webkit.org/show_bug.cgi?id=61200 + + Add newly introduced symbols to fix the Symbian build. + + * symbian/eabi/QtWebKitu.def: + +2011-06-30 Fabrizio Machado <fabrizio.machado@nokia.com> + + Reviewed by Benjamin Poulain. + + [Qt] QML Webview causes performance drops + https://bugs.webkit.org/show_bug.cgi?id=57554 + + Remove tiledBackingStoreEnabled from QML WebView. + + * declarative/qdeclarativewebview.cpp: + (QDeclarativeWebView::setPage): + 2011-06-29 Alexis Menard <alexis.menard@openbossa.org> Reviewed by Benjamin Poulain. diff --git a/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro b/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro index e07f699..0c5ca2f 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro +++ b/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro @@ -218,30 +218,38 @@ contains(DEFINES, ENABLE_NETSCAPE_PLUGIN_API=1) { } contains(DEFINES, ENABLE_VIDEO=1) { - !contains(DEFINES, USE_QTKIT=1):!contains(DEFINES, USE_GSTREAMER=1):contains(MOBILITY_CONFIG, multimedia) { + !contains(DEFINES, WTF_USE_QTKIT=1):!contains(DEFINES, WTF_USE_GSTREAMER=1):contains(DEFINES, WTF_USE_QT_MULTIMEDIA=1) { HEADERS += $$PWD/WebCoreSupport/FullScreenVideoWidget.h SOURCES += $$PWD/WebCoreSupport/FullScreenVideoWidget.cpp } - contains(DEFINES, USE_GSTREAMER=1) | contains(MOBILITY_CONFIG, multimedia) { + contains(DEFINES, WTF_USE_QTKIT=1) | contains(DEFINES, WTF_USE_GSTREAMER=1) | contains(DEFINES, WTF_USE_QT_MULTIMEDIA=1) { HEADERS += $$PWD/WebCoreSupport/FullScreenVideoQt.h SOURCES += $$PWD/WebCoreSupport/FullScreenVideoQt.cpp } - contains(DEFINES, USE_QTKIT=1) { - INCLUDEPATH += $$SOURCE_DIR/WebCore/platform/qt/ - INCLUDEPATH += $$SOURCE_DIR/../WebKitLibraries/ + contains(DEFINES, WTF_USE_QTKIT=1) { + INCLUDEPATH += $$SOURCE_DIR/WebCore/platform/qt/ \ + $$SOURCE_DIR/WebCore/platform/mac/ \ + $$SOURCE_DIR/../WebKitLibraries/ + DEFINES+=NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES - HEADERS += $$PWD/WebCoreSupport/WebSystemInterface.h - SOURCES += $$PWD/WebCoreSupport/WebSystemInterface.mm + + HEADERS += $$PWD/WebCoreSupport/WebSystemInterface.h \ + $$PWD/WebCoreSupport/QTKitFullScreenVideoHandler.h + + OBJECTIVE_SOURCES += $$PWD/WebCoreSupport/WebSystemInterface.mm \ + $$PWD/WebCoreSupport/QTKitFullScreenVideoHandler.mm + + LIBS+= -framework Security -framework IOKit # We can know the Mac OS version by using the Darwin major version DARWIN_VERSION = $$split(QMAKE_HOST.version, ".") DARWIN_MAJOR_VERSION = $$first(DARWIN_VERSION) equals(DARWIN_MAJOR_VERSION, "10") { - LIBS+= $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a -framework Security + LIBS+= $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a } else { equals(DARWIN_MAJOR_VERSION, "9") { - LIBS+= $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceLeopard.a -framework Security + LIBS+= $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceLeopard.a } } } diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp index ea2c826..a199f78 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp @@ -75,7 +75,7 @@ #include <qtooltip.h> #include <wtf/OwnPtr.h> -#if ENABLE(VIDEO) && (USE(GSTREAMER) || USE(QT_MULTIMEDIA)) +#if ENABLE(VIDEO) && (USE(GSTREAMER) || USE(QT_MULTIMEDIA) || USE(QTKIT)) #include "FullScreenVideoQt.h" #include "HTMLMediaElement.h" #include "HTMLNames.h" @@ -92,7 +92,7 @@ bool ChromeClientQt::dumpVisitedLinksCallbacks = false; ChromeClientQt::ChromeClientQt(QWebPage* webPage) : m_webPage(webPage) , m_eventLoop(0) -#if ENABLE(VIDEO) && (USE(GSTREAMER) || USE(QT_MULTIMEDIA)) +#if ENABLE(VIDEO) && (USE(GSTREAMER) || USE(QT_MULTIMEDIA) || USE(QTKIT)) , m_fullScreenVideo(0) #endif { @@ -104,7 +104,7 @@ ChromeClientQt::~ChromeClientQt() if (m_eventLoop) m_eventLoop->exit(); -#if ENABLE(VIDEO) && (USE(GSTREAMER) || USE(QT_MULTIMEDIA)) +#if ENABLE(VIDEO) && (USE(GSTREAMER) || USE(QT_MULTIMEDIA) || USE(QTKIT)) delete m_fullScreenVideo; #endif } @@ -129,6 +129,13 @@ FloatRect ChromeClientQt::windowRect() return platformPageClient()->windowRect(); } +bool ChromeClientQt::allowsAcceleratedCompositing() const +{ + if (!platformPageClient()) + return false; + return platformPageClient()->allowsAcceleratedCompositing(); +} + FloatRect ChromeClientQt::pageRect() { if (!m_webPage) @@ -661,7 +668,7 @@ IntRect ChromeClientQt::visibleRectForTiledBackingStore() const } #endif -#if ENABLE(VIDEO) && (USE(GSTREAMER) || USE(QT_MULTIMEDIA)) +#if ENABLE(VIDEO) && (USE(GSTREAMER) || USE(QT_MULTIMEDIA) || USE(QTKIT)) FullScreenVideoQt* ChromeClientQt::fullScreenVideo() { if (!m_fullScreenVideo) diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.h b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.h index 814a192..f1b7b8e 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.h +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/ChromeClientQt.h @@ -155,6 +155,7 @@ public: virtual void scheduleCompositingLayerSync(); virtual CompositingTriggerFlags allowedCompositingTriggers() const; #endif + virtual bool allowsAcceleratedCompositing() const; #if ENABLE(TILED_BACKING_STORE) virtual IntRect visibleRectForTiledBackingStore() const; @@ -164,7 +165,7 @@ public: virtual void needTouchEvents(bool) { } #endif -#if ENABLE(VIDEO) && (USE(GSTREAMER) || USE(QT_MULTIMEDIA)) +#if ENABLE(VIDEO) && (USE(GSTREAMER) || USE(QT_MULTIMEDIA) || USE(QTKIT)) virtual bool supportsFullscreenForNode(const Node*); virtual void enterFullscreenForNode(Node*); virtual void exitFullscreenForNode(Node*); @@ -203,7 +204,7 @@ public: bool menuBarVisible; QEventLoop* m_eventLoop; -#if ENABLE(VIDEO) && (USE(GSTREAMER) || USE(QT_MULTIMEDIA)) +#if ENABLE(VIDEO) && (USE(GSTREAMER) || USE(QT_MULTIMEDIA) || USE(QTKIT)) FullScreenVideoQt* m_fullScreenVideo; #endif diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp index 68aecda..8971fc4 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp @@ -210,7 +210,7 @@ FrameLoaderClientQt::FrameLoaderClientQt() , m_pluginView(0) , m_hasSentResponseToPlugin(false) , m_hasRepresentation(false) - , m_loadError(ResourceError()) + , m_isOriginatingLoad(false) { } @@ -229,22 +229,12 @@ void FrameLoaderClientQt::setFrame(QWebFrame* webFrame, Frame* frame) return; } - connect(this, SIGNAL(loadStarted()), - m_webFrame->page(), SIGNAL(loadStarted())); - connect(this, SIGNAL(loadStarted()), - m_webFrame, SIGNAL(loadStarted())); connect(this, SIGNAL(loadProgress(int)), m_webFrame->page(), SIGNAL(loadProgress(int))); - connect(this, SIGNAL(loadFinished(bool)), - m_webFrame->page(), SIGNAL(loadFinished(bool))); - // FIXME: The queued connection here is needed because of a problem with QNetworkAccessManager. - // See http://bugreports.qt.nokia.com/browse/QTBUG-18718 connect(this, SIGNAL(unsupportedContent(QNetworkReply*)), - m_webFrame->page(), SIGNAL(unsupportedContent(QNetworkReply*)), Qt::QueuedConnection); + m_webFrame->page(), SIGNAL(unsupportedContent(QNetworkReply*))); - connect(this, SIGNAL(loadFinished(bool)), - m_webFrame, SIGNAL(loadFinished(bool))); connect(this, SIGNAL(titleChanged(QString)), m_webFrame, SIGNAL(titleChanged(QString))); } @@ -448,8 +438,11 @@ void FrameLoaderClientQt::dispatchDidStartProvisionalLoad() m_lastRequestedUrl = m_frame->loader()->activeDocumentLoader()->requestURL(); - if (m_webFrame) - emit m_webFrame->provisionalLoad(); + if (!m_webFrame) + return; + emitLoadStarted(); + postProgressEstimateChangedNotification(); + emit m_webFrame->provisionalLoad(); } @@ -526,12 +519,11 @@ void FrameLoaderClientQt::dispatchDidFinishLoad() if (dumpFrameLoaderCallbacks) printf("%s - didFinishLoadForFrame\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame))); - // Clears the previous error. - m_loadError = ResourceError(); - if (!m_webFrame) return; + m_webFrame->page()->d->updateNavigationActions(); + emitLoadFinished(true); } @@ -579,12 +571,8 @@ void FrameLoaderClientQt::revertToProvisionalState(DocumentLoader*) void FrameLoaderClientQt::postProgressStartedNotification() { - if (m_webFrame && m_frame->page()) { - // As a new load have started, clear the previous error. - m_loadError = ResourceError(); - emit loadStarted(); - postProgressEstimateChangedNotification(); - } + if (m_webFrame && m_frame->page()) + m_isOriginatingLoad = true; if (m_frame->tree()->parent() || !m_webFrame) return; m_webFrame->page()->d->updateNavigationActions(); @@ -611,9 +599,6 @@ void FrameLoaderClientQt::postProgressFinishedNotification() } } } - - if (m_webFrame && m_frame->page()) - emit loadFinished(m_loadError.isNull()); } void FrameLoaderClientQt::setMainFrameDocumentReady(bool) @@ -1133,38 +1118,39 @@ bool FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache(WebCore::Docume return false; } -void FrameLoaderClientQt::callErrorPageExtension(const WebCore::ResourceError& error) +bool FrameLoaderClientQt::callErrorPageExtension(const WebCore::ResourceError& error) { QWebPage* page = m_webFrame->page(); - if (page->supportsExtension(QWebPage::ErrorPageExtension)) { - QWebPage::ErrorPageExtensionOption option; - - if (error.domain() == "QtNetwork") - option.domain = QWebPage::QtNetwork; - else if (error.domain() == "HTTP") - option.domain = QWebPage::Http; - else if (error.domain() == "WebKit") - option.domain = QWebPage::WebKit; - else - return; + if (!page->supportsExtension(QWebPage::ErrorPageExtension)) + return false; + + QWebPage::ErrorPageExtensionOption option; + if (error.domain() == "QtNetwork") + option.domain = QWebPage::QtNetwork; + else if (error.domain() == "HTTP") + option.domain = QWebPage::Http; + else if (error.domain() == "WebKit") + option.domain = QWebPage::WebKit; + else + return false; - option.url = QUrl(error.failingURL()); - option.frame = m_webFrame; - option.error = error.errorCode(); - option.errorString = error.localizedDescription(); + option.url = QUrl(error.failingURL()); + option.frame = m_webFrame; + option.error = error.errorCode(); + option.errorString = error.localizedDescription(); - QWebPage::ErrorPageExtensionReturn output; - if (!page->extension(QWebPage::ErrorPageExtension, &option, &output)) - return; + QWebPage::ErrorPageExtensionReturn output; + if (!page->extension(QWebPage::ErrorPageExtension, &option, &output)) + return false; - KURL baseUrl(output.baseUrl); - KURL failingUrl(option.url); + KURL baseUrl(output.baseUrl); + KURL failingUrl(option.url); - WebCore::ResourceRequest request(baseUrl); - WTF::RefPtr<WebCore::SharedBuffer> buffer = WebCore::SharedBuffer::create(output.content.constData(), output.content.length()); - WebCore::SubstituteData substituteData(buffer, output.contentType, output.encoding, failingUrl); - m_frame->loader()->load(request, substituteData, false); - } + WebCore::ResourceRequest request(baseUrl); + WTF::RefPtr<WebCore::SharedBuffer> buffer = WebCore::SharedBuffer::create(output.content.constData(), output.content.length()); + WebCore::SubstituteData substituteData(buffer, output.contentType, output.encoding, failingUrl); + m_frame->loader()->load(request, substituteData, false); + return true; } void FrameLoaderClientQt::dispatchDidFailProvisionalLoad(const WebCore::ResourceError& error) @@ -1172,9 +1158,13 @@ void FrameLoaderClientQt::dispatchDidFailProvisionalLoad(const WebCore::Resource if (dumpFrameLoaderCallbacks) printf("%s - didFailProvisionalLoadWithError\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame))); - m_loadError = error; - if (!error.isNull() && !error.isCancellation()) - callErrorPageExtension(error); + if (!error.isNull() && !error.isCancellation()) { + if (callErrorPageExtension(error)) + return; + } + + if (m_webFrame) + emitLoadFinished(false); } void FrameLoaderClientQt::dispatchDidFailLoad(const WebCore::ResourceError& error) @@ -1182,9 +1172,13 @@ void FrameLoaderClientQt::dispatchDidFailLoad(const WebCore::ResourceError& erro if (dumpFrameLoaderCallbacks) printf("%s - didFailLoadWithError\n", qPrintable(drtDescriptionSuitableForTestResult(m_frame))); - m_loadError = error; - if (!error.isNull() && !error.isCancellation()) - callErrorPageExtension(error); + if (!error.isNull() && !error.isCancellation()) { + if (callErrorPageExtension(error)) + return; + } + + if (m_webFrame) + emitLoadFinished(false); } WebCore::Frame* FrameLoaderClientQt::dispatchCreatePage(const WebCore::NavigationAction&) @@ -1682,6 +1676,26 @@ PassRefPtr<FrameNetworkingContext> FrameLoaderClientQt::createNetworkingContext( return FrameNetworkingContextQt::create(m_frame, m_webFrame, !MIMESniffingDisabled, m_webFrame->page()->networkAccessManager()); } +void FrameLoaderClientQt::emitLoadStarted() +{ + QWebPage* webPage = m_webFrame->page(); + if (m_isOriginatingLoad && webPage) + emit webPage->loadStarted(); + emit m_webFrame->loadStarted(); +} + +void FrameLoaderClientQt::emitLoadFinished(bool ok) +{ + // Signal handlers can lead to a new load, that will use the member again. + const bool wasOriginatingLoad = m_isOriginatingLoad; + m_isOriginatingLoad = false; + + QWebPage* webPage = m_webFrame->page(); + if (wasOriginatingLoad && webPage) + emit webPage->loadFinished(ok); + emit m_webFrame->loadFinished(ok); +} + } #include "moc_FrameLoaderClientQt.cpp" diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h index 6cfd9c1..1be365d 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h @@ -67,11 +67,10 @@ class FrameLoaderClientQt : public QObject, public FrameLoaderClient { friend class ::QWebFrame; void callPolicyFunction(FramePolicyFunction function, PolicyAction action); - void callErrorPageExtension(const ResourceError&); + bool callErrorPageExtension(const ResourceError&); + signals: - void loadStarted(); void loadProgress(int d); - void loadFinished(bool); void titleChanged(const QString& title); void unsupportedContent(QNetworkReply*); @@ -265,6 +264,9 @@ private slots: void onIconLoadedForPageURL(const QString&); private: + void emitLoadStarted(); + void emitLoadFinished(bool ok); + Frame *m_frame; QWebFrame *m_webFrame; ResourceResponse m_response; @@ -279,7 +281,7 @@ private: bool m_hasRepresentation; KURL m_lastRequestedUrl; - ResourceError m_loadError; + bool m_isOriginatingLoad; }; } diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp index ef97f3a..b1a6e0f 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp @@ -35,6 +35,10 @@ #include "PlatformVideoWindowPrivate.h" #endif +#if USE(QTKIT) +#include "QTKitFullScreenVideoHandler.h" +#endif + #if USE(QT_MULTIMEDIA) #include <QGraphicsVideoItem> #include <QMediaPlayer> @@ -147,6 +151,10 @@ FullScreenVideoQt::FullScreenVideoQt(ChromeClientQt* chromeClient) #if USE(GSTREAMER) m_FullScreenVideoHandlerGStreamer = new GStreamerFullScreenVideoHandler; #endif + +#if USE(QTKIT) + m_FullScreenVideoHandlerQTKit = new QTKitFullScreenVideoHandler; +#endif } FullScreenVideoQt::~FullScreenVideoQt() @@ -157,6 +165,9 @@ FullScreenVideoQt::~FullScreenVideoQt() #if USE(GSTREAMER) delete m_FullScreenVideoHandlerGStreamer; #endif +#if USE(QTKIT) + delete m_FullScreenVideoHandlerQTKit; +#endif } void FullScreenVideoQt::enterFullScreenForNode(Node* node) @@ -185,6 +196,10 @@ void FullScreenVideoQt::enterFullScreenForNode(Node* node) m_FullScreenVideoHandlerGStreamer->setVideoElement(m_videoElement); m_FullScreenVideoHandlerGStreamer->enterFullScreen(); #endif + +#if USE(QTKIT) + m_FullScreenVideoHandlerQTKit->enterFullScreen(m_videoElement); +#endif } void FullScreenVideoQt::exitFullScreenForNode(Node* node) @@ -211,6 +226,11 @@ void FullScreenVideoQt::exitFullScreenForNode(Node* node) #if USE(GSTREAMER) m_FullScreenVideoHandlerGStreamer->exitFullScreen(); #endif + +#if USE(QTKIT) + m_FullScreenVideoHandlerQTKit->exitFullScreen(); +#endif + } void FullScreenVideoQt::aboutToClose() @@ -232,9 +252,6 @@ bool FullScreenVideoQt::requiresFullScreenForVideoPlayback() { #if USE(QT_MULTIMEDIA) return m_FullScreenVideoHandler ? m_FullScreenVideoHandler->requiresFullScreenForVideoPlayback() : false; -#endif -#if USE(GSTREAMER) - return false; #else return false; #endif @@ -247,6 +264,8 @@ bool FullScreenVideoQt::isValid() const #endif #if USE(GSTREAMER) return m_FullScreenVideoHandlerGStreamer; +#elif USE(QTKIT) + return m_FullScreenVideoHandlerQTKit; #else return 0; #endif diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.h b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.h index fda153d..06438ea 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.h +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.h @@ -38,6 +38,9 @@ class Node; #if USE(QT_MULTIMEDIA) class MediaPlayerPrivateQt; #endif +#if USE(QTKIT) +class QTKitFullScreenVideoHandler; +#endif // We do not use ENABLE or USE because moc does not expand these macros. #if defined(WTF_USE_GSTREAMER) && WTF_USE_GSTREAMER @@ -109,6 +112,9 @@ private: #if USE(GSTREAMER) GStreamerFullScreenVideoHandler* m_FullScreenVideoHandlerGStreamer; #endif +#if USE(QTKIT) + QTKitFullScreenVideoHandler* m_FullScreenVideoHandlerQTKit; +#endif }; } diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/QTKitFullScreenVideoHandler.h b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/QTKitFullScreenVideoHandler.h new file mode 100644 index 0000000..39af101 --- /dev/null +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/QTKitFullScreenVideoHandler.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + */ + +#ifndef QTKitFullScreenVideoHandler_h +#define QTKitFullScreenVideoHandler_h + +#include <OwnPtr.h> + +namespace WebCore { + +class HTMLVideoElement; + +class QTKitFullScreenVideoHandler { + class QTKitFullScreenVideoHandlerPrivate; +public: + QTKitFullScreenVideoHandler(); + ~QTKitFullScreenVideoHandler(); + void enterFullScreen(HTMLVideoElement*); + void exitFullScreen(); + +private: + OwnPtr<QTKitFullScreenVideoHandlerPrivate> privateData; +}; + +} + +#endif // QTKitFullScreenVideoHandler_h diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/QTKitFullScreenVideoHandler.mm b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/QTKitFullScreenVideoHandler.mm new file mode 100644 index 0000000..5e94442 --- /dev/null +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/QTKitFullScreenVideoHandler.mm @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + */ + +#include "config.h" + +#include "QTKitFullScreenVideoHandler.h" + +#import <Cocoa/Cocoa.h> + +#include "HTMLVideoElement.h" +#include "WebVideoFullscreenController.h" + +using namespace WebCore; + +class QTKitFullScreenVideoHandler::QTKitFullScreenVideoHandlerPrivate { +public : + WebVideoFullscreenController* m_FullScreenController; +}; + +QTKitFullScreenVideoHandler::QTKitFullScreenVideoHandler() + : privateData (adoptPtr(new QTKitFullScreenVideoHandlerPrivate)) +{ + privateData->m_FullScreenController = nil; +} + +QTKitFullScreenVideoHandler::~QTKitFullScreenVideoHandler() +{ + exitFullScreen(); +} + +void QTKitFullScreenVideoHandler::enterFullScreen(HTMLVideoElement* videoElement) +{ + if (privateData->m_FullScreenController) { + // First exit fullscreen for the old mediaElement. + exitFullScreen(); + ASSERT(!privateData->m_FullScreenController); + } + if (!privateData->m_FullScreenController) { + privateData->m_FullScreenController = [[WebVideoFullscreenController alloc] init]; + [privateData->m_FullScreenController setMediaElement:videoElement]; + NSScreen* currentScreen = [NSScreen mainScreen]; + [privateData->m_FullScreenController enterFullscreen:currentScreen]; + } +} + +void QTKitFullScreenVideoHandler::exitFullScreen() +{ + [privateData->m_FullScreenController exitFullscreen]; + [privateData->m_FullScreenController release]; + privateData->m_FullScreenController = nil; +} diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/WebSystemInterface.mm b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/WebSystemInterface.mm index 7ff2ec8..8354af9 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/WebSystemInterface.mm +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/WebSystemInterface.mm @@ -57,6 +57,10 @@ void InitWebCoreSystemInterface(void) INIT(QTGetSitesInMediaDownloadCache); INIT(QTClearMediaDownloadCacheForSite); INIT(QTClearMediaDownloadCache); + INIT(CreateMediaUIBackgroundView); + INIT(CreateMediaUIControl); + INIT(WindowSetAlpha); + INIT(WindowSetScaledFrame); didInit = true; } diff --git a/src/3rdparty/webkit/Source/WebKit/qt/declarative/qdeclarativewebview.cpp b/src/3rdparty/webkit/Source/WebKit/qt/declarative/qdeclarativewebview.cpp index 6ba1346..22ee579d 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/declarative/qdeclarativewebview.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/declarative/qdeclarativewebview.cpp @@ -782,7 +782,9 @@ void QDeclarativeWebView::setPage(QWebPage* page) connect(page->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(windowObjectCleared())); +#if !defined(Q_OS_SYMBIAN) page->settings()->setAttribute(QWebSettings::TiledBackingStoreEnabled, true); +#endif } diff --git a/src/3rdparty/webkit/Source/WebKit/qt/symbian/bwins/QtWebKitu.def b/src/3rdparty/webkit/Source/WebKit/qt/symbian/bwins/QtWebKitu.def index f1a545e..c93213c 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/symbian/bwins/QtWebKitu.def +++ b/src/3rdparty/webkit/Source/WebKit/qt/symbian/bwins/QtWebKitu.def @@ -368,7 +368,7 @@ EXPORTS ?qWebKitMinorVersion@@YAHXZ @ 367 NONAME ; int qWebKitMinorVersion(void) ?qWebKitVersion@@YA?AVQString@@XZ @ 368 NONAME ; class QString qWebKitVersion(void) ?qt_drt_clearFrameName@@YAXPAVQWebFrame@@@Z @ 369 NONAME ; void qt_drt_clearFrameName(class QWebFrame *) - ?qt_drt_counterValueForElementById@@YA?AVQString@@PAVQWebFrame@@ABV1@@Z @ 370 NONAME ; class QString qt_drt_counterValueForElementById(class QWebFrame *, class QString const &) + ?qt_drt_counterValueForElementById@@YA?AVQString@@PAVQWebFrame@@ABV1@@Z @ 370 NONAME ABSENT ; class QString qt_drt_counterValueForElementById(class QWebFrame *, class QString const &) ?qt_drt_garbageCollector_collect@@YAXXZ @ 371 NONAME ; void qt_drt_garbageCollector_collect(void) ?qt_drt_garbageCollector_collectOnAlternateThread@@YAX_N@Z @ 372 NONAME ; void qt_drt_garbageCollector_collectOnAlternateThread(bool) ?qt_drt_javaScriptObjectsCount@@YAHXZ @ 373 NONAME ; int qt_drt_javaScriptObjectsCount(void) @@ -628,21 +628,21 @@ EXPORTS ?inspectorUrl@QWebSettings@@QBE?AVQUrl@@XZ @ 627 NONAME ABSENT ; class QUrl QWebSettings::inspectorUrl(void) const ?isTiledBackingStoreFrozen@QGraphicsWebView@@QBE_NXZ @ 628 NONAME ; bool QGraphicsWebView::isTiledBackingStoreFrozen(void) const ?pageChanged@QWebFrame@@IAEXXZ @ 629 NONAME ; void QWebFrame::pageChanged(void) - ?qt_drt_enableCaretBrowsing@@YAXPAVQWebPage@@_N@Z @ 630 NONAME ; void qt_drt_enableCaretBrowsing(class QWebPage *, bool) - ?qt_drt_evaluateScriptInIsolatedWorld@@YAXPAVQWebFrame@@HABVQString@@@Z @ 631 NONAME ; void qt_drt_evaluateScriptInIsolatedWorld(class QWebFrame *, int, class QString const &) - ?qt_drt_hasDocumentElement@@YA_NPAVQWebFrame@@@Z @ 632 NONAME ; bool qt_drt_hasDocumentElement(class QWebFrame *) - ?qt_drt_numberOfPages@@YAHPAVQWebFrame@@MM@Z @ 633 NONAME ; int qt_drt_numberOfPages(class QWebFrame *, float, float) - ?qt_drt_pageNumberForElementById@@YAHPAVQWebFrame@@ABVQString@@MM@Z @ 634 NONAME ; int qt_drt_pageNumberForElementById(class QWebFrame *, class QString const &, float, float) - ?qt_drt_pauseSVGAnimation@@YA_NPAVQWebFrame@@ABVQString@@N1@Z @ 635 NONAME ; bool qt_drt_pauseSVGAnimation(class QWebFrame *, class QString const &, double, class QString const &) - ?qt_drt_setDomainRelaxationForbiddenForURLScheme@@YAX_NABVQString@@@Z @ 636 NONAME ; void qt_drt_setDomainRelaxationForbiddenForURLScheme(bool, class QString const &) - ?qt_drt_setFrameFlatteningEnabled@@YAXPAVQWebPage@@_N@Z @ 637 NONAME ; void qt_drt_setFrameFlatteningEnabled(class QWebPage *, bool) - ?qt_drt_setMediaType@@YAXPAVQWebFrame@@ABVQString@@@Z @ 638 NONAME ; void qt_drt_setMediaType(class QWebFrame *, class QString const &) - ?qt_drt_setTimelineProfilingEnabled@@YAXPAVQWebPage@@_N@Z @ 639 NONAME ; void qt_drt_setTimelineProfilingEnabled(class QWebPage *, bool) - ?qt_drt_webinspector_close@@YAXPAVQWebPage@@@Z @ 640 NONAME ; void qt_drt_webinspector_close(class QWebPage *) - ?qt_drt_webinspector_executeScript@@YAXPAVQWebPage@@JABVQString@@@Z @ 641 NONAME ; void qt_drt_webinspector_executeScript(class QWebPage *, long, class QString const &) - ?qt_drt_webinspector_show@@YAXPAVQWebPage@@@Z @ 642 NONAME ; void qt_drt_webinspector_show(class QWebPage *) - ?qt_drt_workerThreadCount@@YAHXZ @ 643 NONAME ; int qt_drt_workerThreadCount(void) - ?qt_wrt_setViewMode@@YAXPAVQWebPage@@ABVQString@@@Z @ 644 NONAME ; void qt_wrt_setViewMode(class QWebPage *, class QString const &) + ?qt_drt_enableCaretBrowsing@@YAXPAVQWebPage@@_N@Z @ 630 NONAME ABSENT ; void qt_drt_enableCaretBrowsing(class QWebPage *, bool) + ?qt_drt_evaluateScriptInIsolatedWorld@@YAXPAVQWebFrame@@HABVQString@@@Z @ 631 NONAME ABSENT ; void qt_drt_evaluateScriptInIsolatedWorld(class QWebFrame *, int, class QString const &) + ?qt_drt_hasDocumentElement@@YA_NPAVQWebFrame@@@Z @ 632 NONAME ABSENT ; bool qt_drt_hasDocumentElement(class QWebFrame *) + ?qt_drt_numberOfPages@@YAHPAVQWebFrame@@MM@Z @ 633 NONAME ABSENT ; int qt_drt_numberOfPages(class QWebFrame *, float, float) + ?qt_drt_pageNumberForElementById@@YAHPAVQWebFrame@@ABVQString@@MM@Z @ 634 NONAME ABSENT ; int qt_drt_pageNumberForElementById(class QWebFrame *, class QString const &, float, float) + ?qt_drt_pauseSVGAnimation@@YA_NPAVQWebFrame@@ABVQString@@N1@Z @ 635 NONAME ABSENT ; bool qt_drt_pauseSVGAnimation(class QWebFrame *, class QString const &, double, class QString const &) + ?qt_drt_setDomainRelaxationForbiddenForURLScheme@@YAX_NABVQString@@@Z @ 636 NONAME ABSENT ; void qt_drt_setDomainRelaxationForbiddenForURLScheme(bool, class QString const &) + ?qt_drt_setFrameFlatteningEnabled@@YAXPAVQWebPage@@_N@Z @ 637 NONAME ABSENT ; void qt_drt_setFrameFlatteningEnabled(class QWebPage *, bool) + ?qt_drt_setMediaType@@YAXPAVQWebFrame@@ABVQString@@@Z @ 638 NONAME ABSENT ; void qt_drt_setMediaType(class QWebFrame *, class QString const &) + ?qt_drt_setTimelineProfilingEnabled@@YAXPAVQWebPage@@_N@Z @ 639 NONAME ABSENT ; void qt_drt_setTimelineProfilingEnabled(class QWebPage *, bool) + ?qt_drt_webinspector_close@@YAXPAVQWebPage@@@Z @ 640 NONAME ABSENT ; void qt_drt_webinspector_close(class QWebPage *) + ?qt_drt_webinspector_executeScript@@YAXPAVQWebPage@@JABVQString@@@Z @ 641 NONAME ABSENT ; void qt_drt_webinspector_executeScript(class QWebPage *, long, class QString const &) + ?qt_drt_webinspector_show@@YAXPAVQWebPage@@@Z @ 642 NONAME ABSENT ; void qt_drt_webinspector_show(class QWebPage *) + ?qt_drt_workerThreadCount@@YAHXZ @ 643 NONAME ABSENT ; int qt_drt_workerThreadCount(void) + ?qt_wrt_setViewMode@@YAXPAVQWebPage@@ABVQString@@@Z @ 644 NONAME ABSENT ; void qt_wrt_setViewMode(class QWebPage *, class QString const &) ?qtwebkit_webframe_scrollRecursively@@YAXPAVQWebFrame@@HHABVQPoint@@@Z @ 645 NONAME ; void qtwebkit_webframe_scrollRecursively(class QWebFrame *, int, int, class QPoint const &) ?resizesToContents@QGraphicsWebView@@QBE_NXZ @ 646 NONAME ; bool QGraphicsWebView::resizesToContents(void) const ?scrollToAnchor@QWebFrame@@QAEXABVQString@@@Z @ 647 NONAME ; void QWebFrame::scrollToAnchor(class QString const &) @@ -650,4 +650,148 @@ EXPORTS ?setResizesToContents@QGraphicsWebView@@QAEX_N@Z @ 649 NONAME ; void QGraphicsWebView::setResizesToContents(bool) ?setTiledBackingStoreFrozen@QGraphicsWebView@@QAEX_N@Z @ 650 NONAME ; void QGraphicsWebView::setTiledBackingStoreFrozen(bool) ?qtwebkit_webframe_scrollOverflow@@YA_NPAVQWebFrame@@HHABVQPoint@@@Z @ 651 NONAME ; bool qtwebkit_webframe_scrollOverflow(QWebFrame *, int, int, const QPoint&) - ?qtwebkit_setPluginCreatedCallback@@YAXP6AXPAVQWebFrame@@PAX1@Z@Z @ 652 NONAME ; void qtwebkit_setPluginCreatedCallback(void (*)(class QWebFrame *, void *, void *)) + ?qtwebkit_setPluginCreatedCallback@@YAXP6AXPAVQWebFrame@@PAX1@Z@Z @ 652 NONAME ; void qtwebkit_setPluginCreatedCallback(void (*)(class QWebFrame *, void *, void *)) + ?mediaContentUrlByElementId@DumpRenderTreeSupportQt@@SA?AVQUrl@@PAVQWebFrame@@ABVQString@@@Z @ 653 NONAME ; class QUrl DumpRenderTreeSupportQt::mediaContentUrlByElementId(QWebFrame *, const QString &) + ?webPageSetGroupName@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@ABVQString@@@Z @ 654 NONAME ; void DumpRenderTreeSupportQt::webPageSetGroupName(class QWebPage *, class QString const &) + ?webPageGroupName@DumpRenderTreeSupportQt@@SA?AVQString@@PAVQWebPage@@@Z @ 655 NONAME ; class QString DumpRenderTreeSupportQt::webPageGroupName(class QWebPage *) + ?renderHints@QGraphicsWebView@@QBE?AV?$QFlags@W4RenderHint@QPainter@@@@XZ @ 656 NONAME ; class QFlags<enum QPainter::RenderHint> QGraphicsWebView::renderHints(void) const + ?setRenderHint@QGraphicsWebView@@QAEXW4RenderHint@QPainter@@_N@Z @ 657 NONAME ; void QGraphicsWebView::setRenderHint(enum QPainter::RenderHint, bool) + ?selectedHtml@QWebPage@@QBE?AVQString@@XZ @ 658 NONAME ; class QString QWebPage::selectedHtml(void) const + ?hasSelection@QWebPage@@QBE_NXZ @ 659 NONAME ; bool QWebPage::hasSelection(void) const + ?garbageCollectorCollect@DumpRenderTreeSupportQt@@SAXXZ @ 660 NONAME ; void DumpRenderTreeSupportQt::garbageCollectorCollect(void) + ?supportedContentTypes@QWebPage@@QBE?AVQStringList@@XZ @ 661 NONAME ; class QStringList QWebPage::supportedContentTypes(void) const + ?supportsContentType@QWebPage@@QBE_NABVQString@@@Z @ 662 NONAME ; bool QWebPage::supportsContentType(class QString const &) const + ?setFeaturePermission@QWebPage@@QAEXPAVQWebFrame@@W4Feature@1@W4PermissionPolicy@1@@Z @ 663 NONAME ; void QWebPage::setFeaturePermission(class QWebFrame *, enum QWebPage::Feature, enum QWebPage::PermissionPolicy) + strnstr @ 664 NONAME + ??1QWebScriptWorld@@QAE@XZ @ 665 NONAME ; QWebScriptWorld::~QWebScriptWorld(void) + ??_EQWebSettings@@QAE@I@Z @ 666 NONAME ; QWebSettings::~QWebSettings(unsigned int) + ?setSelectTrailingWhitespaceEnabled@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@_N@Z @ 667 NONAME ; void DumpRenderTreeSupportQt::setSelectTrailingWhitespaceEnabled(class QWebPage *, bool) + ?webInspectorShow@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@@Z @ 668 NONAME ; void DumpRenderTreeSupportQt::webInspectorShow(class QWebPage *) + ?firstRectForCharacterRange@DumpRenderTreeSupportQt@@SA?AV?$QList@VQVariant@@@@PAVQWebPage@@HH@Z @ 669 NONAME ; class QList<class QVariant> DumpRenderTreeSupportQt::firstRectForCharacterRange(class QWebPage *, int, int) + ?whiteListAccessFromOrigin@DumpRenderTreeSupportQt@@SAXABVQString@@00_N@Z @ 670 NONAME ; void DumpRenderTreeSupportQt::whiteListAccessFromOrigin(class QString const &, class QString const &, class QString const &, bool) + ?dumpResourceLoadCallbacks@DumpRenderTreeSupportQt@@SAX_N@Z @ 671 NONAME ; void DumpRenderTreeSupportQt::dumpResourceLoadCallbacks(bool) + ?setWillSendRequestClearHeaders@DumpRenderTreeSupportQt@@SAXABVQStringList@@@Z @ 672 NONAME ; void DumpRenderTreeSupportQt::setWillSendRequestClearHeaders(class QStringList const &) + ?dumpResourceLoadCallbacksPath@DumpRenderTreeSupportQt@@SAXABVQString@@@Z @ 673 NONAME ; void DumpRenderTreeSupportQt::dumpResourceLoadCallbacksPath(class QString const &) + ?featurePermissionRequestCanceled@QWebPage@@IAEXPAVQWebFrame@@W4Feature@1@@Z @ 674 NONAME ; void QWebPage::featurePermissionRequestCanceled(class QWebFrame *, enum QWebPage::Feature) + ??0ViewportAttributes@QWebPage@@QAE@ABV01@@Z @ 675 NONAME ; QWebPage::ViewportAttributes::ViewportAttributes(class QWebPage::ViewportAttributes const &) + ?getChildHistoryItems@DumpRenderTreeSupportQt@@SA?AV?$QMap@VQString@@VQWebHistoryItem@@@@ABVQWebHistoryItem@@@Z @ 676 NONAME ; class QMap<class QString, class QWebHistoryItem> DumpRenderTreeSupportQt::getChildHistoryItems(class QWebHistoryItem const &) + ??_EQWebHistoryItem@@QAE@I@Z @ 677 NONAME ; QWebHistoryItem::~QWebHistoryItem(unsigned int) + ?viewportAttributesForSize@QWebPage@@QBE?AVViewportAttributes@1@ABVQSize@@@Z @ 678 NONAME ; class QWebPage::ViewportAttributes QWebPage::viewportAttributesForSize(class QSize const &) const + ?selectedRange@DumpRenderTreeSupportQt@@SA?AV?$QList@VQVariant@@@@PAVQWebPage@@@Z @ 679 NONAME ; class QList<class QVariant> DumpRenderTreeSupportQt::selectedRange(class QWebPage *) + ?selectedHtml@QWebView@@QBE?AVQString@@XZ @ 680 NONAME ; class QString QWebView::selectedHtml(void) const + ?pageNumberForElementById@DumpRenderTreeSupportQt@@SAHPAVQWebFrame@@ABVQString@@MM@Z @ 681 NONAME ; int DumpRenderTreeSupportQt::pageNumberForElementById(class QWebFrame *, class QString const &, float, float) + ??1ViewportAttributes@QWebPage@@QAE@XZ @ 682 NONAME ; QWebPage::ViewportAttributes::~ViewportAttributes(void) + ?resumeActiveDOMObjects@DumpRenderTreeSupportQt@@SAXPAVQWebFrame@@@Z @ 683 NONAME ; void DumpRenderTreeSupportQt::resumeActiveDOMObjects(class QWebFrame *) + ?suspendAnimations@DumpRenderTreeSupportQt@@SAXPAVQWebFrame@@@Z @ 684 NONAME ; void DumpRenderTreeSupportQt::suspendAnimations(class QWebFrame *) + ?initialScaleFactor@ViewportAttributes@QWebPage@@QBEMXZ @ 685 NONAME ; float QWebPage::ViewportAttributes::initialScaleFactor(void) const + ?setSmartInsertDeleteEnabled@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@_N@Z @ 686 NONAME ; void DumpRenderTreeSupportQt::setSmartInsertDeleteEnabled(class QWebPage *, bool) + ?nodesFromRect@DumpRenderTreeSupportQt@@SA?AV?$QList@VQVariant@@@@ABVQWebElement@@HHIIII_N@Z @ 687 NONAME ; class QList<class QVariant> DumpRenderTreeSupportQt::nodesFromRect(class QWebElement const &, int, int, unsigned int, unsigned int, unsigned int, unsigned int, bool) + ?setJavaScriptProfilingEnabled@DumpRenderTreeSupportQt@@SAXPAVQWebFrame@@_N@Z @ 688 NONAME ; void DumpRenderTreeSupportQt::setJavaScriptProfilingEnabled(class QWebFrame *, bool) + ?shouldClose@DumpRenderTreeSupportQt@@SA_NPAVQWebFrame@@@Z @ 689 NONAME ; bool DumpRenderTreeSupportQt::shouldClose(class QWebFrame *) + ?clearOpener@DumpRenderTreeSupportQt@@SAXPAVQWebFrame@@@Z @ 690 NONAME ; void DumpRenderTreeSupportQt::clearOpener(class QWebFrame *) + ?isTargetItem@DumpRenderTreeSupportQt@@SA_NABVQWebHistoryItem@@@Z @ 691 NONAME ; bool DumpRenderTreeSupportQt::isTargetItem(class QWebHistoryItem const &) + ?setWillSendRequestReturnsNullOnRedirect@DumpRenderTreeSupportQt@@SAX_N@Z @ 692 NONAME ; void DumpRenderTreeSupportQt::setWillSendRequestReturnsNullOnRedirect(bool) + ??0DumpRenderTreeSupportQt@@QAE@XZ @ 693 NONAME ; DumpRenderTreeSupportQt::DumpRenderTreeSupportQt(void) + ?isUserScalable@ViewportAttributes@QWebPage@@QBE_NXZ @ 694 NONAME ; bool QWebPage::ViewportAttributes::isUserScalable(void) const + ?clearFrameName@DumpRenderTreeSupportQt@@SAXPAVQWebFrame@@@Z @ 695 NONAME ; void DumpRenderTreeSupportQt::clearFrameName(class QWebFrame *) + ??0QWebScriptWorld@@QAE@XZ @ 696 NONAME ; QWebScriptWorld::QWebScriptWorld(void) + ??4ViewportAttributes@QWebPage@@QAEAAV01@ABV01@@Z @ 697 NONAME ; class QWebPage::ViewportAttributes & QWebPage::ViewportAttributes::operator=(class QWebPage::ViewportAttributes const &) + ?dumpNotification@DumpRenderTreeSupportQt@@SAX_N@Z @ 698 NONAME ; void DumpRenderTreeSupportQt::dumpNotification(bool) + ?setDeferMainResourceDataLoad@DumpRenderTreeSupportQt@@SAX_N@Z @ 699 NONAME ; void DumpRenderTreeSupportQt::setDeferMainResourceDataLoad(bool) + ?webInspectorClose@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@@Z @ 700 NONAME ; void DumpRenderTreeSupportQt::webInspectorClose(class QWebPage *) + ?defaultMinimumTimerInterval@DumpRenderTreeSupportQt@@SANXZ @ 701 NONAME ; double DumpRenderTreeSupportQt::defaultMinimumTimerInterval(void) + ??0ViewportAttributes@QWebPage@@QAE@XZ @ 702 NONAME ; QWebPage::ViewportAttributes::ViewportAttributes(void) + ?counterValueForElementById@DumpRenderTreeSupportQt@@SA?AVQString@@PAVQWebFrame@@ABV2@@Z @ 703 NONAME ; class QString DumpRenderTreeSupportQt::counterValueForElementById(class QWebFrame *, class QString const &) + ??_EQWebElement@@QAE@I@Z @ 704 NONAME ; QWebElement::~QWebElement(unsigned int) + ?setMinimumTimerInterval@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@N@Z @ 705 NONAME ; void DumpRenderTreeSupportQt::setMinimumTimerInterval(class QWebPage *, double) + ?activeMockDeviceOrientationClient@DumpRenderTreeSupportQt@@SAX_N@Z @ 706 NONAME ; void DumpRenderTreeSupportQt::activeMockDeviceOrientationClient(bool) + ?addUserStyleSheet@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@ABVQString@@@Z @ 707 NONAME ; void DumpRenderTreeSupportQt::addUserStyleSheet(class QWebPage *, class QString const &) + ?devicePixelRatio@ViewportAttributes@QWebPage@@QBEMXZ @ 708 NONAME ; float QWebPage::ViewportAttributes::devicePixelRatio(void) const + ?setMockDeviceOrientation@DumpRenderTreeSupportQt@@SAX_NN0N0N@Z @ 709 NONAME ; void DumpRenderTreeSupportQt::setMockDeviceOrientation(bool, double, bool, double, bool, double) + ?size@ViewportAttributes@QWebPage@@QBE?AVQSize@@XZ @ 710 NONAME ; class QSize QWebPage::ViewportAttributes::size(void) const + ?setCustomPolicyDelegate@DumpRenderTreeSupportQt@@SAX_N0@Z @ 711 NONAME ; void DumpRenderTreeSupportQt::setCustomPolicyDelegate(bool, bool) + ?viewportChangeRequested@QWebPage@@IAEXXZ @ 712 NONAME ; void QWebPage::viewportChangeRequested(void) + ?hasDocumentElement@DumpRenderTreeSupportQt@@SA_NPAVQWebFrame@@@Z @ 713 NONAME ; bool DumpRenderTreeSupportQt::hasDocumentElement(class QWebFrame *) + ?numberOfPages@DumpRenderTreeSupportQt@@SAHPAVQWebFrame@@MM@Z @ 714 NONAME ; int DumpRenderTreeSupportQt::numberOfPages(class QWebFrame *, float, float) + ?numberOfActiveAnimations@DumpRenderTreeSupportQt@@SAHPAVQWebFrame@@@Z @ 715 NONAME ; int DumpRenderTreeSupportQt::numberOfActiveAnimations(class QWebFrame *) + ?contextMenu@DumpRenderTreeSupportQt@@SA?AVQStringList@@PAVQWebPage@@@Z @ 716 NONAME ; class QStringList DumpRenderTreeSupportQt::contextMenu(class QWebPage *) + ?setWillSendRequestReturnsNull@DumpRenderTreeSupportQt@@SAX_N@Z @ 717 NONAME ; void DumpRenderTreeSupportQt::setWillSendRequestReturnsNull(bool) + ?resumeAnimations@DumpRenderTreeSupportQt@@SAXPAVQWebFrame@@@Z @ 718 NONAME ; void DumpRenderTreeSupportQt::resumeAnimations(class QWebFrame *) + ?addURLToRedirect@DumpRenderTreeSupportQt@@SAXABVQString@@0@Z @ 719 NONAME ; void DumpRenderTreeSupportQt::addURLToRedirect(class QString const &, class QString const &) + ??_EQWebDatabase@@QAE@I@Z @ 720 NONAME ; QWebDatabase::~QWebDatabase(unsigned int) + ?workerThreadCount@DumpRenderTreeSupportQt@@SAHXZ @ 721 NONAME ; int DumpRenderTreeSupportQt::workerThreadCount(void) + ?render@QWebElement@@QAEXPAVQPainter@@ABVQRect@@@Z @ 722 NONAME ; void QWebElement::render(class QPainter *, class QRect const &) + ?setFrameFlatteningEnabled@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@_N@Z @ 723 NONAME ; void DumpRenderTreeSupportQt::setFrameFlatteningEnabled(class QWebPage *, bool) + ?dumpResourceResponseMIMETypes@DumpRenderTreeSupportQt@@SAX_N@Z @ 724 NONAME ; void DumpRenderTreeSupportQt::dumpResourceResponseMIMETypes(bool) + ?pageProperty@DumpRenderTreeSupportQt@@SA?AVQString@@PAVQWebFrame@@ABV2@H@Z @ 725 NONAME ; class QString DumpRenderTreeSupportQt::pageProperty(class QWebFrame *, class QString const &, int) + ??0QDRTNode@@QAE@XZ @ 726 NONAME ; QDRTNode::QDRTNode(void) + ?hasSelection@QWebView@@QBE_NXZ @ 727 NONAME ; bool QWebView::hasSelection(void) const + ??_EQDRTNode@@QAE@I@Z @ 728 NONAME ; QDRTNode::~QDRTNode(unsigned int) + ?garbageCollectorCollectOnAlternateThread@DumpRenderTreeSupportQt@@SAX_N@Z @ 729 NONAME ; void DumpRenderTreeSupportQt::garbageCollectorCollectOnAlternateThread(bool) + ?setRenderHints@QGraphicsWebView@@QAEXV?$QFlags@W4RenderHint@QPainter@@@@@Z @ 730 NONAME ; void QGraphicsWebView::setRenderHints(class QFlags<enum QPainter::RenderHint>) + ?setAlternateHtml@DumpRenderTreeSupportQt@@SAXPAVQWebFrame@@ABVQString@@ABVQUrl@@2@Z @ 731 NONAME ; void DumpRenderTreeSupportQt::setAlternateHtml(class QWebFrame *, class QString const &, class QUrl const &, class QUrl const &) + ?webInspectorExecuteScript@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@JABVQString@@@Z @ 732 NONAME ; void DumpRenderTreeSupportQt::webInspectorExecuteScript(class QWebPage *, long, class QString const &) + ?pauseTransitionOfProperty@DumpRenderTreeSupportQt@@SA_NPAVQWebFrame@@ABVQString@@N1@Z @ 733 NONAME ; bool DumpRenderTreeSupportQt::pauseTransitionOfProperty(class QWebFrame *, class QString const &, double, class QString const &) + ?numberOfPendingGeolocationPermissionRequests@DumpRenderTreeSupportQt@@SAHPAVQWebPage@@@Z @ 734 NONAME ; int DumpRenderTreeSupportQt::numberOfPendingGeolocationPermissionRequests(class QWebPage *) + ?setEditingBehavior@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@ABVQString@@@Z @ 735 NONAME ; void DumpRenderTreeSupportQt::setEditingBehavior(class QWebPage *, class QString const &) + ?findString@DumpRenderTreeSupportQt@@SA_NPAVQWebPage@@ABVQString@@ABVQStringList@@@Z @ 736 NONAME ; bool DumpRenderTreeSupportQt::findString(class QWebPage *, class QString const &, class QStringList const &) + ?setCaretBrowsingEnabled@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@_N@Z @ 737 NONAME ; void DumpRenderTreeSupportQt::setCaretBrowsingEnabled(class QWebPage *, bool) + ?historyItemTarget@DumpRenderTreeSupportQt@@SA?AVQString@@ABVQWebHistoryItem@@@Z @ 738 NONAME ; class QString DumpRenderTreeSupportQt::historyItemTarget(class QWebHistoryItem const &) + ??1QDRTNode@@QAE@XZ @ 739 NONAME ; QDRTNode::~QDRTNode(void) + ?clearAllApplicationCaches@DumpRenderTreeSupportQt@@SAXXZ @ 740 NONAME ; void DumpRenderTreeSupportQt::clearAllApplicationCaches(void) + ?isValid@ViewportAttributes@QWebPage@@QBE_NXZ @ 741 NONAME ; bool QWebPage::ViewportAttributes::isValid(void) const + ?dumpVisitedLinksCallbacks@DumpRenderTreeSupportQt@@SAX_N@Z @ 742 NONAME ; void DumpRenderTreeSupportQt::dumpVisitedLinksCallbacks(bool) + ?resetOriginAccessWhiteLists@DumpRenderTreeSupportQt@@SAXXZ @ 743 NONAME ; void DumpRenderTreeSupportQt::resetOriginAccessWhiteLists(void) + ??_EQWebSecurityOrigin@@QAE@I@Z @ 744 NONAME ; QWebSecurityOrigin::~QWebSecurityOrigin(unsigned int) + ?dumpFrameLoader@DumpRenderTreeSupportQt@@SAX_N@Z @ 745 NONAME ; void DumpRenderTreeSupportQt::dumpFrameLoader(bool) + ?markerTextForListItem@DumpRenderTreeSupportQt@@SA?AVQString@@ABVQWebElement@@@Z @ 746 NONAME ; class QString DumpRenderTreeSupportQt::markerTextForListItem(class QWebElement const &) + ?elementDoesAutoCompleteForElementWithId@DumpRenderTreeSupportQt@@SA_NPAVQWebFrame@@ABVQString@@@Z @ 747 NONAME ; bool DumpRenderTreeSupportQt::elementDoesAutoCompleteForElementWithId(class QWebFrame *, class QString const &) + ?applicationCacheQuotaExceeded@QWebPage@@IAEXPAVQWebSecurityOrigin@@_K@Z @ 748 NONAME ; void QWebPage::applicationCacheQuotaExceeded(class QWebSecurityOrigin *, unsigned long long) + ?setTimelineProfilingEnabled@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@_N@Z @ 749 NONAME ; void DumpRenderTreeSupportQt::setTimelineProfilingEnabled(class QWebPage *, bool) + ??0QDRTNode@@AAE@PAVNode@WebCore@@@Z @ 750 NONAME ; QDRTNode::QDRTNode(class WebCore::Node *) + ?setMockGeolocationPermission@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@_N@Z @ 751 NONAME ; void DumpRenderTreeSupportQt::setMockGeolocationPermission(class QWebPage *, bool) + ?setMockGeolocationError@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@HABVQString@@@Z @ 752 NONAME ; void DumpRenderTreeSupportQt::setMockGeolocationError(class QWebPage *, int, class QString const &) + ?clearScriptWorlds@DumpRenderTreeSupportQt@@SAXXZ @ 753 NONAME ; void DumpRenderTreeSupportQt::clearScriptWorlds(void) + ?maximumScaleFactor@ViewportAttributes@QWebPage@@QBEMXZ @ 754 NONAME ; float QWebPage::ViewportAttributes::maximumScaleFactor(void) const + ?dumpHistoryCallbacks@DumpRenderTreeSupportQt@@SAX_N@Z @ 755 NONAME ; void DumpRenderTreeSupportQt::dumpHistoryCallbacks(bool) + ??0MimeType@QWebPluginFactory@@QAE@XZ @ 756 NONAME ; QWebPluginFactory::MimeType::MimeType(void) + ?pauseSVGAnimation@DumpRenderTreeSupportQt@@SA_NPAVQWebFrame@@ABVQString@@N1@Z @ 757 NONAME ; bool DumpRenderTreeSupportQt::pauseSVGAnimation(class QWebFrame *, class QString const &, double, class QString const &) + ?featurePermissionRequested@QWebPage@@IAEXPAVQWebFrame@@W4Feature@1@@Z @ 758 NONAME ; void QWebPage::featurePermissionRequested(class QWebFrame *, enum QWebPage::Feature) + ?removeShadowRoot@DumpRenderTreeSupportQt@@SAXABVQWebElement@@@Z @ 759 NONAME ; void DumpRenderTreeSupportQt::removeShadowRoot(class QWebElement const &) + ??_EQWebPluginInfo@@QAE@I@Z @ 760 NONAME ; QWebPluginInfo::~QWebPluginInfo(unsigned int) + ?pageSizeAndMarginsInPixels@DumpRenderTreeSupportQt@@SA?AVQString@@PAVQWebFrame@@HHHHHHH@Z @ 761 NONAME ; class QString DumpRenderTreeSupportQt::pageSizeAndMarginsInPixels(class QWebFrame *, int, int, int, int, int, int, int) + ?suspendActiveDOMObjects@DumpRenderTreeSupportQt@@SAXPAVQWebFrame@@@Z @ 762 NONAME ; void DumpRenderTreeSupportQt::suspendActiveDOMObjects(class QWebFrame *) + ?dumpUserGestureInFrameLoader@DumpRenderTreeSupportQt@@SAX_N@Z @ 763 NONAME ; void DumpRenderTreeSupportQt::dumpUserGestureInFrameLoader(bool) + ??0QWebScriptWorld@@QAE@ABV0@@Z @ 764 NONAME ; QWebScriptWorld::QWebScriptWorld(class QWebScriptWorld const &) + ?setDumpRenderTreeModeEnabled@DumpRenderTreeSupportQt@@SAX_N@Z @ 765 NONAME ; void DumpRenderTreeSupportQt::setDumpRenderTreeModeEnabled(bool) + ?evaluateScriptInIsolatedWorld@DumpRenderTreeSupportQt@@SAXPAVQWebFrame@@HABVQString@@@Z @ 766 NONAME ; void DumpRenderTreeSupportQt::evaluateScriptInIsolatedWorld(class QWebFrame *, int, class QString const &) + ?setApplicationCacheQuota@QWebSecurityOrigin@@QAEX_J@Z @ 767 NONAME ; void QWebSecurityOrigin::setApplicationCacheQuota(long long) + ?plainText@DumpRenderTreeSupportQt@@SA?AVQString@@ABVQVariant@@@Z @ 768 NONAME ; class QString DumpRenderTreeSupportQt::plainText(class QVariant const &) + ??1DumpRenderTreeSupportQt@@QAE@XZ @ 769 NONAME ; DumpRenderTreeSupportQt::~DumpRenderTreeSupportQt(void) + ?viewportAsText@DumpRenderTreeSupportQt@@SA?AVQString@@PAVQWebPage@@HABVQSize@@1@Z @ 770 NONAME ; class QString DumpRenderTreeSupportQt::viewportAsText(class QWebPage *, int, class QSize const &, class QSize const &) + ?setDomainRelaxationForbiddenForURLScheme@DumpRenderTreeSupportQt@@SAX_NABVQString@@@Z @ 771 NONAME ; void DumpRenderTreeSupportQt::setDomainRelaxationForbiddenForURLScheme(bool, class QString const &) + ?setMediaType@DumpRenderTreeSupportQt@@SAXPAVQWebFrame@@ABVQString@@@Z @ 772 NONAME ; void DumpRenderTreeSupportQt::setMediaType(class QWebFrame *, class QString const &) + ?computedStyleIncludingVisitedInfo@DumpRenderTreeSupportQt@@SA?AV?$QMap@VQString@@VQVariant@@@@ABVQWebElement@@@Z @ 773 NONAME ; class QMap<class QString, class QVariant> DumpRenderTreeSupportQt::computedStyleIncludingVisitedInfo(class QWebElement const &) + ?overwritePluginDirectories@DumpRenderTreeSupportQt@@SAXXZ @ 774 NONAME ; void DumpRenderTreeSupportQt::overwritePluginDirectories(void) + ?minimumScaleFactor@ViewportAttributes@QWebPage@@QBEMXZ @ 775 NONAME ; float QWebPage::ViewportAttributes::minimumScaleFactor(void) const + ?setAutofilled@DumpRenderTreeSupportQt@@SAXABVQWebElement@@_N@Z @ 776 NONAME ; void DumpRenderTreeSupportQt::setAutofilled(class QWebElement const &, bool) + ?dumpSetAcceptsEditing@DumpRenderTreeSupportQt@@SAX_N@Z @ 777 NONAME ; void DumpRenderTreeSupportQt::dumpSetAcceptsEditing(bool) + ?pauseAnimation@DumpRenderTreeSupportQt@@SA_NPAVQWebFrame@@ABVQString@@N1@Z @ 778 NONAME ; bool DumpRenderTreeSupportQt::pauseAnimation(class QWebFrame *, class QString const &, double, class QString const &) + ?isPageBoxVisible@DumpRenderTreeSupportQt@@SA_NPAVQWebFrame@@H@Z @ 779 NONAME ; bool DumpRenderTreeSupportQt::isPageBoxVisible(class QWebFrame *, int) + ?shadowRoot@DumpRenderTreeSupportQt@@SA?AVQVariant@@ABVQWebElement@@@Z @ 780 NONAME ; class QVariant DumpRenderTreeSupportQt::shadowRoot(class QWebElement const &) + ??4QDRTNode@@QAEAAV0@ABV0@@Z @ 781 NONAME ; class QDRTNode & QDRTNode::operator=(class QDRTNode const &) + ?responseMimeType@DumpRenderTreeSupportQt@@SA?AVQString@@PAVQWebFrame@@@Z @ 782 NONAME ; class QString DumpRenderTreeSupportQt::responseMimeType(class QWebFrame *) + ?setMockGeolocationPosition@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@NNN@Z @ 783 NONAME ; void DumpRenderTreeSupportQt::setMockGeolocationPosition(class QWebPage *, double, double, double) + ?isCommandEnabled@DumpRenderTreeSupportQt@@SA_NPAVQWebPage@@ABVQString@@@Z @ 784 NONAME ; bool DumpRenderTreeSupportQt::isCommandEnabled(class QWebPage *, class QString const &) + ?dumpEditingCallbacks@DumpRenderTreeSupportQt@@SAX_N@Z @ 785 NONAME ; void DumpRenderTreeSupportQt::dumpEditingCallbacks(bool) + ?setActualVisibleContentRect@QWebPage@@QBEXABVQRect@@@Z @ 786 NONAME ; void QWebPage::setActualVisibleContentRect(class QRect const &) const + ?executeCoreCommandByName@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@ABVQString@@1@Z @ 787 NONAME ; void DumpRenderTreeSupportQt::executeCoreCommandByName(class QWebPage *, class QString const &, class QString const &) + ?resetGeolocationMock@DumpRenderTreeSupportQt@@SAXPAVQWebPage@@@Z @ 788 NONAME ; void DumpRenderTreeSupportQt::resetGeolocationMock(class QWebPage *) + ?removeWhiteListAccessFromOrigin@DumpRenderTreeSupportQt@@SAXABVQString@@00_N@Z @ 789 NONAME ; void DumpRenderTreeSupportQt::removeWhiteListAccessFromOrigin(class QString const &, class QString const &, class QString const &, bool) + ??0QDRTNode@@QAE@ABV0@@Z @ 790 NONAME ; QDRTNode::QDRTNode(class QDRTNode const &) + ?removeMockDeviceOrientation@DumpRenderTreeSupportQt@@SAXXZ @ 791 NONAME ; void DumpRenderTreeSupportQt::removeMockDeviceOrientation(void) + ??4QWebScriptWorld@@QAEAAV0@ABV0@@Z @ 792 NONAME ; class QWebScriptWorld & QWebScriptWorld::operator=(class QWebScriptWorld const &) + ?javaScriptObjectsCount@DumpRenderTreeSupportQt@@SAHXZ @ 793 NONAME ; int DumpRenderTreeSupportQt::javaScriptObjectsCount(void) + ?world@QWebScriptWorld@@QBEPAVDOMWrapperWorld@WebCore@@XZ @ 794 NONAME ; class WebCore::DOMWrapperWorld * QWebScriptWorld::world(void) const + ?simulateDesktopNotificationClick@DumpRenderTreeSupportQt@@SAXABVQString@@@Z @ 795 NONAME ; void DumpRenderTreeSupportQt::simulateDesktopNotificationClick(class QString const &) + ?ensureShadowRoot@DumpRenderTreeSupportQt@@SA?AVQVariant@@ABVQWebElement@@@Z @ 796 NONAME ; class QVariant DumpRenderTreeSupportQt::ensureShadowRoot(class QWebElement const &) \ No newline at end of file diff --git a/src/3rdparty/webkit/Source/WebKit/qt/symbian/eabi/QtWebKitu.def b/src/3rdparty/webkit/Source/WebKit/qt/symbian/eabi/QtWebKitu.def index 176b9a1..d948de4 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/symbian/eabi/QtWebKitu.def +++ b/src/3rdparty/webkit/Source/WebKit/qt/symbian/eabi/QtWebKitu.def @@ -1,847 +1,880 @@ -EXPORTS - _Z10qt_drt_runb @ 1 NONAME - _Z14qWebKitVersionv @ 2 NONAME - _Z19qWebKitMajorVersionv @ 3 NONAME - _Z19qWebKitMinorVersionv @ 4 NONAME - _Z20qt_dump_frame_loaderb @ 5 NONAME - _Z20qt_webpage_groupNameP8QWebPage @ 6 NONAME - _Z21qt_drt_clearFrameNameP9QWebFrame @ 7 NONAME - _Z21qt_drt_pauseAnimationP9QWebFrameRK7QStringdS3_ @ 8 NONAME - _Z23qt_webpage_setGroupNameP8QWebPageRK7QString @ 9 NONAME - _Z25qt_dump_editing_callbacksb @ 10 NONAME - _Z27qt_dump_set_accepts_editingb @ 11 NONAME - _Z29qt_drt_javaScriptObjectsCountv @ 12 NONAME - _Z31qt_drt_garbageCollector_collectv @ 13 NONAME - _Z31qt_drt_numberOfActiveAnimationsP9QWebFrame @ 14 NONAME - _Z31qt_dump_resource_load_callbacksb @ 15 NONAME - _Z32qt_drt_pauseTransitionOfPropertyP9QWebFrameRK7QStringdS3_ @ 16 NONAME - _Z33qt_drt_overwritePluginDirectoriesv @ 17 NONAME - _Z36qt_drt_setJavaScriptProfilingEnabledP9QWebFrameb @ 18 NONAME - _Z48qt_drt_garbageCollector_collectOnAlternateThreadb @ 19 NONAME - _ZN11QWebElement11encloseWithERK7QString @ 20 NONAME - _ZN11QWebElement11encloseWithERKS_ @ 21 NONAME - _ZN11QWebElement11removeClassERK7QString @ 22 NONAME - _ZN11QWebElement11setInnerXmlERK7QString @ 23 NONAME - _ZN11QWebElement11setOuterXmlERK7QString @ 24 NONAME - _ZN11QWebElement11toggleClassERK7QString @ 25 NONAME - _ZN11QWebElement12appendInsideERK7QString @ 26 NONAME - _ZN11QWebElement12appendInsideERKS_ @ 27 NONAME - _ZN11QWebElement12setAttributeERK7QStringS2_ @ 28 NONAME - _ZN11QWebElement12setPlainTextERK7QString @ 29 NONAME - _ZN11QWebElement13appendOutsideERK7QString @ 30 NONAME - _ZN11QWebElement13appendOutsideERKS_ @ 31 NONAME - _ZN11QWebElement13prependInsideERK7QString @ 32 NONAME - _ZN11QWebElement13prependInsideERKS_ @ 33 NONAME - _ZN11QWebElement14prependOutsideERK7QString @ 34 NONAME - _ZN11QWebElement14prependOutsideERKS_ @ 35 NONAME - _ZN11QWebElement14removeChildrenEv @ 36 NONAME ABSENT - _ZN11QWebElement14setAttributeNSERK7QStringS2_S2_ @ 37 NONAME - _ZN11QWebElement15removeAttributeERK7QString @ 38 NONAME - _ZN11QWebElement16enclosingElementEPN7WebCore4NodeE @ 39 NONAME - _ZN11QWebElement16setStylePropertyERK7QStringS2_ @ 40 NONAME - _ZN11QWebElement16takeFromDocumentEv @ 41 NONAME - _ZN11QWebElement17removeAttributeNSERK7QStringS2_ @ 42 NONAME - _ZN11QWebElement18evaluateJavaScriptERK7QString @ 43 NONAME - _ZN11QWebElement18removeFromDocumentEv @ 44 NONAME - _ZN11QWebElement19encloseContentsWithERK7QString @ 45 NONAME - _ZN11QWebElement19encloseContentsWithERKS_ @ 46 NONAME - _ZN11QWebElement7replaceERK7QString @ 47 NONAME - _ZN11QWebElement7replaceERKS_ @ 48 NONAME - _ZN11QWebElement8addClassERK7QString @ 49 NONAME - _ZN11QWebElement8setFocusEv @ 50 NONAME - _ZN11QWebElementC1EPN7WebCore4NodeE @ 51 NONAME - _ZN11QWebElementC1EPN7WebCore7ElementE @ 52 NONAME - _ZN11QWebElementC1ERKS_ @ 53 NONAME - _ZN11QWebElementC1Ev @ 54 NONAME - _ZN11QWebElementC2EPN7WebCore4NodeE @ 55 NONAME - _ZN11QWebElementC2EPN7WebCore7ElementE @ 56 NONAME - _ZN11QWebElementC2ERKS_ @ 57 NONAME - _ZN11QWebElementC2Ev @ 58 NONAME - _ZN11QWebElementD1Ev @ 59 NONAME - _ZN11QWebElementD2Ev @ 60 NONAME - _ZN11QWebElementaSERKS_ @ 61 NONAME - _ZN11QWebHistory12restoreStateERK10QByteArray @ 62 NONAME ABSENT - _ZN11QWebHistory19setMaximumItemCountEi @ 63 NONAME - _ZN11QWebHistory4backEv @ 64 NONAME - _ZN11QWebHistory5clearEv @ 65 NONAME - _ZN11QWebHistory7forwardEv @ 66 NONAME - _ZN11QWebHistory8goToItemERK15QWebHistoryItem @ 67 NONAME - _ZN11QWebHistoryC1Ev @ 68 NONAME - _ZN11QWebHistoryC2Ev @ 69 NONAME - _ZN11QWebHistoryD1Ev @ 70 NONAME - _ZN11QWebHistoryD2Ev @ 71 NONAME - _ZN12QWebDatabase14removeDatabaseERKS_ @ 72 NONAME - _ZN12QWebDatabase18removeAllDatabasesEv @ 73 NONAME - _ZN12QWebDatabaseC1EP19QWebDatabasePrivate @ 74 NONAME - _ZN12QWebDatabaseC1ERKS_ @ 75 NONAME - _ZN12QWebDatabaseC2EP19QWebDatabasePrivate @ 76 NONAME - _ZN12QWebDatabaseC2ERKS_ @ 77 NONAME - _ZN12QWebDatabaseD1Ev @ 78 NONAME - _ZN12QWebDatabaseD2Ev @ 79 NONAME - _ZN12QWebDatabaseaSERKS_ @ 80 NONAME - _ZN12QWebSettings10iconForUrlERK4QUrl @ 81 NONAME - _ZN12QWebSettings10webGraphicENS_10WebGraphicE @ 82 NONAME - _ZN12QWebSettings11setFontSizeENS_8FontSizeEi @ 83 NONAME - _ZN12QWebSettings12setAttributeENS_12WebAttributeEb @ 84 NONAME - _ZN12QWebSettings13resetFontSizeENS_8FontSizeE @ 85 NONAME - _ZN12QWebSettings13setFontFamilyENS_10FontFamilyERK7QString @ 86 NONAME - _ZN12QWebSettings13setWebGraphicENS_10WebGraphicERK7QPixmap @ 87 NONAME - _ZN12QWebSettings14globalSettingsEv @ 88 NONAME - _ZN12QWebSettings14pluginDatabaseEv @ 89 NONAME ABSENT - _ZN12QWebSettings14resetAttributeENS_12WebAttributeE @ 90 NONAME - _ZN12QWebSettings15resetFontFamilyENS_10FontFamilyE @ 91 NONAME - _ZN12QWebSettings16iconDatabasePathEv @ 92 NONAME - _ZN12QWebSettings17clearIconDatabaseEv @ 93 NONAME - _ZN12QWebSettings17clearMemoryCachesEv @ 94 NONAME - _ZN12QWebSettings18offlineStoragePathEv @ 95 NONAME - _ZN12QWebSettings19maximumPagesInCacheEv @ 96 NONAME - _ZN12QWebSettings19setIconDatabasePathERK7QString @ 97 NONAME - _ZN12QWebSettings19setLocalStoragePathERK7QString @ 98 NONAME - _ZN12QWebSettings20setUserStyleSheetUrlERK4QUrl @ 99 NONAME - _ZN12QWebSettings21setOfflineStoragePathERK7QString @ 100 NONAME - _ZN12QWebSettings22setDefaultTextEncodingERK7QString @ 101 NONAME - _ZN12QWebSettings22setMaximumPagesInCacheEi @ 102 NONAME - _ZN12QWebSettings23enablePersistentStorageERK7QString @ 103 NONAME - _ZN12QWebSettings24setObjectCacheCapacitiesEiii @ 104 NONAME - _ZN12QWebSettings26offlineStorageDefaultQuotaEv @ 105 NONAME - _ZN12QWebSettings29setOfflineStorageDefaultQuotaEx @ 106 NONAME - _ZN12QWebSettings30offlineWebApplicationCachePathEv @ 107 NONAME - _ZN12QWebSettings31offlineWebApplicationCacheQuotaEv @ 108 NONAME - _ZN12QWebSettings33setOfflineWebApplicationCachePathERK7QString @ 109 NONAME - _ZN12QWebSettings34setOfflineWebApplicationCacheQuotaEx @ 110 NONAME - _ZN12QWebSettingsC1EPN7WebCore8SettingsE @ 111 NONAME - _ZN12QWebSettingsC1Ev @ 112 NONAME - _ZN12QWebSettingsC2EPN7WebCore8SettingsE @ 113 NONAME - _ZN12QWebSettingsC2Ev @ 114 NONAME - _ZN12QWebSettingsD1Ev @ 115 NONAME - _ZN12QWebSettingsD2Ev @ 116 NONAME - _ZN13QWebInspector11qt_metacallEN11QMetaObject4CallEiPPv @ 117 NONAME - _ZN13QWebInspector11qt_metacastEPKc @ 118 NONAME - _ZN13QWebInspector11resizeEventEP12QResizeEvent @ 119 NONAME - _ZN13QWebInspector16staticMetaObjectE @ 120 NONAME DATA 16 - _ZN13QWebInspector18windowTitleChangedERK7QString @ 121 NONAME ABSENT - _ZN13QWebInspector19getStaticMetaObjectEv @ 122 NONAME - _ZN13QWebInspector5eventEP6QEvent @ 123 NONAME - _ZN13QWebInspector7setPageEP8QWebPage @ 124 NONAME - _ZN13QWebInspector9hideEventEP10QHideEvent @ 125 NONAME - _ZN13QWebInspector9showEventEP10QShowEvent @ 126 NONAME - _ZN13QWebInspectorC1EP7QWidget @ 127 NONAME - _ZN13QWebInspectorC2EP7QWidget @ 128 NONAME - _ZN13QWebInspectorD0Ev @ 129 NONAME - _ZN13QWebInspectorD1Ev @ 130 NONAME - _ZN13QWebInspectorD2Ev @ 131 NONAME - _ZN14QWebPluginInfo10setEnabledEb @ 132 NONAME - _ZN14QWebPluginInfoC1EPN7WebCore13PluginPackageE @ 133 NONAME - _ZN14QWebPluginInfoC1ERKS_ @ 134 NONAME - _ZN14QWebPluginInfoC1Ev @ 135 NONAME - _ZN14QWebPluginInfoC2EPN7WebCore13PluginPackageE @ 136 NONAME - _ZN14QWebPluginInfoC2ERKS_ @ 137 NONAME - _ZN14QWebPluginInfoC2Ev @ 138 NONAME - _ZN14QWebPluginInfoD1Ev @ 139 NONAME - _ZN14QWebPluginInfoD2Ev @ 140 NONAME - _ZN14QWebPluginInfoaSERKS_ @ 141 NONAME - _ZN15QWebHistoryItem11setUserDataERK8QVariant @ 142 NONAME - _ZN15QWebHistoryItemC1EP22QWebHistoryItemPrivate @ 143 NONAME - _ZN15QWebHistoryItemC1ERKS_ @ 144 NONAME - _ZN15QWebHistoryItemC2EP22QWebHistoryItemPrivate @ 145 NONAME - _ZN15QWebHistoryItemC2ERKS_ @ 146 NONAME - _ZN15QWebHistoryItemD1Ev @ 147 NONAME - _ZN15QWebHistoryItemD2Ev @ 148 NONAME - _ZN15QWebHistoryItemaSERKS_ @ 149 NONAME - _ZN16QGraphicsWebView10loadFailedEv @ 150 NONAME ABSENT - _ZN16QGraphicsWebView10sceneEventEP6QEvent @ 151 NONAME - _ZN16QGraphicsWebView10setContentERK10QByteArrayRK7QStringRK4QUrl @ 152 NONAME - _ZN16QGraphicsWebView10urlChangedERK4QUrl @ 153 NONAME - _ZN16QGraphicsWebView10wheelEventEP24QGraphicsSceneWheelEvent @ 154 NONAME - _ZN16QGraphicsWebView11iconChangedEv @ 155 NONAME - _ZN16QGraphicsWebView11loadStartedEv @ 156 NONAME - _ZN16QGraphicsWebView11qt_metacallEN11QMetaObject4CallEiPPv @ 157 NONAME - _ZN16QGraphicsWebView11qt_metacastEPKc @ 158 NONAME - _ZN16QGraphicsWebView11setGeometryERK6QRectF @ 159 NONAME - _ZN16QGraphicsWebView12focusInEventEP11QFocusEvent @ 160 NONAME - _ZN16QGraphicsWebView12loadFinishedEv @ 161 NONAME ABSENT - _ZN16QGraphicsWebView12titleChangedERK7QString @ 162 NONAME - _ZN16QGraphicsWebView13dragMoveEventEP27QGraphicsSceneDragDropEvent @ 163 NONAME - _ZN16QGraphicsWebView13focusOutEventEP11QFocusEvent @ 164 NONAME - _ZN16QGraphicsWebView13keyPressEventEP9QKeyEvent @ 165 NONAME - _ZN16QGraphicsWebView13setZoomFactorEf @ 166 NONAME - _ZN16QGraphicsWebView13statusChangedEv @ 167 NONAME ABSENT - _ZN16QGraphicsWebView14dragEnterEventEP27QGraphicsSceneDragDropEvent @ 168 NONAME - _ZN16QGraphicsWebView14dragLeaveEventEP27QGraphicsSceneDragDropEvent @ 169 NONAME - _ZN16QGraphicsWebView14hoverMoveEventEP24QGraphicsSceneHoverEvent @ 170 NONAME - _ZN16QGraphicsWebView14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 171 NONAME - _ZN16QGraphicsWebView14setInteractiveEb @ 172 NONAME ABSENT - _ZN16QGraphicsWebView14updateGeometryEv @ 173 NONAME - _ZN16QGraphicsWebView15hoverLeaveEventEP24QGraphicsSceneHoverEvent @ 174 NONAME - _ZN16QGraphicsWebView15keyReleaseEventEP9QKeyEvent @ 175 NONAME - _ZN16QGraphicsWebView15mousePressEventEP24QGraphicsSceneMouseEvent @ 176 NONAME - _ZN16QGraphicsWebView15progressChangedEf @ 177 NONAME ABSENT - _ZN16QGraphicsWebView16contextMenuEventEP30QGraphicsSceneContextMenuEvent @ 178 NONAME - _ZN16QGraphicsWebView16inputMethodEventEP17QInputMethodEvent @ 179 NONAME - _ZN16QGraphicsWebView16staticMetaObjectE @ 180 NONAME DATA 16 - _ZN16QGraphicsWebView17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 181 NONAME - _ZN16QGraphicsWebView17zoomFactorChangedEv @ 182 NONAME ABSENT - _ZN16QGraphicsWebView18focusNextPrevChildEb @ 183 NONAME - _ZN16QGraphicsWebView19getStaticMetaObjectEv @ 184 NONAME - _ZN16QGraphicsWebView20interactivityChangedEv @ 185 NONAME ABSENT - _ZN16QGraphicsWebView21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent @ 186 NONAME - _ZN16QGraphicsWebView4backEv @ 187 NONAME - _ZN16QGraphicsWebView4loadERK15QNetworkRequestN21QNetworkAccessManager9OperationERK10QByteArray @ 188 NONAME - _ZN16QGraphicsWebView4loadERK4QUrl @ 189 NONAME - _ZN16QGraphicsWebView4stopEv @ 190 NONAME - _ZN16QGraphicsWebView5eventEP6QEvent @ 191 NONAME - _ZN16QGraphicsWebView5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 192 NONAME - _ZN16QGraphicsWebView6reloadEv @ 193 NONAME - _ZN16QGraphicsWebView6setUrlERK4QUrl @ 194 NONAME - _ZN16QGraphicsWebView7forwardEv @ 195 NONAME - _ZN16QGraphicsWebView7setHtmlERK7QStringRK4QUrl @ 196 NONAME - _ZN16QGraphicsWebView7setPageEP8QWebPage @ 197 NONAME - _ZN16QGraphicsWebView9dropEventEP27QGraphicsSceneDragDropEvent @ 198 NONAME - _ZN16QGraphicsWebViewC1EP13QGraphicsItem @ 199 NONAME - _ZN16QGraphicsWebViewC2EP13QGraphicsItem @ 200 NONAME - _ZN16QGraphicsWebViewD0Ev @ 201 NONAME - _ZN16QGraphicsWebViewD1Ev @ 202 NONAME - _ZN16QGraphicsWebViewD2Ev @ 203 NONAME - _ZN17QWebHitTestResultC1EP24QWebHitTestResultPrivate @ 204 NONAME - _ZN17QWebHitTestResultC1ERKS_ @ 205 NONAME - _ZN17QWebHitTestResultC1Ev @ 206 NONAME - _ZN17QWebHitTestResultC2EP24QWebHitTestResultPrivate @ 207 NONAME - _ZN17QWebHitTestResultC2ERKS_ @ 208 NONAME - _ZN17QWebHitTestResultC2Ev @ 209 NONAME - _ZN17QWebHitTestResultD1Ev @ 210 NONAME - _ZN17QWebHitTestResultD2Ev @ 211 NONAME - _ZN17QWebHitTestResultaSERKS_ @ 212 NONAME - _ZN17QWebPluginFactory11qt_metacallEN11QMetaObject4CallEiPPv @ 213 NONAME - _ZN17QWebPluginFactory11qt_metacastEPKc @ 214 NONAME - _ZN17QWebPluginFactory14refreshPluginsEv @ 215 NONAME - _ZN17QWebPluginFactory16staticMetaObjectE @ 216 NONAME DATA 16 - _ZN17QWebPluginFactory19getStaticMetaObjectEv @ 217 NONAME - _ZN17QWebPluginFactory9extensionENS_9ExtensionEPKNS_15ExtensionOptionEPNS_15ExtensionReturnE @ 218 NONAME - _ZN17QWebPluginFactoryC2EP7QObject @ 219 NONAME - _ZN17QWebPluginFactoryD0Ev @ 220 NONAME - _ZN17QWebPluginFactoryD1Ev @ 221 NONAME - _ZN17QWebPluginFactoryD2Ev @ 222 NONAME - _ZN18QWebPluginDatabase11qt_metacallEN11QMetaObject4CallEiPPv @ 223 NONAME - _ZN18QWebPluginDatabase11qt_metacastEPKc @ 224 NONAME - _ZN18QWebPluginDatabase13addSearchPathERK7QString @ 225 NONAME - _ZN18QWebPluginDatabase14setSearchPathsERK11QStringList @ 226 NONAME - _ZN18QWebPluginDatabase16staticMetaObjectE @ 227 NONAME DATA 16 - _ZN18QWebPluginDatabase17pluginForMimeTypeERK7QString @ 228 NONAME - _ZN18QWebPluginDatabase18defaultSearchPathsEv @ 229 NONAME - _ZN18QWebPluginDatabase19getStaticMetaObjectEv @ 230 NONAME - _ZN18QWebPluginDatabase29setPreferredPluginForMimeTypeERK7QStringRK14QWebPluginInfo @ 231 NONAME - _ZN18QWebPluginDatabase7refreshEv @ 232 NONAME - _ZN18QWebPluginDatabaseC1EP7QObject @ 233 NONAME - _ZN18QWebPluginDatabaseC2EP7QObject @ 234 NONAME - _ZN18QWebPluginDatabaseD0Ev @ 235 NONAME - _ZN18QWebPluginDatabaseD1Ev @ 236 NONAME - _ZN18QWebPluginDatabaseD2Ev @ 237 NONAME - _ZN18QWebSecurityOrigin10allOriginsEv @ 238 NONAME - _ZN18QWebSecurityOrigin12localSchemesEv @ 239 NONAME - _ZN18QWebSecurityOrigin14addLocalSchemeERK7QString @ 240 NONAME - _ZN18QWebSecurityOrigin16setDatabaseQuotaEx @ 241 NONAME - _ZN18QWebSecurityOrigin17removeLocalSchemeERK7QString @ 242 NONAME - _ZN18QWebSecurityOrigin25whiteListAccessFromOriginERK7QStringS2_S2_b @ 243 NONAME ABSENT - _ZN18QWebSecurityOrigin27resetOriginAccessWhiteListsEv @ 244 NONAME ABSENT - _ZN18QWebSecurityOriginC1EP25QWebSecurityOriginPrivate @ 245 NONAME - _ZN18QWebSecurityOriginC1ERKS_ @ 246 NONAME - _ZN18QWebSecurityOriginC2EP25QWebSecurityOriginPrivate @ 247 NONAME - _ZN18QWebSecurityOriginC2ERKS_ @ 248 NONAME - _ZN18QWebSecurityOriginD1Ev @ 249 NONAME - _ZN18QWebSecurityOriginD2Ev @ 250 NONAME - _ZN18QWebSecurityOriginaSERKS_ @ 251 NONAME - _ZN20QWebHistoryInterface11qt_metacallEN11QMetaObject4CallEiPPv @ 252 NONAME - _ZN20QWebHistoryInterface11qt_metacastEPKc @ 253 NONAME - _ZN20QWebHistoryInterface16defaultInterfaceEv @ 254 NONAME - _ZN20QWebHistoryInterface16staticMetaObjectE @ 255 NONAME DATA 16 - _ZN20QWebHistoryInterface19getStaticMetaObjectEv @ 256 NONAME - _ZN20QWebHistoryInterface19setDefaultInterfaceEPS_ @ 257 NONAME - _ZN20QWebHistoryInterfaceC2EP7QObject @ 258 NONAME - _ZN20QWebHistoryInterfaceD0Ev @ 259 NONAME - _ZN20QWebHistoryInterfaceD1Ev @ 260 NONAME - _ZN20QWebHistoryInterfaceD2Ev @ 261 NONAME - _ZN8QWebPage10chooseFileEP9QWebFrameRK7QString @ 262 NONAME - _ZN8QWebPage10setPaletteERK8QPalette @ 263 NONAME - _ZN8QWebPage11linkClickedERK4QUrl @ 264 NONAME - _ZN8QWebPage11linkHoveredERK7QStringS2_S2_ @ 265 NONAME - _ZN8QWebPage11loadStartedEv @ 266 NONAME - _ZN8QWebPage11qt_metacallEN11QMetaObject4CallEiPPv @ 267 NONAME - _ZN8QWebPage11qt_metacastEPKc @ 268 NONAME - _ZN8QWebPage12createPluginERK7QStringRK4QUrlRK11QStringListS8_ @ 269 NONAME - _ZN8QWebPage12createWindowENS_13WebWindowTypeE @ 270 NONAME - _ZN8QWebPage12frameCreatedEP9QWebFrame @ 271 NONAME - _ZN8QWebPage12loadFinishedEb @ 272 NONAME - _ZN8QWebPage12loadProgressEi @ 273 NONAME - _ZN8QWebPage13triggerActionENS_9WebActionEb @ 274 NONAME - _ZN8QWebPage14printRequestedEP9QWebFrame @ 275 NONAME - _ZN8QWebPage15contentsChangedEv @ 276 NONAME - _ZN8QWebPage15javaScriptAlertEP9QWebFrameRK7QString @ 277 NONAME - _ZN8QWebPage15scrollRequestedEiiRK5QRect @ 278 NONAME - _ZN8QWebPage16javaScriptPromptEP9QWebFrameRK7QStringS4_PS2_ @ 279 NONAME - _ZN8QWebPage16repaintRequestedERK5QRect @ 280 NONAME - _ZN8QWebPage16selectionChangedEv @ 281 NONAME - _ZN8QWebPage16setPluginFactoryEP17QWebPluginFactory @ 282 NONAME - _ZN8QWebPage16staticMetaObjectE @ 283 NONAME DATA 16 - _ZN8QWebPage16statusBarMessageERK7QString @ 284 NONAME - _ZN8QWebPage17downloadRequestedERK15QNetworkRequest @ 285 NONAME - _ZN8QWebPage17javaScriptConfirmEP9QWebFrameRK7QString @ 286 NONAME - _ZN8QWebPage17microFocusChangedEv @ 287 NONAME - _ZN8QWebPage18focusNextPrevChildEb @ 288 NONAME - _ZN8QWebPage18setContentEditableEb @ 289 NONAME - _ZN8QWebPage18unsupportedContentEP13QNetworkReply @ 290 NONAME - _ZN8QWebPage19getStaticMetaObjectEv @ 291 NONAME - _ZN8QWebPage20windowCloseRequestedEv @ 292 NONAME - _ZN8QWebPage21databaseQuotaExceededEP9QWebFrame7QString @ 293 NONAME - _ZN8QWebPage21webInspectorTriggeredERK11QWebElement @ 294 NONAME ABSENT - _ZN8QWebPage23acceptNavigationRequestEP9QWebFrameRK15QNetworkRequestNS_14NavigationTypeE @ 295 NONAME - _ZN8QWebPage23geometryChangeRequestedERK5QRect @ 296 NONAME - _ZN8QWebPage23saveFrameStateRequestedEP9QWebFrameP15QWebHistoryItem @ 297 NONAME - _ZN8QWebPage23setLinkDelegationPolicyENS_20LinkDelegationPolicyE @ 298 NONAME - _ZN8QWebPage23setNetworkAccessManagerEP21QNetworkAccessManager @ 299 NONAME - _ZN8QWebPage23swallowContextMenuEventEP17QContextMenuEvent @ 300 NONAME - _ZN8QWebPage24javaScriptConsoleMessageERK7QStringiS2_ @ 301 NONAME - _ZN8QWebPage25createStandardContextMenuEv @ 302 NONAME - _ZN8QWebPage25shouldInterruptJavaScriptEv @ 303 NONAME - _ZN8QWebPage26restoreFrameStateRequestedEP9QWebFrame @ 304 NONAME - _ZN8QWebPage28setForwardUnsupportedContentEb @ 305 NONAME - _ZN8QWebPage30updatePositionDependentActionsERK6QPoint @ 306 NONAME - _ZN8QWebPage32menuBarVisibilityChangeRequestedEb @ 307 NONAME - _ZN8QWebPage32toolBarVisibilityChangeRequestedEb @ 308 NONAME - _ZN8QWebPage34statusBarVisibilityChangeRequestedEb @ 309 NONAME - _ZN8QWebPage5eventEP6QEvent @ 310 NONAME - _ZN8QWebPage7setViewEP7QWidget @ 311 NONAME - _ZN8QWebPage8findTextERK7QString6QFlagsINS_8FindFlagEE @ 312 NONAME - _ZN8QWebPage9extensionENS_9ExtensionEPKNS_15ExtensionOptionEPNS_15ExtensionReturnE @ 313 NONAME - _ZN8QWebPageC1EP7QObject @ 314 NONAME - _ZN8QWebPageC2EP7QObject @ 315 NONAME - _ZN8QWebPageD0Ev @ 316 NONAME - _ZN8QWebPageD1Ev @ 317 NONAME - _ZN8QWebPageD2Ev @ 318 NONAME - _ZN8QWebView10paintEventEP11QPaintEvent @ 319 NONAME - _ZN8QWebView10setContentERK10QByteArrayRK7QStringRK4QUrl @ 320 NONAME - _ZN8QWebView10urlChangedERK4QUrl @ 321 NONAME - _ZN8QWebView10wheelEventEP11QWheelEvent @ 322 NONAME - _ZN8QWebView11changeEventEP6QEvent @ 323 NONAME - _ZN8QWebView11iconChangedEv @ 324 NONAME - _ZN8QWebView11linkClickedERK4QUrl @ 325 NONAME - _ZN8QWebView11loadStartedEv @ 326 NONAME - _ZN8QWebView11qt_metacallEN11QMetaObject4CallEiPPv @ 327 NONAME - _ZN8QWebView11qt_metacastEPKc @ 328 NONAME - _ZN8QWebView11resizeEventEP12QResizeEvent @ 329 NONAME - _ZN8QWebView12createWindowEN8QWebPage13WebWindowTypeE @ 330 NONAME - _ZN8QWebView12focusInEventEP11QFocusEvent @ 331 NONAME - _ZN8QWebView12loadFinishedEb @ 332 NONAME - _ZN8QWebView12loadProgressEi @ 333 NONAME - _ZN8QWebView12titleChangedERK7QString @ 334 NONAME - _ZN8QWebView13dragMoveEventEP14QDragMoveEvent @ 335 NONAME - _ZN8QWebView13focusOutEventEP11QFocusEvent @ 336 NONAME - _ZN8QWebView13keyPressEventEP9QKeyEvent @ 337 NONAME - _ZN8QWebView13setRenderHintEN8QPainter10RenderHintEb @ 338 NONAME - _ZN8QWebView13setZoomFactorEf @ 339 NONAME - _ZN8QWebView14dragEnterEventEP15QDragEnterEvent @ 340 NONAME - _ZN8QWebView14dragLeaveEventEP15QDragLeaveEvent @ 341 NONAME - _ZN8QWebView14mouseMoveEventEP11QMouseEvent @ 342 NONAME - _ZN8QWebView14setRenderHintsE6QFlagsIN8QPainter10RenderHintEE @ 343 NONAME - _ZN8QWebView15keyReleaseEventEP9QKeyEvent @ 344 NONAME - _ZN8QWebView15mousePressEventEP11QMouseEvent @ 345 NONAME - _ZN8QWebView16contextMenuEventEP17QContextMenuEvent @ 346 NONAME - _ZN8QWebView16inputMethodEventEP17QInputMethodEvent @ 347 NONAME - _ZN8QWebView16selectionChangedEv @ 348 NONAME - _ZN8QWebView16staticMetaObjectE @ 349 NONAME DATA 16 - _ZN8QWebView16statusBarMessageERK7QString @ 350 NONAME - _ZN8QWebView17mouseReleaseEventEP11QMouseEvent @ 351 NONAME - _ZN8QWebView17triggerPageActionEN8QWebPage9WebActionEb @ 352 NONAME - _ZN8QWebView18focusNextPrevChildEb @ 353 NONAME - _ZN8QWebView18guessUrlFromStringERK7QString @ 354 NONAME ABSENT - _ZN8QWebView19getStaticMetaObjectEv @ 355 NONAME - _ZN8QWebView21mouseDoubleClickEventEP11QMouseEvent @ 356 NONAME - _ZN8QWebView21setTextSizeMultiplierEf @ 357 NONAME - _ZN8QWebView4backEv @ 358 NONAME - _ZN8QWebView4loadERK15QNetworkRequestN21QNetworkAccessManager9OperationERK10QByteArray @ 359 NONAME - _ZN8QWebView4loadERK4QUrl @ 360 NONAME - _ZN8QWebView4stopEv @ 361 NONAME - _ZN8QWebView5eventEP6QEvent @ 362 NONAME - _ZN8QWebView6reloadEv @ 363 NONAME - _ZN8QWebView6setUrlERK4QUrl @ 364 NONAME - _ZN8QWebView7forwardEv @ 365 NONAME - _ZN8QWebView7setHtmlERK7QStringRK4QUrl @ 366 NONAME - _ZN8QWebView7setPageEP8QWebPage @ 367 NONAME - _ZN8QWebView8findTextERK7QString6QFlagsIN8QWebPage8FindFlagEE @ 368 NONAME - _ZN8QWebView9dropEventEP10QDropEvent @ 369 NONAME - _ZN8QWebViewC1EP7QWidget @ 370 NONAME - _ZN8QWebViewC2EP7QWidget @ 371 NONAME - _ZN8QWebViewD0Ev @ 372 NONAME - _ZN8QWebViewD1Ev @ 373 NONAME - _ZN8QWebViewD2Ev @ 374 NONAME - _ZN9QWebFrame10setContentERK10QByteArrayRK7QStringRK4QUrl @ 375 NONAME - _ZN9QWebFrame10urlChangedERK4QUrl @ 376 NONAME - _ZN9QWebFrame11iconChangedEv @ 377 NONAME - _ZN9QWebFrame11loadStartedEv @ 378 NONAME - _ZN9QWebFrame11qt_metacallEN11QMetaObject4CallEiPPv @ 379 NONAME - _ZN9QWebFrame11qt_metacastEPKc @ 380 NONAME - _ZN9QWebFrame12loadFinishedEb @ 381 NONAME - _ZN9QWebFrame12titleChangedERK7QString @ 382 NONAME - _ZN9QWebFrame13setZoomFactorEf @ 383 NONAME - _ZN9QWebFrame15provisionalLoadEv @ 384 NONAME - _ZN9QWebFrame16staticMetaObjectE @ 385 NONAME DATA 16 - _ZN9QWebFrame17setScrollBarValueEN2Qt11OrientationEi @ 386 NONAME - _ZN9QWebFrame17setScrollPositionERK6QPoint @ 387 NONAME - _ZN9QWebFrame18evaluateJavaScriptERK7QString @ 388 NONAME - _ZN9QWebFrame18setScrollBarPolicyEN2Qt11OrientationENS0_15ScrollBarPolicyE @ 389 NONAME - _ZN9QWebFrame19contentsSizeChangedERK5QSize @ 390 NONAME - _ZN9QWebFrame19getStaticMetaObjectEv @ 391 NONAME - _ZN9QWebFrame21setTextSizeMultiplierEf @ 392 NONAME - _ZN9QWebFrame22initialLayoutCompletedEv @ 393 NONAME - _ZN9QWebFrame23setClipRenderToViewportEb @ 394 NONAME ABSENT - _ZN9QWebFrame27addToJavaScriptWindowObjectERK7QStringP7QObject @ 395 NONAME - _ZN9QWebFrame27addToJavaScriptWindowObjectERK7QStringP7QObjectN13QScriptEngine14ValueOwnershipE @ 396 NONAME - _ZN9QWebFrame29javaScriptWindowObjectClearedEv @ 397 NONAME - _ZN9QWebFrame4loadERK15QNetworkRequestN21QNetworkAccessManager9OperationERK10QByteArray @ 398 NONAME - _ZN9QWebFrame4loadERK4QUrl @ 399 NONAME - _ZN9QWebFrame5eventEP6QEvent @ 400 NONAME - _ZN9QWebFrame6renderEP8QPainter @ 401 NONAME - _ZN9QWebFrame6renderEP8QPainterRK7QRegion @ 402 NONAME - _ZN9QWebFrame6scrollEii @ 403 NONAME - _ZN9QWebFrame6setUrlERK4QUrl @ 404 NONAME - _ZN9QWebFrame7setHtmlERK7QStringRK4QUrl @ 405 NONAME - _ZN9QWebFrame8setFocusEv @ 406 NONAME - _ZN9QWebFrameC1EP8QWebPageP13QWebFrameData @ 407 NONAME - _ZN9QWebFrameC1EPS_P13QWebFrameData @ 408 NONAME - _ZN9QWebFrameC2EP8QWebPageP13QWebFrameData @ 409 NONAME - _ZN9QWebFrameC2EPS_P13QWebFrameData @ 410 NONAME - _ZN9QWebFrameD0Ev @ 411 NONAME - _ZN9QWebFrameD1Ev @ 412 NONAME - _ZN9QWebFrameD2Ev @ 413 NONAME - _ZNK11QWebElement10firstChildEv @ 414 NONAME - _ZNK11QWebElement10toInnerXmlEv @ 415 NONAME - _ZNK11QWebElement10toOuterXmlEv @ 416 NONAME - _ZNK11QWebElement11attributeNSERK7QStringS2_S2_ @ 417 NONAME - _ZNK11QWebElement11nextSiblingEv @ 418 NONAME - _ZNK11QWebElement11toPlainTextEv @ 419 NONAME - _ZNK11QWebElement12hasAttributeERK7QString @ 420 NONAME - _ZNK11QWebElement12namespaceUriEv @ 421 NONAME - _ZNK11QWebElement13hasAttributesEv @ 422 NONAME - _ZNK11QWebElement13stylePropertyERK7QStringNS_20StyleResolveStrategyE @ 423 NONAME - _ZNK11QWebElement14hasAttributeNSERK7QStringS2_ @ 424 NONAME - _ZNK11QWebElement15previousSiblingEv @ 425 NONAME - _ZNK11QWebElement5cloneEv @ 426 NONAME - _ZNK11QWebElement6isNullEv @ 427 NONAME - _ZNK11QWebElement6parentEv @ 428 NONAME - _ZNK11QWebElement6prefixEv @ 429 NONAME - _ZNK11QWebElement7classesEv @ 430 NONAME - _ZNK11QWebElement7findAllERK7QString @ 431 NONAME - _ZNK11QWebElement7tagNameEv @ 432 NONAME - _ZNK11QWebElement8documentEv @ 433 NONAME - _ZNK11QWebElement8geometryEv @ 434 NONAME - _ZNK11QWebElement8hasClassERK7QString @ 435 NONAME - _ZNK11QWebElement8hasFocusEv @ 436 NONAME - _ZNK11QWebElement8webFrameEv @ 437 NONAME - _ZNK11QWebElement9attributeERK7QStringS2_ @ 438 NONAME - _ZNK11QWebElement9findFirstERK7QString @ 439 NONAME - _ZNK11QWebElement9lastChildEv @ 440 NONAME - _ZNK11QWebElement9localNameEv @ 441 NONAME - _ZNK11QWebElementeqERKS_ @ 442 NONAME - _ZNK11QWebElementneERKS_ @ 443 NONAME - _ZNK11QWebHistory11currentItemEv @ 444 NONAME - _ZNK11QWebHistory11forwardItemEv @ 445 NONAME - _ZNK11QWebHistory12canGoForwardEv @ 446 NONAME - _ZNK11QWebHistory12forwardItemsEi @ 447 NONAME - _ZNK11QWebHistory16currentItemIndexEv @ 448 NONAME - _ZNK11QWebHistory16maximumItemCountEv @ 449 NONAME - _ZNK11QWebHistory5countEv @ 450 NONAME - _ZNK11QWebHistory5itemsEv @ 451 NONAME - _ZNK11QWebHistory6itemAtEi @ 452 NONAME - _ZNK11QWebHistory8backItemEv @ 453 NONAME - _ZNK11QWebHistory9backItemsEi @ 454 NONAME - _ZNK11QWebHistory9canGoBackEv @ 455 NONAME - _ZNK11QWebHistory9saveStateENS_19HistoryStateVersionE @ 456 NONAME ABSENT - _ZNK12QWebDatabase11displayNameEv @ 457 NONAME - _ZNK12QWebDatabase12expectedSizeEv @ 458 NONAME - _ZNK12QWebDatabase4nameEv @ 459 NONAME - _ZNK12QWebDatabase4sizeEv @ 460 NONAME - _ZNK12QWebDatabase6originEv @ 461 NONAME - _ZNK12QWebDatabase8fileNameEv @ 462 NONAME - _ZNK12QWebSettings10fontFamilyENS_10FontFamilyE @ 463 NONAME - _ZNK12QWebSettings13testAttributeENS_12WebAttributeE @ 464 NONAME - _ZNK12QWebSettings16localStoragePathEv @ 465 NONAME - _ZNK12QWebSettings17userStyleSheetUrlEv @ 466 NONAME - _ZNK12QWebSettings19defaultTextEncodingEv @ 467 NONAME - _ZNK12QWebSettings8fontSizeENS_8FontSizeE @ 468 NONAME - _ZNK13QWebInspector10metaObjectEv @ 469 NONAME - _ZNK13QWebInspector4pageEv @ 470 NONAME - _ZNK13QWebInspector8sizeHintEv @ 471 NONAME - _ZNK14QWebPluginInfo11descriptionEv @ 472 NONAME - _ZNK14QWebPluginInfo16supportsMimeTypeERK7QString @ 473 NONAME - _ZNK14QWebPluginInfo4nameEv @ 474 NONAME - _ZNK14QWebPluginInfo4pathEv @ 475 NONAME - _ZNK14QWebPluginInfo6isNullEv @ 476 NONAME - _ZNK14QWebPluginInfo9isEnabledEv @ 477 NONAME - _ZNK14QWebPluginInfo9mimeTypesEv @ 478 NONAME - _ZNK14QWebPluginInfoeqERKS_ @ 479 NONAME - _ZNK14QWebPluginInfoneERKS_ @ 480 NONAME - _ZNK15QWebHistoryItem11lastVisitedEv @ 481 NONAME - _ZNK15QWebHistoryItem11originalUrlEv @ 482 NONAME - _ZNK15QWebHistoryItem3urlEv @ 483 NONAME - _ZNK15QWebHistoryItem4iconEv @ 484 NONAME - _ZNK15QWebHistoryItem5titleEv @ 485 NONAME - _ZNK15QWebHistoryItem7isValidEv @ 486 NONAME - _ZNK15QWebHistoryItem8userDataEv @ 487 NONAME - _ZNK16QGraphicsWebView10metaObjectEv @ 488 NONAME - _ZNK16QGraphicsWebView10zoomFactorEv @ 489 NONAME - _ZNK16QGraphicsWebView13isInteractiveEv @ 490 NONAME ABSENT - _ZNK16QGraphicsWebView3urlEv @ 491 NONAME - _ZNK16QGraphicsWebView4iconEv @ 492 NONAME - _ZNK16QGraphicsWebView4pageEv @ 493 NONAME - _ZNK16QGraphicsWebView5titleEv @ 494 NONAME - _ZNK16QGraphicsWebView6statusEv @ 495 NONAME ABSENT - _ZNK16QGraphicsWebView6toHtmlEv @ 496 NONAME ABSENT - _ZNK16QGraphicsWebView7historyEv @ 497 NONAME - _ZNK16QGraphicsWebView8progressEv @ 498 NONAME ABSENT - _ZNK16QGraphicsWebView8settingsEv @ 499 NONAME - _ZNK17QWebHitTestResult11linkElementEv @ 500 NONAME - _ZNK17QWebHitTestResult12boundingRectEv @ 501 NONAME - _ZNK17QWebHitTestResult13alternateTextEv @ 502 NONAME - _ZNK17QWebHitTestResult15linkTargetFrameEv @ 503 NONAME - _ZNK17QWebHitTestResult17isContentEditableEv @ 504 NONAME - _ZNK17QWebHitTestResult17isContentSelectedEv @ 505 NONAME - _ZNK17QWebHitTestResult21enclosingBlockElementEv @ 506 NONAME - _ZNK17QWebHitTestResult3posEv @ 507 NONAME - _ZNK17QWebHitTestResult5frameEv @ 508 NONAME - _ZNK17QWebHitTestResult5titleEv @ 509 NONAME - _ZNK17QWebHitTestResult6isNullEv @ 510 NONAME - _ZNK17QWebHitTestResult6pixmapEv @ 511 NONAME - _ZNK17QWebHitTestResult7elementEv @ 512 NONAME - _ZNK17QWebHitTestResult7linkUrlEv @ 513 NONAME - _ZNK17QWebHitTestResult8imageUrlEv @ 514 NONAME - _ZNK17QWebHitTestResult8linkTextEv @ 515 NONAME - _ZNK17QWebHitTestResult9linkTitleEv @ 516 NONAME - _ZNK17QWebPluginFactory10metaObjectEv @ 517 NONAME - _ZNK17QWebPluginFactory17supportsExtensionENS_9ExtensionE @ 518 NONAME - _ZNK17QWebPluginFactory8MimeTypeeqERKS0_ @ 519 NONAME - _ZNK18QWebPluginDatabase10metaObjectEv @ 520 NONAME - _ZNK18QWebPluginDatabase11searchPathsEv @ 521 NONAME - _ZNK18QWebPluginDatabase7pluginsEv @ 522 NONAME - _ZNK18QWebSecurityOrigin13databaseQuotaEv @ 523 NONAME - _ZNK18QWebSecurityOrigin13databaseUsageEv @ 524 NONAME - _ZNK18QWebSecurityOrigin4hostEv @ 525 NONAME - _ZNK18QWebSecurityOrigin4portEv @ 526 NONAME - _ZNK18QWebSecurityOrigin6schemeEv @ 527 NONAME - _ZNK18QWebSecurityOrigin9databasesEv @ 528 NONAME - _ZNK20QWebHistoryInterface10metaObjectEv @ 529 NONAME - _ZNK8QWebPage10isModifiedEv @ 530 NONAME - _ZNK8QWebPage10metaObjectEv @ 531 NONAME - _ZNK8QWebPage10totalBytesEv @ 532 NONAME - _ZNK8QWebPage12currentFrameEv @ 533 NONAME - _ZNK8QWebPage12selectedTextEv @ 534 NONAME - _ZNK8QWebPage12viewportSizeEv @ 535 NONAME - _ZNK8QWebPage13bytesReceivedEv @ 536 NONAME - _ZNK8QWebPage13pluginFactoryEv @ 537 NONAME - _ZNK8QWebPage15setViewportSizeERK5QSize @ 538 NONAME - _ZNK8QWebPage15userAgentForUrlERK4QUrl @ 539 NONAME - _ZNK8QWebPage16inputMethodQueryEN2Qt16InputMethodQueryE @ 540 NONAME - _ZNK8QWebPage17fixedContentsSizeEv @ 541 NONAME ABSENT - _ZNK8QWebPage17isContentEditableEv @ 542 NONAME - _ZNK8QWebPage17supportsExtensionENS_9ExtensionE @ 543 NONAME - _ZNK8QWebPage20linkDelegationPolicyEv @ 544 NONAME - _ZNK8QWebPage20networkAccessManagerEv @ 545 NONAME - _ZNK8QWebPage20setFixedContentsSizeERK5QSize @ 546 NONAME ABSENT - _ZNK8QWebPage25forwardUnsupportedContentEv @ 547 NONAME - _ZNK8QWebPage4viewEv @ 548 NONAME - _ZNK8QWebPage6actionENS_9WebActionE @ 549 NONAME - _ZNK8QWebPage7frameAtERK6QPoint @ 550 NONAME - _ZNK8QWebPage7historyEv @ 551 NONAME - _ZNK8QWebPage7paletteEv @ 552 NONAME - _ZNK8QWebPage8settingsEv @ 553 NONAME - _ZNK8QWebPage9mainFrameEv @ 554 NONAME - _ZNK8QWebPage9undoStackEv @ 555 NONAME - _ZNK8QWebView10isModifiedEv @ 556 NONAME - _ZNK8QWebView10metaObjectEv @ 557 NONAME - _ZNK8QWebView10pageActionEN8QWebPage9WebActionE @ 558 NONAME - _ZNK8QWebView10zoomFactorEv @ 559 NONAME - _ZNK8QWebView11renderHintsEv @ 560 NONAME - _ZNK8QWebView12selectedTextEv @ 561 NONAME - _ZNK8QWebView16inputMethodQueryEN2Qt16InputMethodQueryE @ 562 NONAME - _ZNK8QWebView18textSizeMultiplierEv @ 563 NONAME - _ZNK8QWebView3urlEv @ 564 NONAME - _ZNK8QWebView4iconEv @ 565 NONAME - _ZNK8QWebView4pageEv @ 566 NONAME - _ZNK8QWebView5printEP8QPrinter @ 567 NONAME - _ZNK8QWebView5titleEv @ 568 NONAME - _ZNK8QWebView7historyEv @ 569 NONAME - _ZNK8QWebView8settingsEv @ 570 NONAME - _ZNK8QWebView8sizeHintEv @ 571 NONAME - _ZNK9QWebFrame10metaObjectEv @ 572 NONAME - _ZNK9QWebFrame10zoomFactorEv @ 573 NONAME - _ZNK9QWebFrame11childFramesEv @ 574 NONAME - _ZNK9QWebFrame11parentFrameEv @ 575 NONAME - _ZNK9QWebFrame11toPlainTextEv @ 576 NONAME - _ZNK9QWebFrame12contentsSizeEv @ 577 NONAME - _ZNK9QWebFrame12requestedUrlEv @ 578 NONAME - _ZNK9QWebFrame14hitTestContentERK6QPoint @ 579 NONAME - _ZNK9QWebFrame14renderTreeDumpEv @ 580 NONAME - _ZNK9QWebFrame14scrollBarValueEN2Qt11OrientationE @ 581 NONAME - _ZNK9QWebFrame14scrollPositionEv @ 582 NONAME - _ZNK9QWebFrame14securityOriginEv @ 583 NONAME - _ZNK9QWebFrame15documentElementEv @ 584 NONAME - _ZNK9QWebFrame15findAllElementsERK7QString @ 585 NONAME - _ZNK9QWebFrame15scrollBarPolicyEN2Qt11OrientationE @ 586 NONAME - _ZNK9QWebFrame16findFirstElementERK7QString @ 587 NONAME - _ZNK9QWebFrame16scrollBarMaximumEN2Qt11OrientationE @ 588 NONAME - _ZNK9QWebFrame16scrollBarMinimumEN2Qt11OrientationE @ 589 NONAME - _ZNK9QWebFrame17scrollBarGeometryEN2Qt11OrientationE @ 590 NONAME - _ZNK9QWebFrame18textSizeMultiplierEv @ 591 NONAME - _ZNK9QWebFrame20clipRenderToViewportEv @ 592 NONAME ABSENT - _ZNK9QWebFrame3posEv @ 593 NONAME - _ZNK9QWebFrame3urlEv @ 594 NONAME - _ZNK9QWebFrame4iconEv @ 595 NONAME - _ZNK9QWebFrame4pageEv @ 596 NONAME - _ZNK9QWebFrame5titleEv @ 597 NONAME - _ZNK9QWebFrame6toHtmlEv @ 598 NONAME - _ZNK9QWebFrame7baseUrlEv @ 599 NONAME - _ZNK9QWebFrame8geometryEv @ 600 NONAME - _ZNK9QWebFrame8hasFocusEv @ 601 NONAME - _ZNK9QWebFrame8metaDataEv @ 602 NONAME - _ZNK9QWebFrame9frameNameEv @ 603 NONAME - _ZTI13QWebInspector @ 604 NONAME - _ZTI16QGraphicsWebView @ 605 NONAME - _ZTI17QWebPluginFactory @ 606 NONAME - _ZTI18QWebPluginDatabase @ 607 NONAME - _ZTI20QWebHistoryInterface @ 608 NONAME - _ZTI8QWebPage @ 609 NONAME - _ZTI8QWebView @ 610 NONAME - _ZTI9QWebFrame @ 611 NONAME - _ZTV13QWebInspector @ 612 NONAME - _ZTV16QGraphicsWebView @ 613 NONAME - _ZTV17QWebPluginFactory @ 614 NONAME - _ZTV18QWebPluginDatabase @ 615 NONAME - _ZTV20QWebHistoryInterface @ 616 NONAME - _ZTV8QWebPage @ 617 NONAME - _ZTV8QWebView @ 618 NONAME - _ZTV9QWebFrame @ 619 NONAME - _ZThn16_N16QGraphicsWebView11setGeometryERK6QRectF @ 620 NONAME - _ZThn16_N16QGraphicsWebView14updateGeometryEv @ 621 NONAME - _ZThn16_N16QGraphicsWebViewD0Ev @ 622 NONAME - _ZThn16_N16QGraphicsWebViewD1Ev @ 623 NONAME - _ZThn8_N13QWebInspectorD0Ev @ 624 NONAME - _ZThn8_N13QWebInspectorD1Ev @ 625 NONAME - _ZThn8_N16QGraphicsWebView10sceneEventEP6QEvent @ 626 NONAME - _ZThn8_N16QGraphicsWebView10wheelEventEP24QGraphicsSceneWheelEvent @ 627 NONAME - _ZThn8_N16QGraphicsWebView12focusInEventEP11QFocusEvent @ 628 NONAME - _ZThn8_N16QGraphicsWebView13dragMoveEventEP27QGraphicsSceneDragDropEvent @ 629 NONAME - _ZThn8_N16QGraphicsWebView13focusOutEventEP11QFocusEvent @ 630 NONAME - _ZThn8_N16QGraphicsWebView13keyPressEventEP9QKeyEvent @ 631 NONAME - _ZThn8_N16QGraphicsWebView14dragEnterEventEP27QGraphicsSceneDragDropEvent @ 632 NONAME - _ZThn8_N16QGraphicsWebView14dragLeaveEventEP27QGraphicsSceneDragDropEvent @ 633 NONAME - _ZThn8_N16QGraphicsWebView14hoverMoveEventEP24QGraphicsSceneHoverEvent @ 634 NONAME - _ZThn8_N16QGraphicsWebView14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 635 NONAME - _ZThn8_N16QGraphicsWebView15hoverLeaveEventEP24QGraphicsSceneHoverEvent @ 636 NONAME - _ZThn8_N16QGraphicsWebView15keyReleaseEventEP9QKeyEvent @ 637 NONAME - _ZThn8_N16QGraphicsWebView15mousePressEventEP24QGraphicsSceneMouseEvent @ 638 NONAME - _ZThn8_N16QGraphicsWebView16contextMenuEventEP30QGraphicsSceneContextMenuEvent @ 639 NONAME - _ZThn8_N16QGraphicsWebView16inputMethodEventEP17QInputMethodEvent @ 640 NONAME - _ZThn8_N16QGraphicsWebView17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 641 NONAME - _ZThn8_N16QGraphicsWebView21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent @ 642 NONAME - _ZThn8_N16QGraphicsWebView5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 643 NONAME - _ZThn8_N16QGraphicsWebView9dropEventEP27QGraphicsSceneDragDropEvent @ 644 NONAME - _ZThn8_N16QGraphicsWebViewD0Ev @ 645 NONAME - _ZThn8_N16QGraphicsWebViewD1Ev @ 646 NONAME - _ZThn8_N8QWebViewD0Ev @ 647 NONAME - _ZThn8_N8QWebViewD1Ev @ 648 NONAME - _ZlsR11QDataStreamRK11QWebHistory @ 649 NONAME - _ZrsR11QDataStreamR11QWebHistory @ 650 NONAME - _Z32qt_drt_whiteListAccessFromOriginRK7QStringS1_S1_b @ 651 NONAME - _Z33qt_drt_counterValueForElementByIdP9QWebFrameRK7QString @ 652 NONAME ABSENT - _Z34qt_drt_resetOriginAccessWhiteListsv @ 653 NONAME - _ZN11QWebElement17removeAllChildrenEv @ 654 NONAME - _ZN11QWebElement6renderEP8QPainter @ 655 NONAME - _ZN12QWebSettings30setPrintingMaximumShrinkFactorEf @ 656 NONAME ABSENT - _ZN12QWebSettings30setPrintingMinimumShrinkFactorEf @ 657 NONAME ABSENT - _ZN16QGraphicsWebView10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 658 NONAME - _ZN16QGraphicsWebView11linkClickedERK4QUrl @ 659 NONAME - _ZN16QGraphicsWebView12loadFinishedEb @ 660 NONAME - _ZN16QGraphicsWebView12loadProgressEi @ 661 NONAME - _ZN16QGraphicsWebView16statusBarMessageERK7QString @ 662 NONAME - _ZN16QGraphicsWebView17triggerPageActionEN8QWebPage9WebActionEb @ 663 NONAME - _ZN16QGraphicsWebView8findTextERK7QString6QFlagsIN8QWebPage8FindFlagEE @ 664 NONAME - _ZN21QWebElementCollection6appendERKS_ @ 665 NONAME - _ZN21QWebElementCollectionC1ERK11QWebElementRK7QString @ 666 NONAME - _ZN21QWebElementCollectionC1ERKS_ @ 667 NONAME - _ZN21QWebElementCollectionC1Ev @ 668 NONAME - _ZN21QWebElementCollectionC2ERK11QWebElementRK7QString @ 669 NONAME - _ZN21QWebElementCollectionC2ERKS_ @ 670 NONAME - _ZN21QWebElementCollectionC2Ev @ 671 NONAME - _ZN21QWebElementCollectionD1Ev @ 672 NONAME - _ZN21QWebElementCollectionD2Ev @ 673 NONAME - _ZN21QWebElementCollectionaSERKS_ @ 674 NONAME - _ZN9QWebFrame6renderEP8QPainterNS_11RenderLayerERK7QRegion @ 675 NONAME - _ZNK12QWebSettings27printingMaximumShrinkFactorEv @ 676 NONAME ABSENT - _ZNK12QWebSettings27printingMinimumShrinkFactorEv @ 677 NONAME ABSENT - _ZNK16QGraphicsWebView10isModifiedEv @ 678 NONAME - _ZNK16QGraphicsWebView10pageActionEN8QWebPage9WebActionE @ 679 NONAME - _ZNK16QGraphicsWebView16inputMethodQueryEN2Qt16InputMethodQueryE @ 680 NONAME - _ZNK16QGraphicsWebView8sizeHintEN2Qt8SizeHintERK6QSizeF @ 681 NONAME - _ZNK21QWebElementCollection2atEi @ 682 NONAME - _ZNK21QWebElementCollection5countEv @ 683 NONAME - _ZNK21QWebElementCollection6toListEv @ 684 NONAME - _ZNK21QWebElementCollectionplERKS_ @ 685 NONAME - _ZNK8QWebPage21preferredContentsSizeEv @ 686 NONAME - _ZNK8QWebPage24setPreferredContentsSizeERK5QSize @ 687 NONAME - _ZThn16_NK16QGraphicsWebView8sizeHintEN2Qt8SizeHintERK6QSizeF @ 688 NONAME - _ZThn8_N16QGraphicsWebView10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 689 NONAME - _ZThn8_NK16QGraphicsWebView16inputMethodQueryEN2Qt16InputMethodQueryE @ 690 NONAME - _ZNK11QWebElement14attributeNamesERK7QString @ 691 NONAME - _Z23qt_networkAccessAllowedb @ 692 NONAME - _Z25qt_resumeActiveDOMObjectsP9QWebFrame @ 693 NONAME - _Z26qt_suspendActiveDOMObjectsP9QWebFrame @ 694 NONAME - _Z35qtwebkit_webframe_scrollRecursivelyP9QWebFrameii @ 695 NONAME ABSENT - _Z35qtwebkit_webframe_scrollRecursivelyP9QWebFrameiiRK6QPoint @ 696 NONAME - _ZN9QWebFrame17scrollRecursivelyEii @ 697 NONAME ABSENT - _ZN16QGraphicsWebView20setResizesToContentsEb @ 698 NONAME - _ZNK16QGraphicsWebView17resizesToContentsEv @ 699 NONAME - _Z20qt_drt_numberOfPagesP9QWebFrameff @ 700 NONAME ABSENT - _Z24qt_drt_pauseSVGAnimationP9QWebFrameRK7QStringdS3_ @ 701 NONAME ABSENT - _Z24qt_drt_webinspector_showP8QWebPage @ 702 NONAME ABSENT - _Z24qt_drt_workerThreadCountv @ 703 NONAME ABSENT - _Z25qt_drt_hasDocumentElementP9QWebFrame @ 704 NONAME ABSENT - _Z25qt_drt_webinspector_closeP8QWebPage @ 705 NONAME ABSENT - _Z31qt_drt_pageNumberForElementByIdP9QWebFrameRK7QStringff @ 706 NONAME ABSENT - _Z33qt_drt_webinspector_executeScriptP8QWebPagelRK7QString @ 707 NONAME ABSENT - _Z34qt_drt_setTimelineProfilingEnabledP8QWebPageb @ 708 NONAME ABSENT - _Z32qt_drt_setFrameFlatteningEnabledP8QWebPageb @ 709 NONAME ABSENT - _Z36qt_drt_evaluateScriptInIsolatedWorldP9QWebFrameiRK7QString @ 710 NONAME ABSENT - _Z47qt_drt_setDomainRelaxationForbiddenForURLSchemebRK7QString @ 711 NONAME ABSENT - _ZN9QWebFrame11pageChangedEv @ 712 NONAME - _ZN9QWebFrame14scrollToAnchorERK7QString @ 713 NONAME - _ZN12QWebSettings15setInspectorUrlERK4QUrl @ 714 NONAME ABSENT - _ZN13QWebInspector10closeEventEP11QCloseEvent @ 715 NONAME - _ZN16QGraphicsWebView26setTiledBackingStoreFrozenEb @ 716 NONAME - _ZNK16QGraphicsWebView25isTiledBackingStoreFrozenEv @ 717 NONAME - _Z18qt_wrt_setViewModeP8QWebPageRK7QString @ 718 NONAME ABSENT - _Z19qt_drt_setMediaTypeP9QWebFrameRK7QString @ 719 NONAME ABSENT - _Z26qt_drt_enableCaretBrowsingP8QWebPageb @ 720 NONAME ABSENT - _ZNK12QWebSettings12inspectorUrlEv @ 721 NONAME ABSENT - _ZN23DumpRenderTreeSupportQt19webPageSetGroupNameEP8QWebPageRK7QString @ 722 NONAME - _ZN23DumpRenderTreeSupportQt16webPageGroupNameEP8QWebPage @ 723 NONAME - _ZN23DumpRenderTreeSupportQt23garbageCollectorCollectEv @ 724 NONAME - _Z32qtwebkit_webframe_scrollOverflowP9QWebFrameiiRK6QPoint @ 725 NONAME - _ZN23DumpRenderTreeSupportQt12setMediaTypeEP9QWebFrameRK7QString @ 726 NONAME - _ZN23DumpRenderTreeSupportQt13numberOfPagesEP9QWebFrameff @ 727 NONAME - _ZN23DumpRenderTreeSupportQt13selectedRangeEP8QWebPage @ 728 NONAME - _ZN23DumpRenderTreeSupportQt14clearFrameNameEP9QWebFrame @ 729 NONAME - _ZN23DumpRenderTreeSupportQt14pauseAnimationEP9QWebFrameRK7QStringdS4_ @ 730 NONAME - _ZN23DumpRenderTreeSupportQt15dumpFrameLoaderEb @ 731 NONAME - _ZN23DumpRenderTreeSupportQt16dumpNotificationEb @ 732 NONAME - _ZN23DumpRenderTreeSupportQt16isCommandEnabledEP8QWebPageRK7QString @ 733 NONAME - _ZN23DumpRenderTreeSupportQt16webInspectorShowEP8QWebPage @ 734 NONAME - _ZN23DumpRenderTreeSupportQt17pauseSVGAnimationEP9QWebFrameRK7QStringdS4_ @ 735 NONAME - _ZN23DumpRenderTreeSupportQt17webInspectorCloseEP8QWebPage @ 736 NONAME - _ZN23DumpRenderTreeSupportQt17workerThreadCountEv @ 737 NONAME - _ZN23DumpRenderTreeSupportQt18hasDocumentElementEP9QWebFrame @ 738 NONAME - _ZN23DumpRenderTreeSupportQt20dumpEditingCallbacksEb @ 739 NONAME - _ZN23DumpRenderTreeSupportQt21markerTextForListItemERK11QWebElement @ 740 NONAME - _ZN23DumpRenderTreeSupportQt22javaScriptObjectsCountEv @ 741 NONAME - _ZN23DumpRenderTreeSupportQt23setCaretBrowsingEnabledEP8QWebPageb @ 742 NONAME - _ZN23DumpRenderTreeSupportQt24executeCoreCommandByNameEP8QWebPageRK7QStringS4_ @ 743 NONAME - _ZN23DumpRenderTreeSupportQt21dumpSetAcceptsEditingEb @ 744 NONAME - _ZN23DumpRenderTreeSupportQt22resumeActiveDOMObjectsEP9QWebFrame @ 745 NONAME - _ZN23DumpRenderTreeSupportQt23suspendActiveDOMObjectsEP9QWebFrame @ 746 NONAME - _ZN23DumpRenderTreeSupportQt24numberOfActiveAnimationsEP9QWebFrame @ 747 NONAME - _ZN23DumpRenderTreeSupportQt24pageNumberForElementByIdEP9QWebFrameRK7QStringff @ 748 NONAME - _ZN23DumpRenderTreeSupportQt25dumpResourceLoadCallbacksEb @ 749 NONAME - _ZN23DumpRenderTreeSupportQt25pauseTransitionOfPropertyEP9QWebFrameRK7QStringdS4_ @ 750 NONAME - _ZN23DumpRenderTreeSupportQt25setFrameFlatteningEnabledEP8QWebPageb @ 751 NONAME - _ZN23DumpRenderTreeSupportQt25webInspectorExecuteScriptEP8QWebPagelRK7QString @ 752 NONAME - _ZN23DumpRenderTreeSupportQt25whiteListAccessFromOriginERK7QStringS2_S2_b @ 753 NONAME - _ZN23DumpRenderTreeSupportQt26counterValueForElementByIdEP9QWebFrameRK7QString @ 754 NONAME - _ZN23DumpRenderTreeSupportQt26firstRectForCharacterRangeEP8QWebPageii @ 755 NONAME - _ZN23DumpRenderTreeSupportQt26overwritePluginDirectoriesEv @ 756 NONAME - _ZN23DumpRenderTreeSupportQt27resetOriginAccessWhiteListsEv @ 757 NONAME - _ZN23DumpRenderTreeSupportQt27setSmartInsertDeleteEnabledEP8QWebPageb @ 758 NONAME - _ZN23DumpRenderTreeSupportQt27setTimelineProfilingEnabledEP8QWebPageb @ 759 NONAME - _ZN23DumpRenderTreeSupportQt28setDumpRenderTreeModeEnabledEb @ 760 NONAME - _ZN23DumpRenderTreeSupportQt29dumpResourceLoadCallbacksPathERK7QString @ 761 NONAME - _ZN23DumpRenderTreeSupportQt29evaluateScriptInIsolatedWorldEP9QWebFrameiRK7QString @ 762 NONAME - _ZN23DumpRenderTreeSupportQt29setJavaScriptProfilingEnabledEP9QWebFrameb @ 763 NONAME - _ZN23DumpRenderTreeSupportQt29setWillSendRequestReturnsNullEb @ 764 NONAME - _ZN23DumpRenderTreeSupportQt30setWillSendRequestClearHeadersERK11QStringList @ 765 NONAME - _ZN23DumpRenderTreeSupportQt33computedStyleIncludingVisitedInfoERK11QWebElement @ 766 NONAME - _ZN23DumpRenderTreeSupportQt34setSelectTrailingWhitespaceEnabledEP8QWebPageb @ 767 NONAME - _ZN23DumpRenderTreeSupportQt39elementDoesAutoCompleteForElementWithIdEP9QWebFrameRK7QString @ 768 NONAME - _ZN23DumpRenderTreeSupportQt39setWillSendRequestReturnsNullOnRedirectEb @ 769 NONAME - _ZN23DumpRenderTreeSupportQt40garbageCollectorCollectOnAlternateThreadEb @ 770 NONAME - _ZN23DumpRenderTreeSupportQt40setDomainRelaxationForbiddenForURLSchemeEbRK7QString @ 771 NONAME - _ZN23DumpRenderTreeSupportQt18setEditingBehaviorEP8QWebPageRK7QString @ 772 NONAME - _ZN23DumpRenderTreeSupportQt24setNotificationsReceiverEP7QObject @ 773 NONAME ABSENT - _ZN23DumpRenderTreeSupportQt26allowNotificationForOriginERK7QString @ 774 NONAME ABSENT - _ZN23DumpRenderTreeSupportQt26setCheckPermissionFunctionEPFvP7QObjectRK4QUrlR22NotificationPermissionE @ 775 NONAME ABSENT - _ZN23DumpRenderTreeSupportQt28setRequestPermissionFunctionEPFvP7QObjectRK7QStringE @ 776 NONAME ABSENT - _ZN23DumpRenderTreeSupportQt31removeWhiteListAccessFromOriginERK7QStringS2_S2_b @ 777 NONAME - _ZN23DumpRenderTreeSupportQt11shouldCloseEP9QWebFrame @ 778 NONAME - _ZN23DumpRenderTreeSupportQt12isTargetItemERK15QWebHistoryItem @ 779 NONAME - _ZN23DumpRenderTreeSupportQt17historyItemTargetERK15QWebHistoryItem @ 780 NONAME - _ZN23DumpRenderTreeSupportQt20getChildHistoryItemsERK15QWebHistoryItem @ 781 NONAME - _ZN23DumpRenderTreeSupportQt23setMockGeolocationErrorEiRK7QString @ 782 NONAME ABSENT - _ZN23DumpRenderTreeSupportQt26setMockGeolocationPositionEddd @ 783 NONAME ABSENT - _ZN23DumpRenderTreeSupportQt17clearScriptWorldsEv @ 784 NONAME - _ZN23DumpRenderTreeSupportQt23setCustomPolicyDelegateEbb @ 785 NONAME - _ZN15QWebScriptWorldC1ERKS_ @ 786 NONAME - _ZN15QWebScriptWorldC1Ev @ 787 NONAME - _ZN15QWebScriptWorldC2ERKS_ @ 788 NONAME - _ZN15QWebScriptWorldC2Ev @ 789 NONAME - _ZN15QWebScriptWorldD1Ev @ 790 NONAME - _ZN15QWebScriptWorldD2Ev @ 791 NONAME - _ZN15QWebScriptWorldaSERKS_ @ 792 NONAME - _ZN23DumpRenderTreeSupportQt29dumpResourceResponseMIMETypesEb @ 793 NONAME - _ZN23DumpRenderTreeSupportQtC1Ev @ 794 NONAME - _ZN23DumpRenderTreeSupportQtC2Ev @ 795 NONAME - _ZN23DumpRenderTreeSupportQtD1Ev @ 796 NONAME - _ZN23DumpRenderTreeSupportQtD2Ev @ 797 NONAME - _ZN8QWebPage23allowGeolocationRequestEP9QWebFrame @ 798 NONAME ABSENT - _ZN8QWebPage23viewportChangeRequestedERKNS_13ViewportHintsE @ 799 NONAME ABSENT - _ZNK15QWebScriptWorld5worldEv @ 800 NONAME - _ZN16QGraphicsWebView13setDeviceSizeERK5QSize @ 801 NONAME ABSENT - _ZN23DumpRenderTreeSupportQt12pagePropertyEP9QWebFrameRK7QStringi @ 802 NONAME - _ZN23DumpRenderTreeSupportQt16isPageBoxVisibleEP9QWebFramei @ 803 NONAME - _ZN23DumpRenderTreeSupportQt16resumeAnimationsEP9QWebFrame @ 804 NONAME - _ZN23DumpRenderTreeSupportQt17addUserStyleSheetEP8QWebPageRK7QString @ 805 NONAME - _ZN23DumpRenderTreeSupportQt17suspendAnimationsEP9QWebFrame @ 806 NONAME - _ZN23DumpRenderTreeSupportQt26pageSizeAndMarginsInPixelsEP9QWebFrameiiiiiii @ 807 NONAME - _ZN23DumpRenderTreeSupportQt28setDeferMainResourceDataLoadEb @ 808 NONAME - _ZN8QWebPage17setUserPermissionEP9QWebFrameNS_16PermissionDomainENS_16PermissionPolicyE @ 809 NONAME ABSENT - _ZN8QWebPage23checkPermissionFromUserEP9QWebFrameNS_16PermissionDomainERNS_16PermissionPolicyE @ 810 NONAME ABSENT - _ZN8QWebPage25requestPermissionFromUserEP9QWebFrameNS_16PermissionDomainE @ 811 NONAME ABSENT - _ZN8QWebPage27cancelRequestsForPermissionEP9QWebFrameNS_16PermissionDomainE @ 812 NONAME ABSENT - _ZNK16QGraphicsWebView10deviceSizeEv @ 813 NONAME ABSENT - _ZN23DumpRenderTreeSupportQt14viewportAsTextEP8QWebPageRK5QSize @ 814 NONAME - _ZN23DumpRenderTreeSupportQt32simulateDesktopNotificationClickERK7QString @ 815 NONAME - _ZN8QWebPage23viewportChangeRequestedEv @ 816 NONAME - _ZNK8QWebPage28viewportConfigurationForSizeERK5QSize @ 817 NONAME ABSENT - _ZN23DumpRenderTreeSupportQt20dumpHistoryCallbacksEb @ 818 NONAME - _ZN23DumpRenderTreeSupportQt25dumpVisitedLinksCallbacksEb @ 819 NONAME - _ZN23DumpRenderTreeSupportQt9plainTextERK8QVariant @ 820 NONAME - _ZNK8QWebPage25viewportAttributesForSizeERK5QSize @ 821 NONAME - _ZN8QWebPage18ViewportAttributesC1ERKS0_ @ 822 NONAME - _ZN8QWebPage18ViewportAttributesC1Ev @ 823 NONAME - _ZN8QWebPage18ViewportAttributesC2ERKS0_ @ 824 NONAME - _ZN8QWebPage18ViewportAttributesC2Ev @ 825 NONAME - _ZN8QWebPage18ViewportAttributesD1Ev @ 826 NONAME - _ZN8QWebPage18ViewportAttributesD2Ev @ 827 NONAME - _ZN8QWebPage18ViewportAttributesaSERKS0_ @ 828 NONAME - _ZN23DumpRenderTreeSupportQt13nodesFromRectERK11QWebElementiijjjjb @ 829 NONAME - _ZN23DumpRenderTreeSupportQt28dumpUserGestureInFrameLoaderEb @ 830 NONAME - _ZNK8QWebPage19supportsContentTypeERK7QString @ 831 NONAME - _ZNK8QWebPage21supportedContentTypesEv @ 832 NONAME - _ZNK8QWebPage27setActualVisibleContentRectERK5QRect @ 833 NONAME - _ZN8QWebPage20setFeaturePermissionEP9QWebFrameNS_7FeatureENS_16PermissionPolicyE @ 834 NONAME - _ZN8QWebPage26featurePermissionRequestedEP9QWebFrameNS_7FeatureE @ 835 NONAME - _ZN8QWebPage32featurePermissionRequestCanceledEP9QWebFrameNS_7FeatureE @ 836 NONAME - _Z33qtwebkit_setPluginCreatedCallbackPFvP9QWebFramePvS1_E @ 837 NONAME - _ZN23DumpRenderTreeSupportQt23setMockGeolocationErrorEP8QWebPageiRK7QString @ 838 NONAME - _ZN23DumpRenderTreeSupportQt26setMockGeolocationPositionEP8QWebPageddd @ 839 NONAME - _ZN23DumpRenderTreeSupportQt14viewportAsTextEP8QWebPageiRK5QSizeS4_ @ 840 NONAME - _ZN23DumpRenderTreeSupportQt13nodesFromRectERK11QWebElementiijjjjb @ 841 NONAME - _ZN23DumpRenderTreeSupportQt9plainTextERK8QVariant @ 842 NONAME - _ZN23DumpRenderTreeSupportQt26mediaContentUrlByElementIdEP9QWebFrameRK7QString @ 843 NONAME - _ZNK8QWebPage12hasSelectionEv @ 844 NONAME - _ZNK8QWebPage12selectedHtmlEv @ 845 NONAME - _ZN11QWebElement6renderEP8QPainterRK5QRect @ 846 NONAME +EXPORTS + _Z10qt_drt_runb @ 1 NONAME + _Z14qWebKitVersionv @ 2 NONAME + _Z19qWebKitMajorVersionv @ 3 NONAME + _Z19qWebKitMinorVersionv @ 4 NONAME + _Z20qt_dump_frame_loaderb @ 5 NONAME + _Z20qt_webpage_groupNameP8QWebPage @ 6 NONAME + _Z21qt_drt_clearFrameNameP9QWebFrame @ 7 NONAME + _Z21qt_drt_pauseAnimationP9QWebFrameRK7QStringdS3_ @ 8 NONAME + _Z23qt_webpage_setGroupNameP8QWebPageRK7QString @ 9 NONAME + _Z25qt_dump_editing_callbacksb @ 10 NONAME + _Z27qt_dump_set_accepts_editingb @ 11 NONAME + _Z29qt_drt_javaScriptObjectsCountv @ 12 NONAME + _Z31qt_drt_garbageCollector_collectv @ 13 NONAME + _Z31qt_drt_numberOfActiveAnimationsP9QWebFrame @ 14 NONAME + _Z31qt_dump_resource_load_callbacksb @ 15 NONAME + _Z32qt_drt_pauseTransitionOfPropertyP9QWebFrameRK7QStringdS3_ @ 16 NONAME + _Z33qt_drt_overwritePluginDirectoriesv @ 17 NONAME + _Z36qt_drt_setJavaScriptProfilingEnabledP9QWebFrameb @ 18 NONAME + _Z48qt_drt_garbageCollector_collectOnAlternateThreadb @ 19 NONAME + _ZN11QWebElement11encloseWithERK7QString @ 20 NONAME + _ZN11QWebElement11encloseWithERKS_ @ 21 NONAME + _ZN11QWebElement11removeClassERK7QString @ 22 NONAME + _ZN11QWebElement11setInnerXmlERK7QString @ 23 NONAME + _ZN11QWebElement11setOuterXmlERK7QString @ 24 NONAME + _ZN11QWebElement11toggleClassERK7QString @ 25 NONAME + _ZN11QWebElement12appendInsideERK7QString @ 26 NONAME + _ZN11QWebElement12appendInsideERKS_ @ 27 NONAME + _ZN11QWebElement12setAttributeERK7QStringS2_ @ 28 NONAME + _ZN11QWebElement12setPlainTextERK7QString @ 29 NONAME + _ZN11QWebElement13appendOutsideERK7QString @ 30 NONAME + _ZN11QWebElement13appendOutsideERKS_ @ 31 NONAME + _ZN11QWebElement13prependInsideERK7QString @ 32 NONAME + _ZN11QWebElement13prependInsideERKS_ @ 33 NONAME + _ZN11QWebElement14prependOutsideERK7QString @ 34 NONAME + _ZN11QWebElement14prependOutsideERKS_ @ 35 NONAME + _ZN11QWebElement14removeChildrenEv @ 36 NONAME ABSENT + _ZN11QWebElement14setAttributeNSERK7QStringS2_S2_ @ 37 NONAME + _ZN11QWebElement15removeAttributeERK7QString @ 38 NONAME + _ZN11QWebElement16enclosingElementEPN7WebCore4NodeE @ 39 NONAME + _ZN11QWebElement16setStylePropertyERK7QStringS2_ @ 40 NONAME + _ZN11QWebElement16takeFromDocumentEv @ 41 NONAME + _ZN11QWebElement17removeAttributeNSERK7QStringS2_ @ 42 NONAME + _ZN11QWebElement18evaluateJavaScriptERK7QString @ 43 NONAME + _ZN11QWebElement18removeFromDocumentEv @ 44 NONAME + _ZN11QWebElement19encloseContentsWithERK7QString @ 45 NONAME + _ZN11QWebElement19encloseContentsWithERKS_ @ 46 NONAME + _ZN11QWebElement7replaceERK7QString @ 47 NONAME + _ZN11QWebElement7replaceERKS_ @ 48 NONAME + _ZN11QWebElement8addClassERK7QString @ 49 NONAME + _ZN11QWebElement8setFocusEv @ 50 NONAME + _ZN11QWebElementC1EPN7WebCore4NodeE @ 51 NONAME + _ZN11QWebElementC1EPN7WebCore7ElementE @ 52 NONAME + _ZN11QWebElementC1ERKS_ @ 53 NONAME + _ZN11QWebElementC1Ev @ 54 NONAME + _ZN11QWebElementC2EPN7WebCore4NodeE @ 55 NONAME + _ZN11QWebElementC2EPN7WebCore7ElementE @ 56 NONAME + _ZN11QWebElementC2ERKS_ @ 57 NONAME + _ZN11QWebElementC2Ev @ 58 NONAME + _ZN11QWebElementD1Ev @ 59 NONAME + _ZN11QWebElementD2Ev @ 60 NONAME + _ZN11QWebElementaSERKS_ @ 61 NONAME + _ZN11QWebHistory12restoreStateERK10QByteArray @ 62 NONAME ABSENT + _ZN11QWebHistory19setMaximumItemCountEi @ 63 NONAME + _ZN11QWebHistory4backEv @ 64 NONAME + _ZN11QWebHistory5clearEv @ 65 NONAME + _ZN11QWebHistory7forwardEv @ 66 NONAME + _ZN11QWebHistory8goToItemERK15QWebHistoryItem @ 67 NONAME + _ZN11QWebHistoryC1Ev @ 68 NONAME + _ZN11QWebHistoryC2Ev @ 69 NONAME + _ZN11QWebHistoryD1Ev @ 70 NONAME + _ZN11QWebHistoryD2Ev @ 71 NONAME + _ZN12QWebDatabase14removeDatabaseERKS_ @ 72 NONAME + _ZN12QWebDatabase18removeAllDatabasesEv @ 73 NONAME + _ZN12QWebDatabaseC1EP19QWebDatabasePrivate @ 74 NONAME + _ZN12QWebDatabaseC1ERKS_ @ 75 NONAME + _ZN12QWebDatabaseC2EP19QWebDatabasePrivate @ 76 NONAME + _ZN12QWebDatabaseC2ERKS_ @ 77 NONAME + _ZN12QWebDatabaseD1Ev @ 78 NONAME + _ZN12QWebDatabaseD2Ev @ 79 NONAME + _ZN12QWebDatabaseaSERKS_ @ 80 NONAME + _ZN12QWebSettings10iconForUrlERK4QUrl @ 81 NONAME + _ZN12QWebSettings10webGraphicENS_10WebGraphicE @ 82 NONAME + _ZN12QWebSettings11setFontSizeENS_8FontSizeEi @ 83 NONAME + _ZN12QWebSettings12setAttributeENS_12WebAttributeEb @ 84 NONAME + _ZN12QWebSettings13resetFontSizeENS_8FontSizeE @ 85 NONAME + _ZN12QWebSettings13setFontFamilyENS_10FontFamilyERK7QString @ 86 NONAME + _ZN12QWebSettings13setWebGraphicENS_10WebGraphicERK7QPixmap @ 87 NONAME + _ZN12QWebSettings14globalSettingsEv @ 88 NONAME + _ZN12QWebSettings14pluginDatabaseEv @ 89 NONAME ABSENT + _ZN12QWebSettings14resetAttributeENS_12WebAttributeE @ 90 NONAME + _ZN12QWebSettings15resetFontFamilyENS_10FontFamilyE @ 91 NONAME + _ZN12QWebSettings16iconDatabasePathEv @ 92 NONAME + _ZN12QWebSettings17clearIconDatabaseEv @ 93 NONAME + _ZN12QWebSettings17clearMemoryCachesEv @ 94 NONAME + _ZN12QWebSettings18offlineStoragePathEv @ 95 NONAME + _ZN12QWebSettings19maximumPagesInCacheEv @ 96 NONAME + _ZN12QWebSettings19setIconDatabasePathERK7QString @ 97 NONAME + _ZN12QWebSettings19setLocalStoragePathERK7QString @ 98 NONAME + _ZN12QWebSettings20setUserStyleSheetUrlERK4QUrl @ 99 NONAME + _ZN12QWebSettings21setOfflineStoragePathERK7QString @ 100 NONAME + _ZN12QWebSettings22setDefaultTextEncodingERK7QString @ 101 NONAME + _ZN12QWebSettings22setMaximumPagesInCacheEi @ 102 NONAME + _ZN12QWebSettings23enablePersistentStorageERK7QString @ 103 NONAME + _ZN12QWebSettings24setObjectCacheCapacitiesEiii @ 104 NONAME + _ZN12QWebSettings26offlineStorageDefaultQuotaEv @ 105 NONAME + _ZN12QWebSettings29setOfflineStorageDefaultQuotaEx @ 106 NONAME + _ZN12QWebSettings30offlineWebApplicationCachePathEv @ 107 NONAME + _ZN12QWebSettings31offlineWebApplicationCacheQuotaEv @ 108 NONAME + _ZN12QWebSettings33setOfflineWebApplicationCachePathERK7QString @ 109 NONAME + _ZN12QWebSettings34setOfflineWebApplicationCacheQuotaEx @ 110 NONAME + _ZN12QWebSettingsC1EPN7WebCore8SettingsE @ 111 NONAME + _ZN12QWebSettingsC1Ev @ 112 NONAME + _ZN12QWebSettingsC2EPN7WebCore8SettingsE @ 113 NONAME + _ZN12QWebSettingsC2Ev @ 114 NONAME + _ZN12QWebSettingsD1Ev @ 115 NONAME + _ZN12QWebSettingsD2Ev @ 116 NONAME + _ZN13QWebInspector11qt_metacallEN11QMetaObject4CallEiPPv @ 117 NONAME + _ZN13QWebInspector11qt_metacastEPKc @ 118 NONAME + _ZN13QWebInspector11resizeEventEP12QResizeEvent @ 119 NONAME + _ZN13QWebInspector16staticMetaObjectE @ 120 NONAME DATA 16 + _ZN13QWebInspector18windowTitleChangedERK7QString @ 121 NONAME ABSENT + _ZN13QWebInspector19getStaticMetaObjectEv @ 122 NONAME + _ZN13QWebInspector5eventEP6QEvent @ 123 NONAME + _ZN13QWebInspector7setPageEP8QWebPage @ 124 NONAME + _ZN13QWebInspector9hideEventEP10QHideEvent @ 125 NONAME + _ZN13QWebInspector9showEventEP10QShowEvent @ 126 NONAME + _ZN13QWebInspectorC1EP7QWidget @ 127 NONAME + _ZN13QWebInspectorC2EP7QWidget @ 128 NONAME + _ZN13QWebInspectorD0Ev @ 129 NONAME + _ZN13QWebInspectorD1Ev @ 130 NONAME + _ZN13QWebInspectorD2Ev @ 131 NONAME + _ZN14QWebPluginInfo10setEnabledEb @ 132 NONAME + _ZN14QWebPluginInfoC1EPN7WebCore13PluginPackageE @ 133 NONAME + _ZN14QWebPluginInfoC1ERKS_ @ 134 NONAME + _ZN14QWebPluginInfoC1Ev @ 135 NONAME + _ZN14QWebPluginInfoC2EPN7WebCore13PluginPackageE @ 136 NONAME + _ZN14QWebPluginInfoC2ERKS_ @ 137 NONAME + _ZN14QWebPluginInfoC2Ev @ 138 NONAME + _ZN14QWebPluginInfoD1Ev @ 139 NONAME + _ZN14QWebPluginInfoD2Ev @ 140 NONAME + _ZN14QWebPluginInfoaSERKS_ @ 141 NONAME + _ZN15QWebHistoryItem11setUserDataERK8QVariant @ 142 NONAME + _ZN15QWebHistoryItemC1EP22QWebHistoryItemPrivate @ 143 NONAME + _ZN15QWebHistoryItemC1ERKS_ @ 144 NONAME + _ZN15QWebHistoryItemC2EP22QWebHistoryItemPrivate @ 145 NONAME + _ZN15QWebHistoryItemC2ERKS_ @ 146 NONAME + _ZN15QWebHistoryItemD1Ev @ 147 NONAME + _ZN15QWebHistoryItemD2Ev @ 148 NONAME + _ZN15QWebHistoryItemaSERKS_ @ 149 NONAME + _ZN16QGraphicsWebView10loadFailedEv @ 150 NONAME ABSENT + _ZN16QGraphicsWebView10sceneEventEP6QEvent @ 151 NONAME + _ZN16QGraphicsWebView10setContentERK10QByteArrayRK7QStringRK4QUrl @ 152 NONAME + _ZN16QGraphicsWebView10urlChangedERK4QUrl @ 153 NONAME + _ZN16QGraphicsWebView10wheelEventEP24QGraphicsSceneWheelEvent @ 154 NONAME + _ZN16QGraphicsWebView11iconChangedEv @ 155 NONAME + _ZN16QGraphicsWebView11loadStartedEv @ 156 NONAME + _ZN16QGraphicsWebView11qt_metacallEN11QMetaObject4CallEiPPv @ 157 NONAME + _ZN16QGraphicsWebView11qt_metacastEPKc @ 158 NONAME + _ZN16QGraphicsWebView11setGeometryERK6QRectF @ 159 NONAME + _ZN16QGraphicsWebView12focusInEventEP11QFocusEvent @ 160 NONAME + _ZN16QGraphicsWebView12loadFinishedEv @ 161 NONAME ABSENT + _ZN16QGraphicsWebView12titleChangedERK7QString @ 162 NONAME + _ZN16QGraphicsWebView13dragMoveEventEP27QGraphicsSceneDragDropEvent @ 163 NONAME + _ZN16QGraphicsWebView13focusOutEventEP11QFocusEvent @ 164 NONAME + _ZN16QGraphicsWebView13keyPressEventEP9QKeyEvent @ 165 NONAME + _ZN16QGraphicsWebView13setZoomFactorEf @ 166 NONAME + _ZN16QGraphicsWebView13statusChangedEv @ 167 NONAME ABSENT + _ZN16QGraphicsWebView14dragEnterEventEP27QGraphicsSceneDragDropEvent @ 168 NONAME + _ZN16QGraphicsWebView14dragLeaveEventEP27QGraphicsSceneDragDropEvent @ 169 NONAME + _ZN16QGraphicsWebView14hoverMoveEventEP24QGraphicsSceneHoverEvent @ 170 NONAME + _ZN16QGraphicsWebView14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 171 NONAME + _ZN16QGraphicsWebView14setInteractiveEb @ 172 NONAME ABSENT + _ZN16QGraphicsWebView14updateGeometryEv @ 173 NONAME + _ZN16QGraphicsWebView15hoverLeaveEventEP24QGraphicsSceneHoverEvent @ 174 NONAME + _ZN16QGraphicsWebView15keyReleaseEventEP9QKeyEvent @ 175 NONAME + _ZN16QGraphicsWebView15mousePressEventEP24QGraphicsSceneMouseEvent @ 176 NONAME + _ZN16QGraphicsWebView15progressChangedEf @ 177 NONAME ABSENT + _ZN16QGraphicsWebView16contextMenuEventEP30QGraphicsSceneContextMenuEvent @ 178 NONAME + _ZN16QGraphicsWebView16inputMethodEventEP17QInputMethodEvent @ 179 NONAME + _ZN16QGraphicsWebView16staticMetaObjectE @ 180 NONAME DATA 16 + _ZN16QGraphicsWebView17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 181 NONAME + _ZN16QGraphicsWebView17zoomFactorChangedEv @ 182 NONAME ABSENT + _ZN16QGraphicsWebView18focusNextPrevChildEb @ 183 NONAME + _ZN16QGraphicsWebView19getStaticMetaObjectEv @ 184 NONAME + _ZN16QGraphicsWebView20interactivityChangedEv @ 185 NONAME ABSENT + _ZN16QGraphicsWebView21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent @ 186 NONAME + _ZN16QGraphicsWebView4backEv @ 187 NONAME + _ZN16QGraphicsWebView4loadERK15QNetworkRequestN21QNetworkAccessManager9OperationERK10QByteArray @ 188 NONAME + _ZN16QGraphicsWebView4loadERK4QUrl @ 189 NONAME + _ZN16QGraphicsWebView4stopEv @ 190 NONAME + _ZN16QGraphicsWebView5eventEP6QEvent @ 191 NONAME + _ZN16QGraphicsWebView5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 192 NONAME + _ZN16QGraphicsWebView6reloadEv @ 193 NONAME + _ZN16QGraphicsWebView6setUrlERK4QUrl @ 194 NONAME + _ZN16QGraphicsWebView7forwardEv @ 195 NONAME + _ZN16QGraphicsWebView7setHtmlERK7QStringRK4QUrl @ 196 NONAME + _ZN16QGraphicsWebView7setPageEP8QWebPage @ 197 NONAME + _ZN16QGraphicsWebView9dropEventEP27QGraphicsSceneDragDropEvent @ 198 NONAME + _ZN16QGraphicsWebViewC1EP13QGraphicsItem @ 199 NONAME + _ZN16QGraphicsWebViewC2EP13QGraphicsItem @ 200 NONAME + _ZN16QGraphicsWebViewD0Ev @ 201 NONAME + _ZN16QGraphicsWebViewD1Ev @ 202 NONAME + _ZN16QGraphicsWebViewD2Ev @ 203 NONAME + _ZN17QWebHitTestResultC1EP24QWebHitTestResultPrivate @ 204 NONAME + _ZN17QWebHitTestResultC1ERKS_ @ 205 NONAME + _ZN17QWebHitTestResultC1Ev @ 206 NONAME + _ZN17QWebHitTestResultC2EP24QWebHitTestResultPrivate @ 207 NONAME + _ZN17QWebHitTestResultC2ERKS_ @ 208 NONAME + _ZN17QWebHitTestResultC2Ev @ 209 NONAME + _ZN17QWebHitTestResultD1Ev @ 210 NONAME + _ZN17QWebHitTestResultD2Ev @ 211 NONAME + _ZN17QWebHitTestResultaSERKS_ @ 212 NONAME + _ZN17QWebPluginFactory11qt_metacallEN11QMetaObject4CallEiPPv @ 213 NONAME + _ZN17QWebPluginFactory11qt_metacastEPKc @ 214 NONAME + _ZN17QWebPluginFactory14refreshPluginsEv @ 215 NONAME + _ZN17QWebPluginFactory16staticMetaObjectE @ 216 NONAME DATA 16 + _ZN17QWebPluginFactory19getStaticMetaObjectEv @ 217 NONAME + _ZN17QWebPluginFactory9extensionENS_9ExtensionEPKNS_15ExtensionOptionEPNS_15ExtensionReturnE @ 218 NONAME + _ZN17QWebPluginFactoryC2EP7QObject @ 219 NONAME + _ZN17QWebPluginFactoryD0Ev @ 220 NONAME + _ZN17QWebPluginFactoryD1Ev @ 221 NONAME + _ZN17QWebPluginFactoryD2Ev @ 222 NONAME + _ZN18QWebPluginDatabase11qt_metacallEN11QMetaObject4CallEiPPv @ 223 NONAME + _ZN18QWebPluginDatabase11qt_metacastEPKc @ 224 NONAME + _ZN18QWebPluginDatabase13addSearchPathERK7QString @ 225 NONAME + _ZN18QWebPluginDatabase14setSearchPathsERK11QStringList @ 226 NONAME + _ZN18QWebPluginDatabase16staticMetaObjectE @ 227 NONAME DATA 16 + _ZN18QWebPluginDatabase17pluginForMimeTypeERK7QString @ 228 NONAME + _ZN18QWebPluginDatabase18defaultSearchPathsEv @ 229 NONAME + _ZN18QWebPluginDatabase19getStaticMetaObjectEv @ 230 NONAME + _ZN18QWebPluginDatabase29setPreferredPluginForMimeTypeERK7QStringRK14QWebPluginInfo @ 231 NONAME + _ZN18QWebPluginDatabase7refreshEv @ 232 NONAME + _ZN18QWebPluginDatabaseC1EP7QObject @ 233 NONAME + _ZN18QWebPluginDatabaseC2EP7QObject @ 234 NONAME + _ZN18QWebPluginDatabaseD0Ev @ 235 NONAME + _ZN18QWebPluginDatabaseD1Ev @ 236 NONAME + _ZN18QWebPluginDatabaseD2Ev @ 237 NONAME + _ZN18QWebSecurityOrigin10allOriginsEv @ 238 NONAME + _ZN18QWebSecurityOrigin12localSchemesEv @ 239 NONAME + _ZN18QWebSecurityOrigin14addLocalSchemeERK7QString @ 240 NONAME + _ZN18QWebSecurityOrigin16setDatabaseQuotaEx @ 241 NONAME + _ZN18QWebSecurityOrigin17removeLocalSchemeERK7QString @ 242 NONAME + _ZN18QWebSecurityOrigin25whiteListAccessFromOriginERK7QStringS2_S2_b @ 243 NONAME ABSENT + _ZN18QWebSecurityOrigin27resetOriginAccessWhiteListsEv @ 244 NONAME ABSENT + _ZN18QWebSecurityOriginC1EP25QWebSecurityOriginPrivate @ 245 NONAME + _ZN18QWebSecurityOriginC1ERKS_ @ 246 NONAME + _ZN18QWebSecurityOriginC2EP25QWebSecurityOriginPrivate @ 247 NONAME + _ZN18QWebSecurityOriginC2ERKS_ @ 248 NONAME + _ZN18QWebSecurityOriginD1Ev @ 249 NONAME + _ZN18QWebSecurityOriginD2Ev @ 250 NONAME + _ZN18QWebSecurityOriginaSERKS_ @ 251 NONAME + _ZN20QWebHistoryInterface11qt_metacallEN11QMetaObject4CallEiPPv @ 252 NONAME + _ZN20QWebHistoryInterface11qt_metacastEPKc @ 253 NONAME + _ZN20QWebHistoryInterface16defaultInterfaceEv @ 254 NONAME + _ZN20QWebHistoryInterface16staticMetaObjectE @ 255 NONAME DATA 16 + _ZN20QWebHistoryInterface19getStaticMetaObjectEv @ 256 NONAME + _ZN20QWebHistoryInterface19setDefaultInterfaceEPS_ @ 257 NONAME + _ZN20QWebHistoryInterfaceC2EP7QObject @ 258 NONAME + _ZN20QWebHistoryInterfaceD0Ev @ 259 NONAME + _ZN20QWebHistoryInterfaceD1Ev @ 260 NONAME + _ZN20QWebHistoryInterfaceD2Ev @ 261 NONAME + _ZN8QWebPage10chooseFileEP9QWebFrameRK7QString @ 262 NONAME + _ZN8QWebPage10setPaletteERK8QPalette @ 263 NONAME + _ZN8QWebPage11linkClickedERK4QUrl @ 264 NONAME + _ZN8QWebPage11linkHoveredERK7QStringS2_S2_ @ 265 NONAME + _ZN8QWebPage11loadStartedEv @ 266 NONAME + _ZN8QWebPage11qt_metacallEN11QMetaObject4CallEiPPv @ 267 NONAME + _ZN8QWebPage11qt_metacastEPKc @ 268 NONAME + _ZN8QWebPage12createPluginERK7QStringRK4QUrlRK11QStringListS8_ @ 269 NONAME + _ZN8QWebPage12createWindowENS_13WebWindowTypeE @ 270 NONAME + _ZN8QWebPage12frameCreatedEP9QWebFrame @ 271 NONAME + _ZN8QWebPage12loadFinishedEb @ 272 NONAME + _ZN8QWebPage12loadProgressEi @ 273 NONAME + _ZN8QWebPage13triggerActionENS_9WebActionEb @ 274 NONAME + _ZN8QWebPage14printRequestedEP9QWebFrame @ 275 NONAME + _ZN8QWebPage15contentsChangedEv @ 276 NONAME + _ZN8QWebPage15javaScriptAlertEP9QWebFrameRK7QString @ 277 NONAME + _ZN8QWebPage15scrollRequestedEiiRK5QRect @ 278 NONAME + _ZN8QWebPage16javaScriptPromptEP9QWebFrameRK7QStringS4_PS2_ @ 279 NONAME + _ZN8QWebPage16repaintRequestedERK5QRect @ 280 NONAME + _ZN8QWebPage16selectionChangedEv @ 281 NONAME + _ZN8QWebPage16setPluginFactoryEP17QWebPluginFactory @ 282 NONAME + _ZN8QWebPage16staticMetaObjectE @ 283 NONAME DATA 16 + _ZN8QWebPage16statusBarMessageERK7QString @ 284 NONAME + _ZN8QWebPage17downloadRequestedERK15QNetworkRequest @ 285 NONAME + _ZN8QWebPage17javaScriptConfirmEP9QWebFrameRK7QString @ 286 NONAME + _ZN8QWebPage17microFocusChangedEv @ 287 NONAME + _ZN8QWebPage18focusNextPrevChildEb @ 288 NONAME + _ZN8QWebPage18setContentEditableEb @ 289 NONAME + _ZN8QWebPage18unsupportedContentEP13QNetworkReply @ 290 NONAME + _ZN8QWebPage19getStaticMetaObjectEv @ 291 NONAME + _ZN8QWebPage20windowCloseRequestedEv @ 292 NONAME + _ZN8QWebPage21databaseQuotaExceededEP9QWebFrame7QString @ 293 NONAME + _ZN8QWebPage21webInspectorTriggeredERK11QWebElement @ 294 NONAME ABSENT + _ZN8QWebPage23acceptNavigationRequestEP9QWebFrameRK15QNetworkRequestNS_14NavigationTypeE @ 295 NONAME + _ZN8QWebPage23geometryChangeRequestedERK5QRect @ 296 NONAME + _ZN8QWebPage23saveFrameStateRequestedEP9QWebFrameP15QWebHistoryItem @ 297 NONAME + _ZN8QWebPage23setLinkDelegationPolicyENS_20LinkDelegationPolicyE @ 298 NONAME + _ZN8QWebPage23setNetworkAccessManagerEP21QNetworkAccessManager @ 299 NONAME + _ZN8QWebPage23swallowContextMenuEventEP17QContextMenuEvent @ 300 NONAME + _ZN8QWebPage24javaScriptConsoleMessageERK7QStringiS2_ @ 301 NONAME + _ZN8QWebPage25createStandardContextMenuEv @ 302 NONAME + _ZN8QWebPage25shouldInterruptJavaScriptEv @ 303 NONAME + _ZN8QWebPage26restoreFrameStateRequestedEP9QWebFrame @ 304 NONAME + _ZN8QWebPage28setForwardUnsupportedContentEb @ 305 NONAME + _ZN8QWebPage30updatePositionDependentActionsERK6QPoint @ 306 NONAME + _ZN8QWebPage32menuBarVisibilityChangeRequestedEb @ 307 NONAME + _ZN8QWebPage32toolBarVisibilityChangeRequestedEb @ 308 NONAME + _ZN8QWebPage34statusBarVisibilityChangeRequestedEb @ 309 NONAME + _ZN8QWebPage5eventEP6QEvent @ 310 NONAME + _ZN8QWebPage7setViewEP7QWidget @ 311 NONAME + _ZN8QWebPage8findTextERK7QString6QFlagsINS_8FindFlagEE @ 312 NONAME + _ZN8QWebPage9extensionENS_9ExtensionEPKNS_15ExtensionOptionEPNS_15ExtensionReturnE @ 313 NONAME + _ZN8QWebPageC1EP7QObject @ 314 NONAME + _ZN8QWebPageC2EP7QObject @ 315 NONAME + _ZN8QWebPageD0Ev @ 316 NONAME + _ZN8QWebPageD1Ev @ 317 NONAME + _ZN8QWebPageD2Ev @ 318 NONAME + _ZN8QWebView10paintEventEP11QPaintEvent @ 319 NONAME + _ZN8QWebView10setContentERK10QByteArrayRK7QStringRK4QUrl @ 320 NONAME + _ZN8QWebView10urlChangedERK4QUrl @ 321 NONAME + _ZN8QWebView10wheelEventEP11QWheelEvent @ 322 NONAME + _ZN8QWebView11changeEventEP6QEvent @ 323 NONAME + _ZN8QWebView11iconChangedEv @ 324 NONAME + _ZN8QWebView11linkClickedERK4QUrl @ 325 NONAME + _ZN8QWebView11loadStartedEv @ 326 NONAME + _ZN8QWebView11qt_metacallEN11QMetaObject4CallEiPPv @ 327 NONAME + _ZN8QWebView11qt_metacastEPKc @ 328 NONAME + _ZN8QWebView11resizeEventEP12QResizeEvent @ 329 NONAME + _ZN8QWebView12createWindowEN8QWebPage13WebWindowTypeE @ 330 NONAME + _ZN8QWebView12focusInEventEP11QFocusEvent @ 331 NONAME + _ZN8QWebView12loadFinishedEb @ 332 NONAME + _ZN8QWebView12loadProgressEi @ 333 NONAME + _ZN8QWebView12titleChangedERK7QString @ 334 NONAME + _ZN8QWebView13dragMoveEventEP14QDragMoveEvent @ 335 NONAME + _ZN8QWebView13focusOutEventEP11QFocusEvent @ 336 NONAME + _ZN8QWebView13keyPressEventEP9QKeyEvent @ 337 NONAME + _ZN8QWebView13setRenderHintEN8QPainter10RenderHintEb @ 338 NONAME + _ZN8QWebView13setZoomFactorEf @ 339 NONAME + _ZN8QWebView14dragEnterEventEP15QDragEnterEvent @ 340 NONAME + _ZN8QWebView14dragLeaveEventEP15QDragLeaveEvent @ 341 NONAME + _ZN8QWebView14mouseMoveEventEP11QMouseEvent @ 342 NONAME + _ZN8QWebView14setRenderHintsE6QFlagsIN8QPainter10RenderHintEE @ 343 NONAME + _ZN8QWebView15keyReleaseEventEP9QKeyEvent @ 344 NONAME + _ZN8QWebView15mousePressEventEP11QMouseEvent @ 345 NONAME + _ZN8QWebView16contextMenuEventEP17QContextMenuEvent @ 346 NONAME + _ZN8QWebView16inputMethodEventEP17QInputMethodEvent @ 347 NONAME + _ZN8QWebView16selectionChangedEv @ 348 NONAME + _ZN8QWebView16staticMetaObjectE @ 349 NONAME DATA 16 + _ZN8QWebView16statusBarMessageERK7QString @ 350 NONAME + _ZN8QWebView17mouseReleaseEventEP11QMouseEvent @ 351 NONAME + _ZN8QWebView17triggerPageActionEN8QWebPage9WebActionEb @ 352 NONAME + _ZN8QWebView18focusNextPrevChildEb @ 353 NONAME + _ZN8QWebView18guessUrlFromStringERK7QString @ 354 NONAME ABSENT + _ZN8QWebView19getStaticMetaObjectEv @ 355 NONAME + _ZN8QWebView21mouseDoubleClickEventEP11QMouseEvent @ 356 NONAME + _ZN8QWebView21setTextSizeMultiplierEf @ 357 NONAME + _ZN8QWebView4backEv @ 358 NONAME + _ZN8QWebView4loadERK15QNetworkRequestN21QNetworkAccessManager9OperationERK10QByteArray @ 359 NONAME + _ZN8QWebView4loadERK4QUrl @ 360 NONAME + _ZN8QWebView4stopEv @ 361 NONAME + _ZN8QWebView5eventEP6QEvent @ 362 NONAME + _ZN8QWebView6reloadEv @ 363 NONAME + _ZN8QWebView6setUrlERK4QUrl @ 364 NONAME + _ZN8QWebView7forwardEv @ 365 NONAME + _ZN8QWebView7setHtmlERK7QStringRK4QUrl @ 366 NONAME + _ZN8QWebView7setPageEP8QWebPage @ 367 NONAME + _ZN8QWebView8findTextERK7QString6QFlagsIN8QWebPage8FindFlagEE @ 368 NONAME + _ZN8QWebView9dropEventEP10QDropEvent @ 369 NONAME + _ZN8QWebViewC1EP7QWidget @ 370 NONAME + _ZN8QWebViewC2EP7QWidget @ 371 NONAME + _ZN8QWebViewD0Ev @ 372 NONAME + _ZN8QWebViewD1Ev @ 373 NONAME + _ZN8QWebViewD2Ev @ 374 NONAME + _ZN9QWebFrame10setContentERK10QByteArrayRK7QStringRK4QUrl @ 375 NONAME + _ZN9QWebFrame10urlChangedERK4QUrl @ 376 NONAME + _ZN9QWebFrame11iconChangedEv @ 377 NONAME + _ZN9QWebFrame11loadStartedEv @ 378 NONAME + _ZN9QWebFrame11qt_metacallEN11QMetaObject4CallEiPPv @ 379 NONAME + _ZN9QWebFrame11qt_metacastEPKc @ 380 NONAME + _ZN9QWebFrame12loadFinishedEb @ 381 NONAME + _ZN9QWebFrame12titleChangedERK7QString @ 382 NONAME + _ZN9QWebFrame13setZoomFactorEf @ 383 NONAME + _ZN9QWebFrame15provisionalLoadEv @ 384 NONAME + _ZN9QWebFrame16staticMetaObjectE @ 385 NONAME DATA 16 + _ZN9QWebFrame17setScrollBarValueEN2Qt11OrientationEi @ 386 NONAME + _ZN9QWebFrame17setScrollPositionERK6QPoint @ 387 NONAME + _ZN9QWebFrame18evaluateJavaScriptERK7QString @ 388 NONAME + _ZN9QWebFrame18setScrollBarPolicyEN2Qt11OrientationENS0_15ScrollBarPolicyE @ 389 NONAME + _ZN9QWebFrame19contentsSizeChangedERK5QSize @ 390 NONAME + _ZN9QWebFrame19getStaticMetaObjectEv @ 391 NONAME + _ZN9QWebFrame21setTextSizeMultiplierEf @ 392 NONAME + _ZN9QWebFrame22initialLayoutCompletedEv @ 393 NONAME + _ZN9QWebFrame23setClipRenderToViewportEb @ 394 NONAME ABSENT + _ZN9QWebFrame27addToJavaScriptWindowObjectERK7QStringP7QObject @ 395 NONAME + _ZN9QWebFrame27addToJavaScriptWindowObjectERK7QStringP7QObjectN13QScriptEngine14ValueOwnershipE @ 396 NONAME + _ZN9QWebFrame29javaScriptWindowObjectClearedEv @ 397 NONAME + _ZN9QWebFrame4loadERK15QNetworkRequestN21QNetworkAccessManager9OperationERK10QByteArray @ 398 NONAME + _ZN9QWebFrame4loadERK4QUrl @ 399 NONAME + _ZN9QWebFrame5eventEP6QEvent @ 400 NONAME + _ZN9QWebFrame6renderEP8QPainter @ 401 NONAME + _ZN9QWebFrame6renderEP8QPainterRK7QRegion @ 402 NONAME + _ZN9QWebFrame6scrollEii @ 403 NONAME + _ZN9QWebFrame6setUrlERK4QUrl @ 404 NONAME + _ZN9QWebFrame7setHtmlERK7QStringRK4QUrl @ 405 NONAME + _ZN9QWebFrame8setFocusEv @ 406 NONAME + _ZN9QWebFrameC1EP8QWebPageP13QWebFrameData @ 407 NONAME + _ZN9QWebFrameC1EPS_P13QWebFrameData @ 408 NONAME + _ZN9QWebFrameC2EP8QWebPageP13QWebFrameData @ 409 NONAME + _ZN9QWebFrameC2EPS_P13QWebFrameData @ 410 NONAME + _ZN9QWebFrameD0Ev @ 411 NONAME + _ZN9QWebFrameD1Ev @ 412 NONAME + _ZN9QWebFrameD2Ev @ 413 NONAME + _ZNK11QWebElement10firstChildEv @ 414 NONAME + _ZNK11QWebElement10toInnerXmlEv @ 415 NONAME + _ZNK11QWebElement10toOuterXmlEv @ 416 NONAME + _ZNK11QWebElement11attributeNSERK7QStringS2_S2_ @ 417 NONAME + _ZNK11QWebElement11nextSiblingEv @ 418 NONAME + _ZNK11QWebElement11toPlainTextEv @ 419 NONAME + _ZNK11QWebElement12hasAttributeERK7QString @ 420 NONAME + _ZNK11QWebElement12namespaceUriEv @ 421 NONAME + _ZNK11QWebElement13hasAttributesEv @ 422 NONAME + _ZNK11QWebElement13stylePropertyERK7QStringNS_20StyleResolveStrategyE @ 423 NONAME + _ZNK11QWebElement14hasAttributeNSERK7QStringS2_ @ 424 NONAME + _ZNK11QWebElement15previousSiblingEv @ 425 NONAME + _ZNK11QWebElement5cloneEv @ 426 NONAME + _ZNK11QWebElement6isNullEv @ 427 NONAME + _ZNK11QWebElement6parentEv @ 428 NONAME + _ZNK11QWebElement6prefixEv @ 429 NONAME + _ZNK11QWebElement7classesEv @ 430 NONAME + _ZNK11QWebElement7findAllERK7QString @ 431 NONAME + _ZNK11QWebElement7tagNameEv @ 432 NONAME + _ZNK11QWebElement8documentEv @ 433 NONAME + _ZNK11QWebElement8geometryEv @ 434 NONAME + _ZNK11QWebElement8hasClassERK7QString @ 435 NONAME + _ZNK11QWebElement8hasFocusEv @ 436 NONAME + _ZNK11QWebElement8webFrameEv @ 437 NONAME + _ZNK11QWebElement9attributeERK7QStringS2_ @ 438 NONAME + _ZNK11QWebElement9findFirstERK7QString @ 439 NONAME + _ZNK11QWebElement9lastChildEv @ 440 NONAME + _ZNK11QWebElement9localNameEv @ 441 NONAME + _ZNK11QWebElementeqERKS_ @ 442 NONAME + _ZNK11QWebElementneERKS_ @ 443 NONAME + _ZNK11QWebHistory11currentItemEv @ 444 NONAME + _ZNK11QWebHistory11forwardItemEv @ 445 NONAME + _ZNK11QWebHistory12canGoForwardEv @ 446 NONAME + _ZNK11QWebHistory12forwardItemsEi @ 447 NONAME + _ZNK11QWebHistory16currentItemIndexEv @ 448 NONAME + _ZNK11QWebHistory16maximumItemCountEv @ 449 NONAME + _ZNK11QWebHistory5countEv @ 450 NONAME + _ZNK11QWebHistory5itemsEv @ 451 NONAME + _ZNK11QWebHistory6itemAtEi @ 452 NONAME + _ZNK11QWebHistory8backItemEv @ 453 NONAME + _ZNK11QWebHistory9backItemsEi @ 454 NONAME + _ZNK11QWebHistory9canGoBackEv @ 455 NONAME + _ZNK11QWebHistory9saveStateENS_19HistoryStateVersionE @ 456 NONAME ABSENT + _ZNK12QWebDatabase11displayNameEv @ 457 NONAME + _ZNK12QWebDatabase12expectedSizeEv @ 458 NONAME + _ZNK12QWebDatabase4nameEv @ 459 NONAME + _ZNK12QWebDatabase4sizeEv @ 460 NONAME + _ZNK12QWebDatabase6originEv @ 461 NONAME + _ZNK12QWebDatabase8fileNameEv @ 462 NONAME + _ZNK12QWebSettings10fontFamilyENS_10FontFamilyE @ 463 NONAME + _ZNK12QWebSettings13testAttributeENS_12WebAttributeE @ 464 NONAME + _ZNK12QWebSettings16localStoragePathEv @ 465 NONAME + _ZNK12QWebSettings17userStyleSheetUrlEv @ 466 NONAME + _ZNK12QWebSettings19defaultTextEncodingEv @ 467 NONAME + _ZNK12QWebSettings8fontSizeENS_8FontSizeE @ 468 NONAME + _ZNK13QWebInspector10metaObjectEv @ 469 NONAME + _ZNK13QWebInspector4pageEv @ 470 NONAME + _ZNK13QWebInspector8sizeHintEv @ 471 NONAME + _ZNK14QWebPluginInfo11descriptionEv @ 472 NONAME + _ZNK14QWebPluginInfo16supportsMimeTypeERK7QString @ 473 NONAME + _ZNK14QWebPluginInfo4nameEv @ 474 NONAME + _ZNK14QWebPluginInfo4pathEv @ 475 NONAME + _ZNK14QWebPluginInfo6isNullEv @ 476 NONAME + _ZNK14QWebPluginInfo9isEnabledEv @ 477 NONAME + _ZNK14QWebPluginInfo9mimeTypesEv @ 478 NONAME + _ZNK14QWebPluginInfoeqERKS_ @ 479 NONAME + _ZNK14QWebPluginInfoneERKS_ @ 480 NONAME + _ZNK15QWebHistoryItem11lastVisitedEv @ 481 NONAME + _ZNK15QWebHistoryItem11originalUrlEv @ 482 NONAME + _ZNK15QWebHistoryItem3urlEv @ 483 NONAME + _ZNK15QWebHistoryItem4iconEv @ 484 NONAME + _ZNK15QWebHistoryItem5titleEv @ 485 NONAME + _ZNK15QWebHistoryItem7isValidEv @ 486 NONAME + _ZNK15QWebHistoryItem8userDataEv @ 487 NONAME + _ZNK16QGraphicsWebView10metaObjectEv @ 488 NONAME + _ZNK16QGraphicsWebView10zoomFactorEv @ 489 NONAME + _ZNK16QGraphicsWebView13isInteractiveEv @ 490 NONAME ABSENT + _ZNK16QGraphicsWebView3urlEv @ 491 NONAME + _ZNK16QGraphicsWebView4iconEv @ 492 NONAME + _ZNK16QGraphicsWebView4pageEv @ 493 NONAME + _ZNK16QGraphicsWebView5titleEv @ 494 NONAME + _ZNK16QGraphicsWebView6statusEv @ 495 NONAME ABSENT + _ZNK16QGraphicsWebView6toHtmlEv @ 496 NONAME ABSENT + _ZNK16QGraphicsWebView7historyEv @ 497 NONAME + _ZNK16QGraphicsWebView8progressEv @ 498 NONAME ABSENT + _ZNK16QGraphicsWebView8settingsEv @ 499 NONAME + _ZNK17QWebHitTestResult11linkElementEv @ 500 NONAME + _ZNK17QWebHitTestResult12boundingRectEv @ 501 NONAME + _ZNK17QWebHitTestResult13alternateTextEv @ 502 NONAME + _ZNK17QWebHitTestResult15linkTargetFrameEv @ 503 NONAME + _ZNK17QWebHitTestResult17isContentEditableEv @ 504 NONAME + _ZNK17QWebHitTestResult17isContentSelectedEv @ 505 NONAME + _ZNK17QWebHitTestResult21enclosingBlockElementEv @ 506 NONAME + _ZNK17QWebHitTestResult3posEv @ 507 NONAME + _ZNK17QWebHitTestResult5frameEv @ 508 NONAME + _ZNK17QWebHitTestResult5titleEv @ 509 NONAME + _ZNK17QWebHitTestResult6isNullEv @ 510 NONAME + _ZNK17QWebHitTestResult6pixmapEv @ 511 NONAME + _ZNK17QWebHitTestResult7elementEv @ 512 NONAME + _ZNK17QWebHitTestResult7linkUrlEv @ 513 NONAME + _ZNK17QWebHitTestResult8imageUrlEv @ 514 NONAME + _ZNK17QWebHitTestResult8linkTextEv @ 515 NONAME + _ZNK17QWebHitTestResult9linkTitleEv @ 516 NONAME + _ZNK17QWebPluginFactory10metaObjectEv @ 517 NONAME + _ZNK17QWebPluginFactory17supportsExtensionENS_9ExtensionE @ 518 NONAME + _ZNK17QWebPluginFactory8MimeTypeeqERKS0_ @ 519 NONAME + _ZNK18QWebPluginDatabase10metaObjectEv @ 520 NONAME + _ZNK18QWebPluginDatabase11searchPathsEv @ 521 NONAME + _ZNK18QWebPluginDatabase7pluginsEv @ 522 NONAME + _ZNK18QWebSecurityOrigin13databaseQuotaEv @ 523 NONAME + _ZNK18QWebSecurityOrigin13databaseUsageEv @ 524 NONAME + _ZNK18QWebSecurityOrigin4hostEv @ 525 NONAME + _ZNK18QWebSecurityOrigin4portEv @ 526 NONAME + _ZNK18QWebSecurityOrigin6schemeEv @ 527 NONAME + _ZNK18QWebSecurityOrigin9databasesEv @ 528 NONAME + _ZNK20QWebHistoryInterface10metaObjectEv @ 529 NONAME + _ZNK8QWebPage10isModifiedEv @ 530 NONAME + _ZNK8QWebPage10metaObjectEv @ 531 NONAME + _ZNK8QWebPage10totalBytesEv @ 532 NONAME + _ZNK8QWebPage12currentFrameEv @ 533 NONAME + _ZNK8QWebPage12selectedTextEv @ 534 NONAME + _ZNK8QWebPage12viewportSizeEv @ 535 NONAME + _ZNK8QWebPage13bytesReceivedEv @ 536 NONAME + _ZNK8QWebPage13pluginFactoryEv @ 537 NONAME + _ZNK8QWebPage15setViewportSizeERK5QSize @ 538 NONAME + _ZNK8QWebPage15userAgentForUrlERK4QUrl @ 539 NONAME + _ZNK8QWebPage16inputMethodQueryEN2Qt16InputMethodQueryE @ 540 NONAME + _ZNK8QWebPage17fixedContentsSizeEv @ 541 NONAME ABSENT + _ZNK8QWebPage17isContentEditableEv @ 542 NONAME + _ZNK8QWebPage17supportsExtensionENS_9ExtensionE @ 543 NONAME + _ZNK8QWebPage20linkDelegationPolicyEv @ 544 NONAME + _ZNK8QWebPage20networkAccessManagerEv @ 545 NONAME + _ZNK8QWebPage20setFixedContentsSizeERK5QSize @ 546 NONAME ABSENT + _ZNK8QWebPage25forwardUnsupportedContentEv @ 547 NONAME + _ZNK8QWebPage4viewEv @ 548 NONAME + _ZNK8QWebPage6actionENS_9WebActionE @ 549 NONAME + _ZNK8QWebPage7frameAtERK6QPoint @ 550 NONAME + _ZNK8QWebPage7historyEv @ 551 NONAME + _ZNK8QWebPage7paletteEv @ 552 NONAME + _ZNK8QWebPage8settingsEv @ 553 NONAME + _ZNK8QWebPage9mainFrameEv @ 554 NONAME + _ZNK8QWebPage9undoStackEv @ 555 NONAME + _ZNK8QWebView10isModifiedEv @ 556 NONAME + _ZNK8QWebView10metaObjectEv @ 557 NONAME + _ZNK8QWebView10pageActionEN8QWebPage9WebActionE @ 558 NONAME + _ZNK8QWebView10zoomFactorEv @ 559 NONAME + _ZNK8QWebView11renderHintsEv @ 560 NONAME + _ZNK8QWebView12selectedTextEv @ 561 NONAME + _ZNK8QWebView16inputMethodQueryEN2Qt16InputMethodQueryE @ 562 NONAME + _ZNK8QWebView18textSizeMultiplierEv @ 563 NONAME + _ZNK8QWebView3urlEv @ 564 NONAME + _ZNK8QWebView4iconEv @ 565 NONAME + _ZNK8QWebView4pageEv @ 566 NONAME + _ZNK8QWebView5printEP8QPrinter @ 567 NONAME + _ZNK8QWebView5titleEv @ 568 NONAME + _ZNK8QWebView7historyEv @ 569 NONAME + _ZNK8QWebView8settingsEv @ 570 NONAME + _ZNK8QWebView8sizeHintEv @ 571 NONAME + _ZNK9QWebFrame10metaObjectEv @ 572 NONAME + _ZNK9QWebFrame10zoomFactorEv @ 573 NONAME + _ZNK9QWebFrame11childFramesEv @ 574 NONAME + _ZNK9QWebFrame11parentFrameEv @ 575 NONAME + _ZNK9QWebFrame11toPlainTextEv @ 576 NONAME + _ZNK9QWebFrame12contentsSizeEv @ 577 NONAME + _ZNK9QWebFrame12requestedUrlEv @ 578 NONAME + _ZNK9QWebFrame14hitTestContentERK6QPoint @ 579 NONAME + _ZNK9QWebFrame14renderTreeDumpEv @ 580 NONAME + _ZNK9QWebFrame14scrollBarValueEN2Qt11OrientationE @ 581 NONAME + _ZNK9QWebFrame14scrollPositionEv @ 582 NONAME + _ZNK9QWebFrame14securityOriginEv @ 583 NONAME + _ZNK9QWebFrame15documentElementEv @ 584 NONAME + _ZNK9QWebFrame15findAllElementsERK7QString @ 585 NONAME + _ZNK9QWebFrame15scrollBarPolicyEN2Qt11OrientationE @ 586 NONAME + _ZNK9QWebFrame16findFirstElementERK7QString @ 587 NONAME + _ZNK9QWebFrame16scrollBarMaximumEN2Qt11OrientationE @ 588 NONAME + _ZNK9QWebFrame16scrollBarMinimumEN2Qt11OrientationE @ 589 NONAME + _ZNK9QWebFrame17scrollBarGeometryEN2Qt11OrientationE @ 590 NONAME + _ZNK9QWebFrame18textSizeMultiplierEv @ 591 NONAME + _ZNK9QWebFrame20clipRenderToViewportEv @ 592 NONAME ABSENT + _ZNK9QWebFrame3posEv @ 593 NONAME + _ZNK9QWebFrame3urlEv @ 594 NONAME + _ZNK9QWebFrame4iconEv @ 595 NONAME + _ZNK9QWebFrame4pageEv @ 596 NONAME + _ZNK9QWebFrame5titleEv @ 597 NONAME + _ZNK9QWebFrame6toHtmlEv @ 598 NONAME + _ZNK9QWebFrame7baseUrlEv @ 599 NONAME + _ZNK9QWebFrame8geometryEv @ 600 NONAME + _ZNK9QWebFrame8hasFocusEv @ 601 NONAME + _ZNK9QWebFrame8metaDataEv @ 602 NONAME + _ZNK9QWebFrame9frameNameEv @ 603 NONAME + _ZTI13QWebInspector @ 604 NONAME + _ZTI16QGraphicsWebView @ 605 NONAME + _ZTI17QWebPluginFactory @ 606 NONAME + _ZTI18QWebPluginDatabase @ 607 NONAME + _ZTI20QWebHistoryInterface @ 608 NONAME + _ZTI8QWebPage @ 609 NONAME + _ZTI8QWebView @ 610 NONAME + _ZTI9QWebFrame @ 611 NONAME + _ZTV13QWebInspector @ 612 NONAME + _ZTV16QGraphicsWebView @ 613 NONAME + _ZTV17QWebPluginFactory @ 614 NONAME + _ZTV18QWebPluginDatabase @ 615 NONAME + _ZTV20QWebHistoryInterface @ 616 NONAME + _ZTV8QWebPage @ 617 NONAME + _ZTV8QWebView @ 618 NONAME + _ZTV9QWebFrame @ 619 NONAME + _ZThn16_N16QGraphicsWebView11setGeometryERK6QRectF @ 620 NONAME + _ZThn16_N16QGraphicsWebView14updateGeometryEv @ 621 NONAME + _ZThn16_N16QGraphicsWebViewD0Ev @ 622 NONAME + _ZThn16_N16QGraphicsWebViewD1Ev @ 623 NONAME + _ZThn8_N13QWebInspectorD0Ev @ 624 NONAME + _ZThn8_N13QWebInspectorD1Ev @ 625 NONAME + _ZThn8_N16QGraphicsWebView10sceneEventEP6QEvent @ 626 NONAME + _ZThn8_N16QGraphicsWebView10wheelEventEP24QGraphicsSceneWheelEvent @ 627 NONAME + _ZThn8_N16QGraphicsWebView12focusInEventEP11QFocusEvent @ 628 NONAME + _ZThn8_N16QGraphicsWebView13dragMoveEventEP27QGraphicsSceneDragDropEvent @ 629 NONAME + _ZThn8_N16QGraphicsWebView13focusOutEventEP11QFocusEvent @ 630 NONAME + _ZThn8_N16QGraphicsWebView13keyPressEventEP9QKeyEvent @ 631 NONAME + _ZThn8_N16QGraphicsWebView14dragEnterEventEP27QGraphicsSceneDragDropEvent @ 632 NONAME + _ZThn8_N16QGraphicsWebView14dragLeaveEventEP27QGraphicsSceneDragDropEvent @ 633 NONAME + _ZThn8_N16QGraphicsWebView14hoverMoveEventEP24QGraphicsSceneHoverEvent @ 634 NONAME + _ZThn8_N16QGraphicsWebView14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 635 NONAME + _ZThn8_N16QGraphicsWebView15hoverLeaveEventEP24QGraphicsSceneHoverEvent @ 636 NONAME + _ZThn8_N16QGraphicsWebView15keyReleaseEventEP9QKeyEvent @ 637 NONAME + _ZThn8_N16QGraphicsWebView15mousePressEventEP24QGraphicsSceneMouseEvent @ 638 NONAME + _ZThn8_N16QGraphicsWebView16contextMenuEventEP30QGraphicsSceneContextMenuEvent @ 639 NONAME + _ZThn8_N16QGraphicsWebView16inputMethodEventEP17QInputMethodEvent @ 640 NONAME + _ZThn8_N16QGraphicsWebView17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 641 NONAME + _ZThn8_N16QGraphicsWebView21mouseDoubleClickEventEP24QGraphicsSceneMouseEvent @ 642 NONAME + _ZThn8_N16QGraphicsWebView5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 643 NONAME + _ZThn8_N16QGraphicsWebView9dropEventEP27QGraphicsSceneDragDropEvent @ 644 NONAME + _ZThn8_N16QGraphicsWebViewD0Ev @ 645 NONAME + _ZThn8_N16QGraphicsWebViewD1Ev @ 646 NONAME + _ZThn8_N8QWebViewD0Ev @ 647 NONAME + _ZThn8_N8QWebViewD1Ev @ 648 NONAME + _ZlsR11QDataStreamRK11QWebHistory @ 649 NONAME + _ZrsR11QDataStreamR11QWebHistory @ 650 NONAME + _Z32qt_drt_whiteListAccessFromOriginRK7QStringS1_S1_b @ 651 NONAME + _Z33qt_drt_counterValueForElementByIdP9QWebFrameRK7QString @ 652 NONAME ABSENT + _Z34qt_drt_resetOriginAccessWhiteListsv @ 653 NONAME + _ZN11QWebElement17removeAllChildrenEv @ 654 NONAME + _ZN11QWebElement6renderEP8QPainter @ 655 NONAME + _ZN12QWebSettings30setPrintingMaximumShrinkFactorEf @ 656 NONAME ABSENT + _ZN12QWebSettings30setPrintingMinimumShrinkFactorEf @ 657 NONAME ABSENT + _ZN16QGraphicsWebView10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 658 NONAME + _ZN16QGraphicsWebView11linkClickedERK4QUrl @ 659 NONAME + _ZN16QGraphicsWebView12loadFinishedEb @ 660 NONAME + _ZN16QGraphicsWebView12loadProgressEi @ 661 NONAME + _ZN16QGraphicsWebView16statusBarMessageERK7QString @ 662 NONAME + _ZN16QGraphicsWebView17triggerPageActionEN8QWebPage9WebActionEb @ 663 NONAME + _ZN16QGraphicsWebView8findTextERK7QString6QFlagsIN8QWebPage8FindFlagEE @ 664 NONAME + _ZN21QWebElementCollection6appendERKS_ @ 665 NONAME + _ZN21QWebElementCollectionC1ERK11QWebElementRK7QString @ 666 NONAME + _ZN21QWebElementCollectionC1ERKS_ @ 667 NONAME + _ZN21QWebElementCollectionC1Ev @ 668 NONAME + _ZN21QWebElementCollectionC2ERK11QWebElementRK7QString @ 669 NONAME + _ZN21QWebElementCollectionC2ERKS_ @ 670 NONAME + _ZN21QWebElementCollectionC2Ev @ 671 NONAME + _ZN21QWebElementCollectionD1Ev @ 672 NONAME + _ZN21QWebElementCollectionD2Ev @ 673 NONAME + _ZN21QWebElementCollectionaSERKS_ @ 674 NONAME + _ZN9QWebFrame6renderEP8QPainterNS_11RenderLayerERK7QRegion @ 675 NONAME + _ZNK12QWebSettings27printingMaximumShrinkFactorEv @ 676 NONAME ABSENT + _ZNK12QWebSettings27printingMinimumShrinkFactorEv @ 677 NONAME ABSENT + _ZNK16QGraphicsWebView10isModifiedEv @ 678 NONAME + _ZNK16QGraphicsWebView10pageActionEN8QWebPage9WebActionE @ 679 NONAME + _ZNK16QGraphicsWebView16inputMethodQueryEN2Qt16InputMethodQueryE @ 680 NONAME + _ZNK16QGraphicsWebView8sizeHintEN2Qt8SizeHintERK6QSizeF @ 681 NONAME + _ZNK21QWebElementCollection2atEi @ 682 NONAME + _ZNK21QWebElementCollection5countEv @ 683 NONAME + _ZNK21QWebElementCollection6toListEv @ 684 NONAME + _ZNK21QWebElementCollectionplERKS_ @ 685 NONAME + _ZNK8QWebPage21preferredContentsSizeEv @ 686 NONAME + _ZNK8QWebPage24setPreferredContentsSizeERK5QSize @ 687 NONAME + _ZThn16_NK16QGraphicsWebView8sizeHintEN2Qt8SizeHintERK6QSizeF @ 688 NONAME + _ZThn8_N16QGraphicsWebView10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 689 NONAME + _ZThn8_NK16QGraphicsWebView16inputMethodQueryEN2Qt16InputMethodQueryE @ 690 NONAME + _ZNK11QWebElement14attributeNamesERK7QString @ 691 NONAME + _Z23qt_networkAccessAllowedb @ 692 NONAME + _Z25qt_resumeActiveDOMObjectsP9QWebFrame @ 693 NONAME + _Z26qt_suspendActiveDOMObjectsP9QWebFrame @ 694 NONAME + _Z35qtwebkit_webframe_scrollRecursivelyP9QWebFrameii @ 695 NONAME ABSENT + _Z35qtwebkit_webframe_scrollRecursivelyP9QWebFrameiiRK6QPoint @ 696 NONAME + _ZN9QWebFrame17scrollRecursivelyEii @ 697 NONAME ABSENT + _ZN16QGraphicsWebView20setResizesToContentsEb @ 698 NONAME + _ZNK16QGraphicsWebView17resizesToContentsEv @ 699 NONAME + _Z20qt_drt_numberOfPagesP9QWebFrameff @ 700 NONAME ABSENT + _Z24qt_drt_pauseSVGAnimationP9QWebFrameRK7QStringdS3_ @ 701 NONAME ABSENT + _Z24qt_drt_webinspector_showP8QWebPage @ 702 NONAME ABSENT + _Z24qt_drt_workerThreadCountv @ 703 NONAME ABSENT + _Z25qt_drt_hasDocumentElementP9QWebFrame @ 704 NONAME ABSENT + _Z25qt_drt_webinspector_closeP8QWebPage @ 705 NONAME ABSENT + _Z31qt_drt_pageNumberForElementByIdP9QWebFrameRK7QStringff @ 706 NONAME ABSENT + _Z33qt_drt_webinspector_executeScriptP8QWebPagelRK7QString @ 707 NONAME ABSENT + _Z34qt_drt_setTimelineProfilingEnabledP8QWebPageb @ 708 NONAME ABSENT + _Z32qt_drt_setFrameFlatteningEnabledP8QWebPageb @ 709 NONAME ABSENT + _Z36qt_drt_evaluateScriptInIsolatedWorldP9QWebFrameiRK7QString @ 710 NONAME ABSENT + _Z47qt_drt_setDomainRelaxationForbiddenForURLSchemebRK7QString @ 711 NONAME ABSENT + _ZN9QWebFrame11pageChangedEv @ 712 NONAME + _ZN9QWebFrame14scrollToAnchorERK7QString @ 713 NONAME + _ZN12QWebSettings15setInspectorUrlERK4QUrl @ 714 NONAME ABSENT + _ZN13QWebInspector10closeEventEP11QCloseEvent @ 715 NONAME + _ZN16QGraphicsWebView26setTiledBackingStoreFrozenEb @ 716 NONAME + _ZNK16QGraphicsWebView25isTiledBackingStoreFrozenEv @ 717 NONAME + _Z18qt_wrt_setViewModeP8QWebPageRK7QString @ 718 NONAME ABSENT + _Z19qt_drt_setMediaTypeP9QWebFrameRK7QString @ 719 NONAME ABSENT + _Z26qt_drt_enableCaretBrowsingP8QWebPageb @ 720 NONAME ABSENT + _ZNK12QWebSettings12inspectorUrlEv @ 721 NONAME ABSENT + _ZN23DumpRenderTreeSupportQt19webPageSetGroupNameEP8QWebPageRK7QString @ 722 NONAME + _ZN23DumpRenderTreeSupportQt16webPageGroupNameEP8QWebPage @ 723 NONAME + _ZN23DumpRenderTreeSupportQt23garbageCollectorCollectEv @ 724 NONAME + _Z32qtwebkit_webframe_scrollOverflowP9QWebFrameiiRK6QPoint @ 725 NONAME + _ZN23DumpRenderTreeSupportQt12setMediaTypeEP9QWebFrameRK7QString @ 726 NONAME + _ZN23DumpRenderTreeSupportQt13numberOfPagesEP9QWebFrameff @ 727 NONAME + _ZN23DumpRenderTreeSupportQt13selectedRangeEP8QWebPage @ 728 NONAME + _ZN23DumpRenderTreeSupportQt14clearFrameNameEP9QWebFrame @ 729 NONAME + _ZN23DumpRenderTreeSupportQt14pauseAnimationEP9QWebFrameRK7QStringdS4_ @ 730 NONAME + _ZN23DumpRenderTreeSupportQt15dumpFrameLoaderEb @ 731 NONAME + _ZN23DumpRenderTreeSupportQt16dumpNotificationEb @ 732 NONAME + _ZN23DumpRenderTreeSupportQt16isCommandEnabledEP8QWebPageRK7QString @ 733 NONAME + _ZN23DumpRenderTreeSupportQt16webInspectorShowEP8QWebPage @ 734 NONAME + _ZN23DumpRenderTreeSupportQt17pauseSVGAnimationEP9QWebFrameRK7QStringdS4_ @ 735 NONAME + _ZN23DumpRenderTreeSupportQt17webInspectorCloseEP8QWebPage @ 736 NONAME + _ZN23DumpRenderTreeSupportQt17workerThreadCountEv @ 737 NONAME + _ZN23DumpRenderTreeSupportQt18hasDocumentElementEP9QWebFrame @ 738 NONAME + _ZN23DumpRenderTreeSupportQt20dumpEditingCallbacksEb @ 739 NONAME + _ZN23DumpRenderTreeSupportQt21markerTextForListItemERK11QWebElement @ 740 NONAME + _ZN23DumpRenderTreeSupportQt22javaScriptObjectsCountEv @ 741 NONAME + _ZN23DumpRenderTreeSupportQt23setCaretBrowsingEnabledEP8QWebPageb @ 742 NONAME + _ZN23DumpRenderTreeSupportQt24executeCoreCommandByNameEP8QWebPageRK7QStringS4_ @ 743 NONAME + _ZN23DumpRenderTreeSupportQt21dumpSetAcceptsEditingEb @ 744 NONAME + _ZN23DumpRenderTreeSupportQt22resumeActiveDOMObjectsEP9QWebFrame @ 745 NONAME + _ZN23DumpRenderTreeSupportQt23suspendActiveDOMObjectsEP9QWebFrame @ 746 NONAME + _ZN23DumpRenderTreeSupportQt24numberOfActiveAnimationsEP9QWebFrame @ 747 NONAME + _ZN23DumpRenderTreeSupportQt24pageNumberForElementByIdEP9QWebFrameRK7QStringff @ 748 NONAME + _ZN23DumpRenderTreeSupportQt25dumpResourceLoadCallbacksEb @ 749 NONAME + _ZN23DumpRenderTreeSupportQt25pauseTransitionOfPropertyEP9QWebFrameRK7QStringdS4_ @ 750 NONAME + _ZN23DumpRenderTreeSupportQt25setFrameFlatteningEnabledEP8QWebPageb @ 751 NONAME + _ZN23DumpRenderTreeSupportQt25webInspectorExecuteScriptEP8QWebPagelRK7QString @ 752 NONAME + _ZN23DumpRenderTreeSupportQt25whiteListAccessFromOriginERK7QStringS2_S2_b @ 753 NONAME + _ZN23DumpRenderTreeSupportQt26counterValueForElementByIdEP9QWebFrameRK7QString @ 754 NONAME + _ZN23DumpRenderTreeSupportQt26firstRectForCharacterRangeEP8QWebPageii @ 755 NONAME + _ZN23DumpRenderTreeSupportQt26overwritePluginDirectoriesEv @ 756 NONAME + _ZN23DumpRenderTreeSupportQt27resetOriginAccessWhiteListsEv @ 757 NONAME + _ZN23DumpRenderTreeSupportQt27setSmartInsertDeleteEnabledEP8QWebPageb @ 758 NONAME + _ZN23DumpRenderTreeSupportQt27setTimelineProfilingEnabledEP8QWebPageb @ 759 NONAME + _ZN23DumpRenderTreeSupportQt28setDumpRenderTreeModeEnabledEb @ 760 NONAME + _ZN23DumpRenderTreeSupportQt29dumpResourceLoadCallbacksPathERK7QString @ 761 NONAME + _ZN23DumpRenderTreeSupportQt29evaluateScriptInIsolatedWorldEP9QWebFrameiRK7QString @ 762 NONAME + _ZN23DumpRenderTreeSupportQt29setJavaScriptProfilingEnabledEP9QWebFrameb @ 763 NONAME + _ZN23DumpRenderTreeSupportQt29setWillSendRequestReturnsNullEb @ 764 NONAME + _ZN23DumpRenderTreeSupportQt30setWillSendRequestClearHeadersERK11QStringList @ 765 NONAME + _ZN23DumpRenderTreeSupportQt33computedStyleIncludingVisitedInfoERK11QWebElement @ 766 NONAME + _ZN23DumpRenderTreeSupportQt34setSelectTrailingWhitespaceEnabledEP8QWebPageb @ 767 NONAME + _ZN23DumpRenderTreeSupportQt39elementDoesAutoCompleteForElementWithIdEP9QWebFrameRK7QString @ 768 NONAME + _ZN23DumpRenderTreeSupportQt39setWillSendRequestReturnsNullOnRedirectEb @ 769 NONAME + _ZN23DumpRenderTreeSupportQt40garbageCollectorCollectOnAlternateThreadEb @ 770 NONAME + _ZN23DumpRenderTreeSupportQt40setDomainRelaxationForbiddenForURLSchemeEbRK7QString @ 771 NONAME + _ZN23DumpRenderTreeSupportQt18setEditingBehaviorEP8QWebPageRK7QString @ 772 NONAME + _ZN23DumpRenderTreeSupportQt24setNotificationsReceiverEP7QObject @ 773 NONAME ABSENT + _ZN23DumpRenderTreeSupportQt26allowNotificationForOriginERK7QString @ 774 NONAME ABSENT + _ZN23DumpRenderTreeSupportQt26setCheckPermissionFunctionEPFvP7QObjectRK4QUrlR22NotificationPermissionE @ 775 NONAME ABSENT + _ZN23DumpRenderTreeSupportQt28setRequestPermissionFunctionEPFvP7QObjectRK7QStringE @ 776 NONAME ABSENT + _ZN23DumpRenderTreeSupportQt31removeWhiteListAccessFromOriginERK7QStringS2_S2_b @ 777 NONAME + _ZN23DumpRenderTreeSupportQt11shouldCloseEP9QWebFrame @ 778 NONAME + _ZN23DumpRenderTreeSupportQt12isTargetItemERK15QWebHistoryItem @ 779 NONAME + _ZN23DumpRenderTreeSupportQt17historyItemTargetERK15QWebHistoryItem @ 780 NONAME + _ZN23DumpRenderTreeSupportQt20getChildHistoryItemsERK15QWebHistoryItem @ 781 NONAME + _ZN23DumpRenderTreeSupportQt23setMockGeolocationErrorEiRK7QString @ 782 NONAME ABSENT + _ZN23DumpRenderTreeSupportQt26setMockGeolocationPositionEddd @ 783 NONAME ABSENT + _ZN23DumpRenderTreeSupportQt17clearScriptWorldsEv @ 784 NONAME + _ZN23DumpRenderTreeSupportQt23setCustomPolicyDelegateEbb @ 785 NONAME + _ZN15QWebScriptWorldC1ERKS_ @ 786 NONAME + _ZN15QWebScriptWorldC1Ev @ 787 NONAME + _ZN15QWebScriptWorldC2ERKS_ @ 788 NONAME + _ZN15QWebScriptWorldC2Ev @ 789 NONAME + _ZN15QWebScriptWorldD1Ev @ 790 NONAME + _ZN15QWebScriptWorldD2Ev @ 791 NONAME + _ZN15QWebScriptWorldaSERKS_ @ 792 NONAME + _ZN23DumpRenderTreeSupportQt29dumpResourceResponseMIMETypesEb @ 793 NONAME + _ZN23DumpRenderTreeSupportQtC1Ev @ 794 NONAME + _ZN23DumpRenderTreeSupportQtC2Ev @ 795 NONAME + _ZN23DumpRenderTreeSupportQtD1Ev @ 796 NONAME + _ZN23DumpRenderTreeSupportQtD2Ev @ 797 NONAME + _ZN8QWebPage23allowGeolocationRequestEP9QWebFrame @ 798 NONAME ABSENT + _ZN8QWebPage23viewportChangeRequestedERKNS_13ViewportHintsE @ 799 NONAME ABSENT + _ZNK15QWebScriptWorld5worldEv @ 800 NONAME + _ZN16QGraphicsWebView13setDeviceSizeERK5QSize @ 801 NONAME ABSENT + _ZN23DumpRenderTreeSupportQt12pagePropertyEP9QWebFrameRK7QStringi @ 802 NONAME + _ZN23DumpRenderTreeSupportQt16isPageBoxVisibleEP9QWebFramei @ 803 NONAME + _ZN23DumpRenderTreeSupportQt16resumeAnimationsEP9QWebFrame @ 804 NONAME + _ZN23DumpRenderTreeSupportQt17addUserStyleSheetEP8QWebPageRK7QString @ 805 NONAME + _ZN23DumpRenderTreeSupportQt17suspendAnimationsEP9QWebFrame @ 806 NONAME + _ZN23DumpRenderTreeSupportQt26pageSizeAndMarginsInPixelsEP9QWebFrameiiiiiii @ 807 NONAME + _ZN23DumpRenderTreeSupportQt28setDeferMainResourceDataLoadEb @ 808 NONAME + _ZN8QWebPage17setUserPermissionEP9QWebFrameNS_16PermissionDomainENS_16PermissionPolicyE @ 809 NONAME ABSENT + _ZN8QWebPage23checkPermissionFromUserEP9QWebFrameNS_16PermissionDomainERNS_16PermissionPolicyE @ 810 NONAME ABSENT + _ZN8QWebPage25requestPermissionFromUserEP9QWebFrameNS_16PermissionDomainE @ 811 NONAME ABSENT + _ZN8QWebPage27cancelRequestsForPermissionEP9QWebFrameNS_16PermissionDomainE @ 812 NONAME ABSENT + _ZNK16QGraphicsWebView10deviceSizeEv @ 813 NONAME ABSENT + _ZN23DumpRenderTreeSupportQt14viewportAsTextEP8QWebPageRK5QSize @ 814 NONAME ABSENT + _ZN23DumpRenderTreeSupportQt32simulateDesktopNotificationClickERK7QString @ 815 NONAME + _ZN8QWebPage23viewportChangeRequestedEv @ 816 NONAME + _ZNK8QWebPage28viewportConfigurationForSizeERK5QSize @ 817 NONAME ABSENT + _ZN23DumpRenderTreeSupportQt20dumpHistoryCallbacksEb @ 818 NONAME + _ZN23DumpRenderTreeSupportQt25dumpVisitedLinksCallbacksEb @ 819 NONAME + _ZN23DumpRenderTreeSupportQt9plainTextERK8QVariant @ 820 NONAME + _ZNK8QWebPage25viewportAttributesForSizeERK5QSize @ 821 NONAME + _ZN8QWebPage18ViewportAttributesC1ERKS0_ @ 822 NONAME + _ZN8QWebPage18ViewportAttributesC1Ev @ 823 NONAME + _ZN8QWebPage18ViewportAttributesC2ERKS0_ @ 824 NONAME + _ZN8QWebPage18ViewportAttributesC2Ev @ 825 NONAME + _ZN8QWebPage18ViewportAttributesD1Ev @ 826 NONAME + _ZN8QWebPage18ViewportAttributesD2Ev @ 827 NONAME + _ZN8QWebPage18ViewportAttributesaSERKS0_ @ 828 NONAME + _ZN23DumpRenderTreeSupportQt13nodesFromRectERK11QWebElementiijjjjb @ 829 NONAME + _ZN23DumpRenderTreeSupportQt28dumpUserGestureInFrameLoaderEb @ 830 NONAME + _ZNK8QWebPage19supportsContentTypeERK7QString @ 831 NONAME + _ZNK8QWebPage21supportedContentTypesEv @ 832 NONAME + _ZNK8QWebPage27setActualVisibleContentRectERK5QRect @ 833 NONAME + _ZN8QWebPage20setFeaturePermissionEP9QWebFrameNS_7FeatureENS_16PermissionPolicyE @ 834 NONAME + _ZN8QWebPage26featurePermissionRequestedEP9QWebFrameNS_7FeatureE @ 835 NONAME + _ZN8QWebPage32featurePermissionRequestCanceledEP9QWebFrameNS_7FeatureE @ 836 NONAME + _Z33qtwebkit_setPluginCreatedCallbackPFvP9QWebFramePvS1_E @ 837 NONAME + _ZN23DumpRenderTreeSupportQt23setMockGeolocationErrorEP8QWebPageiRK7QString @ 838 NONAME + _ZN23DumpRenderTreeSupportQt26setMockGeolocationPositionEP8QWebPageddd @ 839 NONAME + _ZN23DumpRenderTreeSupportQt14viewportAsTextEP8QWebPageiRK5QSizeS4_ @ 840 NONAME + _ZN23DumpRenderTreeSupportQt26mediaContentUrlByElementIdEP9QWebFrameRK7QString @ 841 NONAME + _ZNK8QWebPage12hasSelectionEv @ 842 NONAME + _ZNK8QWebPage12selectedHtmlEv @ 843 NONAME + _ZN11QWebElement6renderEP8QPainterRK5QRect @ 844 NONAME + _ZN16QGraphicsWebView13setRenderHintEN8QPainter10RenderHintEb @ 845 NONAME + _ZN16QGraphicsWebView14setRenderHintsE6QFlagsIN8QPainter10RenderHintEE @ 846 NONAME + _ZNK16QGraphicsWebView11renderHintsEv @ 847 NONAME + _ZN18QWebSecurityOrigin24setApplicationCacheQuotaEx @ 848 NONAME + _ZN8QWebPage29applicationCacheQuotaExceededEP18QWebSecurityOriginy @ 849 NONAME + _ZNK8QWebView12hasSelectionEv @ 850 NONAME + _ZNK8QWebView12selectedHtmlEv @ 851 NONAME + _ZN23DumpRenderTreeSupportQt10findStringEP8QWebPageRK7QStringRK11QStringList @ 852 NONAME + _ZN23DumpRenderTreeSupportQt10shadowRootERK11QWebElement @ 853 NONAME + _ZN23DumpRenderTreeSupportQt11clearOpenerEP9QWebFrame @ 854 NONAME + _ZN23DumpRenderTreeSupportQt11contextMenuEP8QWebPage @ 855 NONAME + _ZN23DumpRenderTreeSupportQt13setAutofilledERK11QWebElementb @ 856 NONAME + _ZN23DumpRenderTreeSupportQt16addURLToRedirectERK7QStringS2_ @ 857 NONAME + _ZN23DumpRenderTreeSupportQt16ensureShadowRootERK11QWebElement @ 858 NONAME + _ZN23DumpRenderTreeSupportQt16removeShadowRootERK11QWebElement @ 859 NONAME + _ZN23DumpRenderTreeSupportQt16responseMimeTypeEP9QWebFrame @ 860 NONAME + _ZN23DumpRenderTreeSupportQt16setAlternateHtmlEP9QWebFrameRK7QStringRK4QUrlS7_ @ 861 NONAME + _ZN23DumpRenderTreeSupportQt20resetGeolocationMockEP8QWebPage @ 862 NONAME + _ZN23DumpRenderTreeSupportQt23setMinimumTimerIntervalEP8QWebPaged @ 863 NONAME + _ZN23DumpRenderTreeSupportQt24setMockDeviceOrientationEbdbdbd @ 864 NONAME + _ZN23DumpRenderTreeSupportQt25clearAllApplicationCachesEv @ 865 NONAME + _ZN23DumpRenderTreeSupportQt27defaultMinimumTimerIntervalEv @ 866 NONAME + _ZN23DumpRenderTreeSupportQt27removeMockDeviceOrientationEv @ 867 NONAME + _ZN23DumpRenderTreeSupportQt28setMockGeolocationPermissionEP8QWebPageb @ 868 NONAME + _ZN23DumpRenderTreeSupportQt33activeMockDeviceOrientationClientEb @ 869 NONAME + _ZN23DumpRenderTreeSupportQt44numberOfPendingGeolocationPermissionRequestsEP8QWebPage @ 870 NONAME + _ZN8QDRTNodeC1EPN7WebCore4NodeE @ 871 NONAME + _ZN8QDRTNodeC1ERKS_ @ 872 NONAME + _ZN8QDRTNodeC1Ev @ 873 NONAME + _ZN8QDRTNodeC2EPN7WebCore4NodeE @ 874 NONAME + _ZN8QDRTNodeC2ERKS_ @ 875 NONAME + _ZN8QDRTNodeC2Ev @ 876 NONAME + _ZN8QDRTNodeD1Ev @ 877 NONAME + _ZN8QDRTNodeD2Ev @ 878 NONAME + _ZN8QDRTNodeaSERKS_ @ 879 NONAME diff --git a/src/3rdparty/webkit/Source/WebKit/qt/symbian/platformplugin/qss/OverlayWidget.qss b/src/3rdparty/webkit/Source/WebKit/qt/symbian/platformplugin/qss/OverlayWidget.qss index b01d43f..2a4ee9d 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/symbian/platformplugin/qss/OverlayWidget.qss +++ b/src/3rdparty/webkit/Source/WebKit/qt/symbian/platformplugin/qss/OverlayWidget.qss @@ -1,59 +1,59 @@ -QSlider::groove { - border: 2px solid black; - border-radius: 5px; - background: white; -} - -QSlider::handle { - border: 2px solid black; - border-radius: 8px; - background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #eee, stop:1 #ccc); -} - -QSlider::add-page { - border: 2px solid black; - border-radius: 5px; -} - -QSlider::sub-page { - border: 2px solid black; - border-radius: 5px; -} - -QSlider::groove:horizontal { - height: 10px; -} - -QSlider::handle:horizontal { - width: 40px; - margin-top: -15px; - margin-bottom: -15px; -} - -QSlider::add-page:horizontal { - height: 10px; - background: white; -} - -QSlider::sub-page:horizontal { - height: 10px; - background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #eee, stop:1 #ccc); -} - -QSlider::groove:vertical { - width: 10px; -} - -QSlider::handle:vertical { - height: 40px; margin-left: -15px; margin-right: -15px; -} - -QSlider::add-page:vertical { - width: 10px; - background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #eee, stop:1 #ccc); -} - -QSlider::sub-page:vertical { - width: 10px; - background: white; +QSlider::groove { + border: 2px solid black; + border-radius: 5px; + background: white; +} + +QSlider::handle { + border: 2px solid black; + border-radius: 8px; + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #eee, stop:1 #ccc); +} + +QSlider::add-page { + border: 2px solid black; + border-radius: 5px; +} + +QSlider::sub-page { + border: 2px solid black; + border-radius: 5px; +} + +QSlider::groove:horizontal { + height: 10px; +} + +QSlider::handle:horizontal { + width: 40px; + margin-top: -15px; + margin-bottom: -15px; +} + +QSlider::add-page:horizontal { + height: 10px; + background: white; +} + +QSlider::sub-page:horizontal { + height: 10px; + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #eee, stop:1 #ccc); +} + +QSlider::groove:vertical { + width: 10px; +} + +QSlider::handle:vertical { + height: 40px; margin-left: -15px; margin-right: -15px; +} + +QSlider::add-page:vertical { + width: 10px; + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #eee, stop:1 #ccc); +} + +QSlider::sub-page:vertical { + width: 10px; + background: white; } \ No newline at end of file diff --git a/src/3rdparty/webkit/Source/WebKit/qt/tests/MIMESniffing/resources/application_postscript b/src/3rdparty/webkit/Source/WebKit/qt/tests/MIMESniffing/resources/application_postscript index 41107c3..c4b9ae6 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/tests/MIMESniffing/resources/application_postscript +++ b/src/3rdparty/webkit/Source/WebKit/qt/tests/MIMESniffing/resources/application_postscript @@ -1,137 +1,137 @@ -%!PS-Adobe-2.0 EPSF-1.2 -%%Creator: HiJaak 2.1 -%%CreationDate: 12/29/93 13:52:08 -%%BoundingBox:126 216 486 576 -%%EndComments -/ld {load def} bind def -/s /stroke ld /f /fill ld /m /moveto ld /l /lineto ld /c /curveto ld /rgb {255 div 3 1 roll 255 div 3 1 roll 255 div 3 1 roll setrgbcolor} def -126 216 translate -360.0000 360.0000 scale -/picstr 124 string def -124 124 8 [124 0 0 -124 0 124] {currentfile picstr readhexstring pop} image -65656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD1B1B1B1B1B1B1B1B1B1BFF -65656565656565656565656565656565656565656565656565656565656565006565656565006565656500656565656565000000656565656565656565656565656565656565656565656565656565656565ADADAD00ADADAD000000ADAD00ADADADADAD00AD00ADADADAD00ADADADAD00000000001B1B001B1B1BFF -65656565656565656565656565656565656565656565656565656565656565000065656500006565650065006565656500656565006565656565656565656565656565656565656565656565656565656565ADADAD00ADAD00ADADAD00ADAD00ADADAD00ADAD0000ADADAD00ADADADAD001B1B1B1B001B001B1B1BFF -65656565656565656565656565656565656565656565656565656565656565000065656500006565650065006565650065656565650065656565656565656565656565656565656565656565656565656565ADADAD00AD00ADADADADADADAD00ADADAD00ADAD00AD00ADAD00ADADADAD001B1B1B1B001B001B1B1BFF -65656565656565656565656565656565656565656565656565656565656565006500650065006565650065006565650065656565656565656565656565656565656565656565656565656565656565656565ADADAD00AD00ADADADADADADADAD00AD00ADADAD00AD00ADAD00ADADADAD00000000001B1B001B1B1BFF -65656565656565656565656565656565656565656565656565656565656565006500650065006565006565650065650065656500000065656565656565656565656565656565656565656565656565656565ADADAD00AD00ADADADADADADADADAD00ADADADAD00ADAD00AD00ADADADAD001B1B1B1B001B001B1B1BFF -65656565656565656565656565656565656565656565656565656565656565006500650065006565000000000065650065656565650065656565656565656565656565656565656565656565656565656565ADADAD00AD00ADADADADADADADADAD00ADADADAD00ADAD00AD00ADADADAD001B1B1B1B001B001B1B1BFF -65656565656565656565656565656565656565656565656565656565656565006565006565006500656565656500656500656565006565656565656565656565656565656565656565656565656565656565ADADAD00ADAD00ADADAD00ADADADAD00ADADADAD00ADADAD0000ADADADAD001B1B1B1B001B001B1B1BFF -65656565656565656565656565656565656565656565656565656565656565006565006565006500656565656500656565000000656565656565656565656565656565656565656565656565656565656565ADADAD00ADADAD000000ADADADADAD00ADADADAD00ADADADAD00ADADADAD00000000001B1B00000000FF -65656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565ADADAD00ADADADADADADADADADADADADADADADADADADADADADADADADADADAD1B1B1B1B1B1B1B1B1B1BFF -65656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565ADADAD00ADADADADADADADADADADADADADADADADADADADADADADADADADADAD1B1B1B1B1B1B1B1B1B1BFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC0000DCDC0000DC0000000000DC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292000000009292000000000092920000929200009292929292ADADADAD00000000ADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC0000DCDC0000DC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929200009292000092000092920000920000929200009292929292ADADAD0000ADAD0000ADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC00DCDC00DCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292920000929292929292000092920000920000009200009292929292ADAD0000ADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC00000000DCDC0000000000DC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292920000929292929292000092920000920000009200009292929292ADAD0000ADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC0000DCDCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292920000929200000092000000000092920000920000009292929292ADAD0000ADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC0000DCDCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292920000929292000092000092000092920000920000009292929292ADAD0000ADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC0000DCDCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929200009292000092000092920000920000929200009292929292ADADAD0000ADAD0000ADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC0000DCDCDC0000000000DC000000000000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292000000009292000092929200000000929200009292929292ADADADAD00000000ADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00000000004A4A00000000004A00000000004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDC0000DCDC0000DC0000000000DC0000DCDCDCDCDCDCDCDCDCDCDC00000065656500000065FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00004A4A00004A00004A4A4A4A00004A4A00004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDC0000DCDC0000DC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDC00000065656500000065FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00004A4A00004A00004A4A4A4A00004A4A00004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDC00DCDC00DCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDC00000000650000000065FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00004A4A00004A00000000004A00004A4A00004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDC00000000DCDC0000000000DC0000DCDCDCDCDCDCDCDCDCDCDC00000000650000000065FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00000000004A4A00004A4A4A4A00004A4A00004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDC0000DCDCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDC00006500650065000065FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00004A00004A4A00004A4A4A4A00004A4A00004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDC0000DCDCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDC00006500000065000065FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00004A4A00004A00004A4A4A4A00004A4A00004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDC0000DCDCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDC00006500000065000065FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00004A4A4A000000000000004A00000000004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDC0000DCDCDC0000000000DC000000000000DCDCDCDCDCDCDC00006565006565000065FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A00000000004A4A4A4A0000004A4A4A00000000004A4A4A4A004A4A4A4A4A00000000004A00000000004A00000000004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A004A4A4A4A004A4A004A4A4A004A4A4A4A004A4A4A4A4A4A004A4A4A4A4A004A4A4A4A4A004A4A4A4A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A004A4A4A4A004A004A4A4A4A4A004A4A4A004A4A4A4A4A4A004A4A4A4A4A004A4A4A4A4A004A4A4A4A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A00000000004A4A004A4A4A4A4A004A4A4A004A4A4A4A4A4A004A4A4A4A4A00000000004A000000004A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A004A4A4A4A004A004A4A4A4A4A004A4A4A004A4A4A4A4A4A004A4A4A4A4A004A4A4A4A4A004A4A4A4A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A004A4A4A4A004A004A4A4A4A4A004A4A4A004A4A4A4A4A4A004A4A4A4A4A004A4A4A4A4A004A4A4A4A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A004A4A4A4A004A4A004A4A4A004A4A4A4A004A4A4A4A4A4A004A4A4A4A4A004A4A4A4A4A004A4A4A4A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A00000000004A4A4A4A0000004A4A4A4A4A004A4A4A4A4A4A00000000004A00000000004A004A4A4A4A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF -showpage +%!PS-Adobe-2.0 EPSF-1.2 +%%Creator: HiJaak 2.1 +%%CreationDate: 12/29/93 13:52:08 +%%BoundingBox:126 216 486 576 +%%EndComments +/ld {load def} bind def +/s /stroke ld /f /fill ld /m /moveto ld /l /lineto ld /c /curveto ld /rgb {255 div 3 1 roll 255 div 3 1 roll 255 div 3 1 roll setrgbcolor} def +126 216 translate +360.0000 360.0000 scale +/picstr 124 string def +124 124 8 [124 0 0 -124 0 124] {currentfile picstr readhexstring pop} image +65656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD1B1B1B1B1B1B1B1B1B1BFF +65656565656565656565656565656565656565656565656565656565656565006565656565006565656500656565656565000000656565656565656565656565656565656565656565656565656565656565ADADAD00ADADAD000000ADAD00ADADADADAD00AD00ADADADAD00ADADADAD00000000001B1B001B1B1BFF +65656565656565656565656565656565656565656565656565656565656565000065656500006565650065006565656500656565006565656565656565656565656565656565656565656565656565656565ADADAD00ADAD00ADADAD00ADAD00ADADAD00ADAD0000ADADAD00ADADADAD001B1B1B1B001B001B1B1BFF +65656565656565656565656565656565656565656565656565656565656565000065656500006565650065006565650065656565650065656565656565656565656565656565656565656565656565656565ADADAD00AD00ADADADADADADAD00ADADAD00ADAD00AD00ADAD00ADADADAD001B1B1B1B001B001B1B1BFF +65656565656565656565656565656565656565656565656565656565656565006500650065006565650065006565650065656565656565656565656565656565656565656565656565656565656565656565ADADAD00AD00ADADADADADADADAD00AD00ADADAD00AD00ADAD00ADADADAD00000000001B1B001B1B1BFF +65656565656565656565656565656565656565656565656565656565656565006500650065006565006565650065650065656500000065656565656565656565656565656565656565656565656565656565ADADAD00AD00ADADADADADADADADAD00ADADADAD00ADAD00AD00ADADADAD001B1B1B1B001B001B1B1BFF +65656565656565656565656565656565656565656565656565656565656565006500650065006565000000000065650065656565650065656565656565656565656565656565656565656565656565656565ADADAD00AD00ADADADADADADADADAD00ADADADAD00ADAD00AD00ADADADAD001B1B1B1B001B001B1B1BFF +65656565656565656565656565656565656565656565656565656565656565006565006565006500656565656500656500656565006565656565656565656565656565656565656565656565656565656565ADADAD00ADAD00ADADAD00ADADADAD00ADADADAD00ADADAD0000ADADADAD001B1B1B1B001B001B1B1BFF +65656565656565656565656565656565656565656565656565656565656565006565006565006500656565656500656565000000656565656565656565656565656565656565656565656565656565656565ADADAD00ADADAD000000ADADADADAD00ADADADAD00ADADADAD00ADADADAD00000000001B1B00000000FF +65656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565ADADAD00ADADADADADADADADADADADADADADADADADADADADADADADADADADAD1B1B1B1B1B1B1B1B1B1BFF +65656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565ADADAD00ADADADADADADADADADADADADADADADADADADADADADADADADADADAD1B1B1B1B1B1B1B1B1B1BFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC0000DCDC0000DC0000000000DC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292000000009292000000000092920000929200009292929292ADADADAD00000000ADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC0000DCDC0000DC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929200009292000092000092920000920000929200009292929292ADADAD0000ADAD0000ADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC00DCDC00DCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292920000929292929292000092920000920000009200009292929292ADAD0000ADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC00000000DCDC0000000000DC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292920000929292929292000092920000920000009200009292929292ADAD0000ADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC0000DCDCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292920000929200000092000000000092920000920000009292929292ADAD0000ADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC0000DCDCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292920000929292000092000092000092920000920000009292929292ADAD0000ADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC0000DCDCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929200009292000092000092920000920000929200009292929292ADADAD0000ADAD0000ADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC0000DCDCDC0000000000DC000000000000DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292000000009292000092929200000000929200009292929292ADADADAD00000000ADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC92929292929292929292929292929292929292929292929292929292929292ADADADADADADADADADADFF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00000000004A4A00000000004A00000000004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDC0000DCDC0000DC0000000000DC0000DCDCDCDCDCDCDCDCDCDCDC00000065656500000065FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00004A4A00004A00004A4A4A4A00004A4A00004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDC0000DCDC0000DC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDC00000065656500000065FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00004A4A00004A00004A4A4A4A00004A4A00004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDC00DCDC00DCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDC00000000650000000065FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00004A4A00004A00000000004A00004A4A00004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDC00000000DCDC0000000000DC0000DCDCDCDCDCDCDCDCDCDCDC00000000650000000065FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00000000004A4A00004A4A4A4A00004A4A00004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDC0000DCDCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDC00006500650065000065FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00004A00004A4A00004A4A4A4A00004A4A00004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDC0000DCDCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDC00006500000065000065FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00004A4A00004A00004A4A4A4A00004A4A00004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDC0000DCDCDC0000DCDCDCDC0000DCDCDCDCDCDCDCDCDCDCDC00006500000065000065FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A00004A4A4A000000000000004A00000000004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDC0000DCDCDC0000000000DC000000000000DCDCDCDCDCDCDC00006565006565000065FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A00000000004A4A4A4A0000004A4A4A00000000004A4A4A4A004A4A4A4A4A00000000004A00000000004A00000000004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A004A4A4A4A004A4A004A4A4A004A4A4A4A004A4A4A4A4A4A004A4A4A4A4A004A4A4A4A4A004A4A4A4A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A004A4A4A4A004A004A4A4A4A4A004A4A4A004A4A4A4A4A4A004A4A4A4A4A004A4A4A4A4A004A4A4A4A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A00000000004A4A004A4A4A4A4A004A4A4A004A4A4A4A4A4A004A4A4A4A4A00000000004A000000004A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A004A4A4A4A004A004A4A4A4A4A004A4A4A004A4A4A4A4A4A004A4A4A4A4A004A4A4A4A4A004A4A4A4A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A004A4A4A4A004A004A4A4A4A4A004A4A4A004A4A4A4A4A4A004A4A4A4A4A004A4A4A4A4A004A4A4A4A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A004A4A4A4A004A4A004A4A4A004A4A4A4A004A4A4A4A4A4A004A4A4A4A4A004A4A4A4A4A004A4A4A4A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A00000000004A4A4A4A0000004A4A4A4A4A004A4A4A4A4A4A00000000004A00000000004A004A4A4A4A4A4A4A004A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4ADCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC65656565656565656565FF +showpage \ No newline at end of file diff --git a/src/3rdparty/webkit/Source/WebKit/qt/tests/MIMESniffing/resources/text_xml b/src/3rdparty/webkit/Source/WebKit/qt/tests/MIMESniffing/resources/text_xml index dd4f6fd..38a9fe5 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/tests/MIMESniffing/resources/text_xml +++ b/src/3rdparty/webkit/Source/WebKit/qt/tests/MIMESniffing/resources/text_xml @@ -1,19 +1,19 @@ -<?xml version="1.0" encoding="ISO-8859-1"?> -<CATALOG> - <CD> - <TITLE>Empire Burlesque</TITLE> - <ARTIST>Bob Dylan</ARTIST> - <COUNTRY>USA</COUNTRY> - <COMPANY>Columbia</COMPANY> - <PRICE>10.90</PRICE> - <YEAR>1985</YEAR> - </CD> - <CD> - <TITLE>Unchain my heart</TITLE> - <ARTIST>Joe Cocker</ARTIST> - <COUNTRY>USA</COUNTRY> - <COMPANY>EMI</COMPANY> - <PRICE>8.20</PRICE> - <YEAR>1987</YEAR> - </CD> -</CATALOG> +<?xml version="1.0" encoding="ISO-8859-1"?> +<CATALOG> + <CD> + <TITLE>Empire Burlesque</TITLE> + <ARTIST>Bob Dylan</ARTIST> + <COUNTRY>USA</COUNTRY> + <COMPANY>Columbia</COMPANY> + <PRICE>10.90</PRICE> + <YEAR>1985</YEAR> + </CD> + <CD> + <TITLE>Unchain my heart</TITLE> + <ARTIST>Joe Cocker</ARTIST> + <COUNTRY>USA</COUNTRY> + <COMPANY>EMI</COMPANY> + <PRICE>8.20</PRICE> + <YEAR>1987</YEAR> + </CD> +</CATALOG> diff --git a/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/resources/testiframe.html b/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/resources/testiframe.html index 4b0e30c..ee0f64d 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/resources/testiframe.html +++ b/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/resources/testiframe.html @@ -1,53 +1,53 @@ -<html> -<head> -<title></title> -<style type="text/css"> -<!-- -#header { - background: #0f0; - position: absolute; - top: 0px; - left: 0px; - width: 800px; - height: 100px; -} -#content1 { - background: #ff0; - position: absolute; - top: 101px; - left: 0px; - width: 400px; - height: 400px; - overflow: scroll; -} -#content2 { - background: #ff7; - position: absolute; - top: 101px; - left: 401px; - width: 400px; - height: 400px; -} -#footer { - background: #0f0; - position: absolute; - top: 502px; - left: 0px; - width: 800px; - height: 200px; -} ---> -</style> -</head> -<body> -<div id="header"></div> -<div id="content1">You can use the overflow property when you want to have better control of the layout. Try to change the overflow property to: visible, hidden, auto, or inherit and see what happens. The default value is visible. -You can use the overflow property when you want to have better control of the layout. Try to change the overflow property to: visible, hidden, auto, or inherit and see what happens. The default value is visible. -You can use the overflow property when you want to have better control of the layout. Try to change the overflow property to: visible, hidden, auto, or inherit and see what happens. The default value is visible. -You can use the overflow property when you want to have better control of the layout. Try to change the overflow property to: visible, hidden, auto, or inherit and see what happens. The default value is visible. -You can use the overflow property when you want to have better control of the layout. Try to change the overflow property to: visible, hidden, auto, or inherit and see what happens. The default value is visible. -You can use the overflow property when you want to have better control of the layout. Try to change the overflow property to: visible, hidden, auto, or inherit and see what happens. The default value is visible.</div> -<iframe id="content2" name="control" src="testiframe2.html"> </iframe> -<div id="footer"></div> -</body> +<html> +<head> +<title></title> +<style type="text/css"> +<!-- +#header { + background: #0f0; + position: absolute; + top: 0px; + left: 0px; + width: 800px; + height: 100px; +} +#content1 { + background: #ff0; + position: absolute; + top: 101px; + left: 0px; + width: 400px; + height: 400px; + overflow: scroll; +} +#content2 { + background: #ff7; + position: absolute; + top: 101px; + left: 401px; + width: 400px; + height: 400px; +} +#footer { + background: #0f0; + position: absolute; + top: 502px; + left: 0px; + width: 800px; + height: 200px; +} +--> +</style> +</head> +<body> +<div id="header"></div> +<div id="content1">You can use the overflow property when you want to have better control of the layout. Try to change the overflow property to: visible, hidden, auto, or inherit and see what happens. The default value is visible. +You can use the overflow property when you want to have better control of the layout. Try to change the overflow property to: visible, hidden, auto, or inherit and see what happens. The default value is visible. +You can use the overflow property when you want to have better control of the layout. Try to change the overflow property to: visible, hidden, auto, or inherit and see what happens. The default value is visible. +You can use the overflow property when you want to have better control of the layout. Try to change the overflow property to: visible, hidden, auto, or inherit and see what happens. The default value is visible. +You can use the overflow property when you want to have better control of the layout. Try to change the overflow property to: visible, hidden, auto, or inherit and see what happens. The default value is visible. +You can use the overflow property when you want to have better control of the layout. Try to change the overflow property to: visible, hidden, auto, or inherit and see what happens. The default value is visible.</div> +<iframe id="content2" name="control" src="testiframe2.html"> </iframe> +<div id="footer"></div> +</body> </html> \ No newline at end of file diff --git a/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/resources/testiframe2.html b/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/resources/testiframe2.html index 8957a5d..483e94e 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/resources/testiframe2.html +++ b/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/resources/testiframe2.html @@ -1,20 +1,20 @@ -<html> -<head> -<title></title> -<style type="text/css"> -<!-- -#content { - background: #fff; - position: absolute; - top: 0px; - left: 0px; - width: 800px; - height: 800px; -} ---> -</style> -</head> -<body> -<div id="content"> </div> -</body> +<html> +<head> +<title></title> +<style type="text/css"> +<!-- +#content { + background: #fff; + position: absolute; + top: 0px; + left: 0px; + width: 800px; + height: 800px; +} +--> +</style> +</head> +<body> +<div id="content"> </div> +</body> </html> \ No newline at end of file diff --git a/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp b/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp index f2bdcee..b423317 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp @@ -619,7 +619,8 @@ private slots: void javaScriptWindowObjectCleared(); void javaScriptWindowObjectClearedOnEvaluate(); void setHtml(); - void setHtmlWithResource(); + void setHtmlWithImageResource(); + void setHtmlWithStylesheetResource(); void setHtmlWithBaseURL(); void setHtmlWithJSAlert(); void ipv6HostEncoding(); @@ -658,6 +659,9 @@ private slots: void setUrlSameUrl(); void setUrlThenLoads_data(); void setUrlThenLoads(); + void loadFinishedAfterNotFoundError(); + void loadInSignalHandlers_data(); + void loadInSignalHandlers(); private: QString evalJS(const QString&s) { @@ -2301,6 +2305,8 @@ class FakeReply : public QNetworkReply { Q_OBJECT public: + static const QUrl urlFor404ErrorWithoutContents; + FakeReply(const QNetworkRequest& request, QObject* parent = 0) : QNetworkReply(parent) { @@ -2320,6 +2326,10 @@ public: else if (request.url().host() == QLatin1String("abcdef.abcdef")) { setError(QNetworkReply::HostNotFoundError, tr("Invalid URL")); QTimer::singleShot(0, this, SLOT(continueError())); + } else if (request.url() == FakeReply::urlFor404ErrorWithoutContents) { + setError(QNetworkReply::ContentNotFoundError, "Not found"); + setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 404); + QTimer::singleShot(0, this, SLOT(continueError())); } open(QIODevice::ReadOnly); @@ -2351,6 +2361,8 @@ private slots: } }; +const QUrl FakeReply::urlFor404ErrorWithoutContents = QUrl("http://this.will/return-http-404-error-without-contents.html"); + class FakeNetworkManager : public QNetworkAccessManager { Q_OBJECT @@ -2362,17 +2374,17 @@ protected: { QString url = request.url().toString(); if (op == QNetworkAccessManager::GetOperation) { - if (url == "qrc:/test1.html" || url == "http://abcdef.abcdef/") - return new FakeReply(request, this); #ifndef QT_NO_OPENSSL - else if (url == "qrc:/fake-ssl-error.html") { + if (url == "qrc:/fake-ssl-error.html") { FakeReply* reply = new FakeReply(request, this); QList<QSslError> errors; emit sslErrors(reply, errors << QSslError(QSslError::UnspecifiedError)); return reply; } #endif - } + if (url == "qrc:/test1.html" || url == "http://abcdef.abcdef/" || request.url() == FakeReply::urlFor404ErrorWithoutContents) + return new FakeReply(request, this); + } return QNetworkAccessManager::createRequest(op, request, outgoingData); } @@ -2488,26 +2500,37 @@ void tst_QWebFrame::setHtml() QCOMPARE(spy.count(), 1); } -void tst_QWebFrame::setHtmlWithResource() +void tst_QWebFrame::setHtmlWithImageResource() { - QString html("<html><body><p>hello world</p><img src='qrc:/image.png'/></body></html>"); + // By default, only security origins of local files can load local resources. + // So we should specify baseUrl to be a local file in order to get a proper origin and load the local image. + QLatin1String html("<html><body><p>hello world</p><img src='qrc:/image.png'/></body></html>"); QWebPage page; QWebFrame* frame = page.mainFrame(); - // in few seconds, the image should be completey loaded - QSignalSpy spy(&page, SIGNAL(loadFinished(bool))); - frame->setHtml(html); + frame->setHtml(html, QUrl(QLatin1String("file:///path/to/file"))); waitForSignal(frame, SIGNAL(loadFinished(bool)), 200); - QCOMPARE(spy.count(), 1); QCOMPARE(frame->evaluateJavaScript("document.images.length").toInt(), 1); - QEXPECT_FAIL("", "https://bugs.webkit.org/show_bug.cgi?id=63235", Continue); QCOMPARE(frame->evaluateJavaScript("document.images[0].width").toInt(), 128); - QEXPECT_FAIL("", "https://bugs.webkit.org/show_bug.cgi?id=63235", Continue); QCOMPARE(frame->evaluateJavaScript("document.images[0].height").toInt(), 128); - QString html2 = + // Now we test the opposite: without a baseUrl as a local file, we cannot request local resources. + + frame->setHtml(html); + waitForSignal(frame, SIGNAL(loadFinished(bool)), 200); + QCOMPARE(frame->evaluateJavaScript("document.images.length").toInt(), 1); + QCOMPARE(frame->evaluateJavaScript("document.images[0].width").toInt(), 0); + QCOMPARE(frame->evaluateJavaScript("document.images[0].height").toInt(), 0); +} + +void tst_QWebFrame::setHtmlWithStylesheetResource() +{ + // By default, only security origins of local files can load local resources. + // So we should specify baseUrl to be a local file in order to be able to download the local stylesheet. + + const char* htmlData = "<html>" "<head>" "<link rel='stylesheet' href='qrc:/style.css' type='text/css' />" @@ -2516,19 +2539,29 @@ void tst_QWebFrame::setHtmlWithResource() "<p id='idP'>some text</p>" "</body>" "</html>"; + QLatin1String html(htmlData); + QWebPage page; + QWebFrame* frame = page.mainFrame(); + QWebElement webElement; - // in few seconds, the CSS should be completey loaded - frame->setHtml(html2); + frame->setHtml(html, QUrl(QLatin1String("qrc:///file"))); waitForSignal(frame, SIGNAL(loadFinished(bool)), 200); - QCOMPARE(spy.size(), 2); + webElement = frame->documentElement().findFirst("p"); + QCOMPARE(webElement.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("red")); + + // Now we test the opposite: without a baseUrl as a local file, we cannot request local resources. - QWebElement p = frame->documentElement().findAll("p").at(0); - QEXPECT_FAIL("", "https://bugs.webkit.org/show_bug.cgi?id=63235", Continue); - QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("red")); + frame->setHtml(html, QUrl(QLatin1String("http://www.example.com/"))); + waitForSignal(frame, SIGNAL(loadFinished(bool)), 200); + webElement = frame->documentElement().findFirst("p"); + QCOMPARE(webElement.styleProperty("color", QWebElement::CascadedStyle), QString()); } void tst_QWebFrame::setHtmlWithBaseURL() { + // This tests if baseUrl is indeed affecting the relative paths from resources. + // As we are using a local file as baseUrl, its security origin should be able to load local resources. + if (!QDir(TESTS_SOURCE_DIR).exists()) QSKIP(QString("This test requires access to resources found in '%1'").arg(TESTS_SOURCE_DIR).toLatin1().constData(), SkipAll); @@ -2898,7 +2931,10 @@ void tst_QWebFrame::renderGeometry() QList<QWebFrame*> frames = page.mainFrame()->childFrames(); QWebFrame *frame = frames.at(0); QString innerHtml("<body style='margin: 0px;'><img src='qrc:/image.png'/></body>"); - frame->setHtml(innerHtml); + + // By default, only security origins of local files can load local resources. + // So we should specify baseUrl to be a local file in order to get a proper origin. + frame->setHtml(innerHtml, QUrl("file:///path/to/file")); waitForSignal(frame, SIGNAL(loadFinished(bool)), 200); QPicture picture; @@ -2911,9 +2947,7 @@ void tst_QWebFrame::renderGeometry() frame->render(&painter1, QWebFrame::ContentsLayer); painter1.end(); - QEXPECT_FAIL("", "https://bugs.webkit.org/show_bug.cgi?id=63236", Continue); QCOMPARE(size.width(), picture.boundingRect().width() + frame->scrollBarGeometry(Qt::Vertical).width()); - QEXPECT_FAIL("", "https://bugs.webkit.org/show_bug.cgi?id=63236", Continue); QCOMPARE(size.height(), picture.boundingRect().height() + frame->scrollBarGeometry(Qt::Horizontal).height()); // render everything, should be the size of the iframe @@ -2921,9 +2955,7 @@ void tst_QWebFrame::renderGeometry() frame->render(&painter2, QWebFrame::AllLayers); painter2.end(); - QEXPECT_FAIL("", "https://bugs.webkit.org/show_bug.cgi?id=63236", Continue); QCOMPARE(size.width(), picture.boundingRect().width()); // width: 100px - QEXPECT_FAIL("", "https://bugs.webkit.org/show_bug.cgi?id=63236", Continue); QCOMPARE(size.height(), picture.boundingRect().height()); // height: 100px } @@ -3658,5 +3690,113 @@ void tst_QWebFrame::setUrlThenLoads() QCOMPARE(frame->baseUrl(), extractBaseUrl(urlToLoad2)); } +void tst_QWebFrame::loadFinishedAfterNotFoundError() +{ + QWebPage page; + QWebFrame* frame = page.mainFrame(); + + QSignalSpy spy(&page, SIGNAL(loadFinished(bool))); + FakeNetworkManager* networkManager = new FakeNetworkManager(&page); + page.setNetworkAccessManager(networkManager); + + frame->setUrl(FakeReply::urlFor404ErrorWithoutContents); + QTRY_COMPARE(spy.count(), 1); + const bool wasLoadOk = spy.at(0).at(0).toBool(); + QVERIFY(!wasLoadOk); +} + +class URLSetter : public QObject { + Q_OBJECT + +public: + enum Signal { + LoadStarted, + LoadFinished, + ProvisionalLoad + }; + + enum Type { + UseLoad, + UseSetUrl + }; + + URLSetter(QWebFrame*, Signal, Type, const QUrl&); + +public slots: + void execute(); + +signals: + void finished(); + +private: + QWebFrame* m_frame; + QUrl m_url; + Type m_type; +}; + +Q_DECLARE_METATYPE(URLSetter::Signal) +Q_DECLARE_METATYPE(URLSetter::Type) + +URLSetter::URLSetter(QWebFrame* frame, Signal signal, URLSetter::Type type, const QUrl& url) + : m_frame(frame), m_url(url), m_type(type) +{ + if (signal == LoadStarted) + connect(m_frame, SIGNAL(loadStarted()), SLOT(execute())); + else if (signal == LoadFinished) + connect(m_frame, SIGNAL(loadFinished(bool)), SLOT(execute())); + else + connect(m_frame, SIGNAL(provisionalLoad()), SLOT(execute())); +} + +void URLSetter::execute() +{ + // We track only the first emission. + m_frame->disconnect(this); + if (m_type == URLSetter::UseLoad) + m_frame->load(m_url); + else + m_frame->setUrl(m_url); + connect(m_frame, SIGNAL(loadFinished(bool)), SIGNAL(finished())); +} + +void tst_QWebFrame::loadInSignalHandlers_data() +{ + QTest::addColumn<URLSetter::Type>("type"); + QTest::addColumn<URLSetter::Signal>("signal"); + QTest::addColumn<QUrl>("url"); + + const QUrl validUrl("qrc:/test2.html"); + const QUrl invalidUrl("qrc:/invalid"); + + QTest::newRow("call load() in loadStarted() after valid url") << URLSetter::UseLoad << URLSetter::LoadStarted << validUrl; + QTest::newRow("call load() in loadStarted() after invalid url") << URLSetter::UseLoad << URLSetter::LoadStarted << invalidUrl; + QTest::newRow("call load() in loadFinished() after valid url") << URLSetter::UseLoad << URLSetter::LoadFinished << validUrl; + QTest::newRow("call load() in loadFinished() after invalid url") << URLSetter::UseLoad << URLSetter::LoadFinished << invalidUrl; + QTest::newRow("call load() in provisionalLoad() after valid url") << URLSetter::UseLoad << URLSetter::ProvisionalLoad << validUrl; + QTest::newRow("call load() in provisionalLoad() after invalid url") << URLSetter::UseLoad << URLSetter::ProvisionalLoad << invalidUrl; + + QTest::newRow("call setUrl() in loadStarted() after valid url") << URLSetter::UseSetUrl << URLSetter::LoadStarted << validUrl; + QTest::newRow("call setUrl() in loadStarted() after invalid url") << URLSetter::UseSetUrl << URLSetter::LoadStarted << invalidUrl; + QTest::newRow("call setUrl() in loadFinished() after valid url") << URLSetter::UseSetUrl << URLSetter::LoadFinished << validUrl; + QTest::newRow("call setUrl() in loadFinished() after invalid url") << URLSetter::UseSetUrl << URLSetter::LoadFinished << invalidUrl; + QTest::newRow("call setUrl() in provisionalLoad() after valid url") << URLSetter::UseSetUrl << URLSetter::ProvisionalLoad << validUrl; + QTest::newRow("call setUrl() in provisionalLoad() after invalid url") << URLSetter::UseSetUrl << URLSetter::ProvisionalLoad << invalidUrl; +} + +void tst_QWebFrame::loadInSignalHandlers() +{ + QFETCH(URLSetter::Type, type); + QFETCH(URLSetter::Signal, signal); + QFETCH(QUrl, url); + + QWebFrame* frame = m_page->mainFrame(); + const QUrl urlForSetter("qrc:/test1.html"); + URLSetter setter(frame, signal, type, urlForSetter); + + frame->load(url); + waitForSignal(&setter, SIGNAL(finished()), 200); + QCOMPARE(frame->url(), urlForSetter); +} + QTEST_MAIN(tst_QWebFrame) #include "tst_qwebframe.moc" diff --git a/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp b/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp index 359ef05..893c284 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp @@ -130,6 +130,7 @@ private slots: void errorPageExtension(); void errorPageExtensionInIFrames(); void errorPageExtensionInFrameset(); + void errorPageExtensionLoadFinished(); void userAgentApplicationName(); void viewModes(); @@ -2572,6 +2573,35 @@ void tst_QWebPage::errorPageExtensionInFrameset() m_view->setPage(0); } +void tst_QWebPage::errorPageExtensionLoadFinished() +{ + ErrorPage page; + m_view->setPage(&page); + + QSignalSpy spyLoadFinished(m_view, SIGNAL(loadFinished(bool))); + QSignalSpy spyFrameLoadFinished(m_view->page()->mainFrame(), SIGNAL(loadFinished(bool))); + + m_view->setUrl(QUrl("data:text/html,foo")); + QTRY_COMPARE(spyLoadFinished.count(), 1); + QTRY_COMPARE(spyFrameLoadFinished.count(), 1); + + const bool loadSucceded = spyLoadFinished.at(0).at(0).toBool(); + QVERIFY(loadSucceded); + const bool frameLoadSucceded = spyFrameLoadFinished.at(0).at(0).toBool(); + QVERIFY(frameLoadSucceded); + + m_view->page()->mainFrame()->setUrl(QUrl("http://non.existent/url")); + QTRY_COMPARE(spyLoadFinished.count(), 2); + QTRY_COMPARE(spyFrameLoadFinished.count(), 2); + + const bool nonExistantLoadSucceded = spyLoadFinished.at(1).at(0).toBool(); + QVERIFY(nonExistantLoadSucceded); + const bool nonExistantFrameLoadSucceded = spyFrameLoadFinished.at(1).at(0).toBool(); + QVERIFY(nonExistantFrameLoadSucceded); + + m_view->setPage(0); +} + class FriendlyWebPage : public QWebPage { public: diff --git a/src/3rdparty/webkit/Source/WebKit2/ChangeLog b/src/3rdparty/webkit/Source/WebKit2/ChangeLog index b6e5afe..be0c43d 100644 --- a/src/3rdparty/webkit/Source/WebKit2/ChangeLog +++ b/src/3rdparty/webkit/Source/WebKit2/ChangeLog @@ -1,3 +1,30 @@ +2011-08-06 Aron Rosenberg <arosenberg@logitech.com> + + Reviewed by Benjamin Poulain. + + [Qt] Fix build with Intel compiler on Windows + https://bugs.webkit.org/show_bug.cgi?id=65088 + + Intel compiler needs .lib suffixes instead of .a + + * WebKit2.pri: + +2011-06-23 Robert Hogan <robert@webkit.org> + + Reviewed by Simon Hausmann. + + [Qt] Windowless Plugins : <input> cursor blinks even after transferring focus to plugin + https://bugs.webkit.org/show_bug.cgi?id=30355 + + PluginView needs to use page->focusController()->setFocusedNode() when focusing a plugin + in order to clear the FrameSelection in the currently focused node. In its platform-specific + code Chromium already does this (WebPluginContainerImpl.cpp). + + * WebProcess/Plugins/PluginView.cpp: + (WebCore::PluginView::focusPluginElement): Using FocusController::setFocusedNode() makes + the call to FocusController:setFocusedFrame() redundant, since the + former calls it. + 2011-06-27 Huang Dongsung <luxtella@company100.net> Reviewed by Kenneth Rohde Christiansen. diff --git a/src/3rdparty/webkit/Source/WebKit2/WebKit2.pri b/src/3rdparty/webkit/Source/WebKit2/WebKit2.pri index 32c25e1..3122326 100644 --- a/src/3rdparty/webkit/Source/WebKit2/WebKit2.pri +++ b/src/3rdparty/webkit/Source/WebKit2/WebKit2.pri @@ -73,7 +73,7 @@ symbian { defineTest(prependWebKit2Lib) { pathToWebKit2Output = $$ARGS/$$WEBKIT2_DESTDIR - win32-msvc*|wince* { + win32-msvc*|wince*|win32-icc { LIBS = -l$$WEBKIT2_TARGET $$LIBS LIBS = -L$$pathToWebKit2Output $$LIBS POST_TARGETDEPS += $${pathToWebKit2Output}$${QMAKE_DIR_SEP}$${WEBKIT2_TARGET}.lib diff --git a/src/3rdparty/webkit/Source/WebKit2/WebProcess/Plugins/PluginView.cpp b/src/3rdparty/webkit/Source/WebKit2/WebProcess/Plugins/PluginView.cpp index feb1e5c..1962d8c 100644 --- a/src/3rdparty/webkit/Source/WebKit2/WebProcess/Plugins/PluginView.cpp +++ b/src/3rdparty/webkit/Source/WebKit2/WebProcess/Plugins/PluginView.cpp @@ -638,8 +638,9 @@ void PluginView::focusPluginElement() ASSERT(frame()); if (Page* page = frame()->page()) - page->focusController()->setFocusedFrame(frame()); - frame()->document()->setFocusedNode(m_pluginElement); + page->focusController()->setFocusedNode(m_pluginElement.get(), frame()); + else + frame()->document()->setFocusedNode(m_pluginElement); } void PluginView::pendingURLRequestsTimerFired() diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index 85f9e4f..3457752 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - a52dbae362a295e0adfb7ee4fdc21734ae4b7b45 + 66b76cdb8ef823f27a8229c5cae2d35e7f2d3c59 -- cgit v0.12 From 9eb8387f7f2584b0828e91716bc2f20a2c6c74d4 Mon Sep 17 00:00:00 2001 From: Ademar de Souza Reis Jr <ademar.reis@openbossa.org> Date: Thu, 11 Aug 2011 11:26:22 -0300 Subject: Updated WebKit to 8ed79cb10ca72b5d240beae674a7932963cbd007 Signed-off-by: Ademar de Souza Reis Jr <ademar.reis@openbossa.org> --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/Source/WebCore/ChangeLog | 8 ++++++++ .../platform/graphics/gstreamer/PlatformVideoWindowPrivate.h | 2 ++ src/3rdparty/webkit/VERSION | 2 +- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 2b42a20..5d17f94 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -66b76cdb8ef823f27a8229c5cae2d35e7f2d3c59 +8ed79cb10ca72b5d240beae674a7932963cbd007 diff --git a/src/3rdparty/webkit/Source/WebCore/ChangeLog b/src/3rdparty/webkit/Source/WebCore/ChangeLog index 2e34c2e..a8fb182 100644 --- a/src/3rdparty/webkit/Source/WebCore/ChangeLog +++ b/src/3rdparty/webkit/Source/WebCore/ChangeLog @@ -1,3 +1,11 @@ +2011-08-11 Alexis Menard <alexis.menard@openbossa.org> + + Unreviewed build fix for Qt. + + Make sure we build when Qt is namespaced. + + * platform/graphics/gstreamer/PlatformVideoWindowPrivate.h: + 2011-08-06 Aron Rosenberg <arosenberg@logitech.com> Reviewed by Benjamin Poulain. diff --git a/src/3rdparty/webkit/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowPrivate.h b/src/3rdparty/webkit/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowPrivate.h index 7b441f4..eeb08c2 100644 --- a/src/3rdparty/webkit/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowPrivate.h +++ b/src/3rdparty/webkit/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowPrivate.h @@ -23,7 +23,9 @@ #include <QTimer> #include <QWidget> +QT_BEGIN_NAMESPACE class QKeyEvent; +QT_END_NAMESPACE namespace WebCore { diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index 3457752..515f393 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - 66b76cdb8ef823f27a8229c5cae2d35e7f2d3c59 + 8ed79cb10ca72b5d240beae674a7932963cbd007 -- cgit v0.12 From b209fe3b1a51f64541067917e96de99f14ad65f3 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin <ritt.ks@gmail.com> Date: Wed, 13 Jul 2011 18:14:38 +0200 Subject: optimize QList::removeAll() a) don't detach until an occurrence found b) don't memmove every time an occurrence found c) truncate quickly ) well, numbers are better than words: before: RESULT : tst_QList::removeAll_primitive(): 2,617,902 CPU ticks per iteration (total: 261,790,171, iterations: 100) RESULT : tst_QList::removeAll_movable(): 2,547,540 CPU ticks per iteration (total: 254,753,960, iterations: 100) RESULT : tst_QList::removeAll_complex(): 16,852,099 CPU ticks per iteration (total: 1,685,209,906, iterations: 100) after: RESULT : tst_QList::removeAll_primitive(): 73,520 CPU ticks per iteration (total: 73,520,442, iterations: 1000) RESULT : tst_QList::removeAll_movable(): 90,422 CPU ticks per iteration (total: 90,422,464, iterations: 1000) RESULT : tst_QList::removeAll_complex(): 9,667,073 CPU ticks per iteration (total: 9,667,072,670, iterations: 1000) Merge-request: 1285 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> --- src/corelib/tools/qlist.h | 30 +-- tests/benchmarks/corelib/tools/qlist/main.cpp | 250 +++++++++++++++++++++++++ tests/benchmarks/corelib/tools/qlist/qlist.pro | 5 + tests/benchmarks/corelib/tools/tools.pro | 1 + 4 files changed, 275 insertions(+), 11 deletions(-) create mode 100644 tests/benchmarks/corelib/tools/qlist/main.cpp create mode 100644 tests/benchmarks/corelib/tools/qlist/qlist.pro diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h index 4eb05d6..e104f65 100644 --- a/src/corelib/tools/qlist.h +++ b/src/corelib/tools/qlist.h @@ -769,18 +769,26 @@ Q_OUTOFLINE_TEMPLATE void QList<T>::clear() template <typename T> Q_OUTOFLINE_TEMPLATE int QList<T>::removeAll(const T &_t) { - detachShared(); + int index = indexOf(_t); + if (index == -1) + return 0; + const T t = _t; - int removedCount=0, i=0; - Node *n; - while (i < p.size()) - if ((n = reinterpret_cast<Node *>(p.at(i)))->t() == t) { - node_destruct(n); - p.remove(i); - ++removedCount; - } else { - ++i; - } + detach(); + + Node *i = reinterpret_cast<Node *>(p.at(index)); + Node *e = reinterpret_cast<Node *>(p.end()); + Node *n = i; + node_destruct(i); + while (++i != e) { + if (i->t() == t) + node_destruct(i); + else + *n++ = *i; + } + + int removedCount = e - n; + d->end -= removedCount; return removedCount; } diff --git a/tests/benchmarks/corelib/tools/qlist/main.cpp b/tests/benchmarks/corelib/tools/qlist/main.cpp new file mode 100644 index 0000000..22aaf49 --- /dev/null +++ b/tests/benchmarks/corelib/tools/qlist/main.cpp @@ -0,0 +1,250 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QList> +#include <QTest> + +static const int N = 1000; + +struct MyBase +{ + MyBase(int i_) + : isCopy(false) + { + ++liveCount; + + i = i_; + } + + MyBase(const MyBase &other) + : isCopy(true) + { + if (isCopy) + ++copyCount; + ++liveCount; + + i = other.i; + } + + MyBase &operator=(const MyBase &other) + { + if (!isCopy) { + isCopy = true; + ++copyCount; + } else { + ++errorCount; + } + + i = other.i; + return *this; + } + + ~MyBase() + { + if (isCopy) { + if (!copyCount) + ++errorCount; + else + --copyCount; + } + if (!liveCount) + ++errorCount; + else + --liveCount; + } + + bool operator==(const MyBase &other) const + { return i == other.i; } + +protected: + ushort i; + bool isCopy; + +public: + static int errorCount; + static int liveCount; + static int copyCount; +}; + +int MyBase::errorCount = 0; +int MyBase::liveCount = 0; +int MyBase::copyCount = 0; + +struct MyPrimitive : public MyBase +{ + MyPrimitive(int i = -1) : MyBase(i) + { ++errorCount; } + MyPrimitive(const MyPrimitive &other) : MyBase(other) + { ++errorCount; } + ~MyPrimitive() + { ++errorCount; } +}; + +struct MyMovable : public MyBase +{ + MyMovable(int i = -1) : MyBase(i) {} +}; + +struct MyComplex : public MyBase +{ + MyComplex(int i = -1) : MyBase(i) {} +}; + +QT_BEGIN_NAMESPACE + +Q_DECLARE_TYPEINFO(MyPrimitive, Q_PRIMITIVE_TYPE); +Q_DECLARE_TYPEINFO(MyMovable, Q_MOVABLE_TYPE); +Q_DECLARE_TYPEINFO(MyComplex, Q_COMPLEX_TYPE); + +QT_END_NAMESPACE + + +class tst_QList: public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void removeAll_primitive_data(); + void removeAll_primitive(); + void removeAll_movable_data(); + void removeAll_movable(); + void removeAll_complex_data(); + void removeAll_complex(); +}; + +template <class T> +void removeAll_test(const QList<int> &i10, ushort valueToRemove, int itemsToRemove) +{ + bool isComplex = QTypeInfo<T>::isComplex; + + MyBase::errorCount = 0; + MyBase::liveCount = 0; + MyBase::copyCount = 0; + { + QList<T> list; + QCOMPARE(MyBase::liveCount, 0); + QCOMPARE(MyBase::copyCount, 0); + + for (int i = 0; i < 10 * N; ++i) { + T t(i10.at(i % 10)); + list.append(t); + } + QCOMPARE(MyBase::liveCount, isComplex ? list.size() : 0); + QCOMPARE(MyBase::copyCount, isComplex ? list.size() : 0); + + T t(valueToRemove); + QCOMPARE(MyBase::liveCount, isComplex ? list.size() + 1 : 1); + QCOMPARE(MyBase::copyCount, isComplex ? list.size() : 0); + + int removedCount; + QList<T> l; + + QBENCHMARK { + l = list; + removedCount = l.removeAll(t); + } + QCOMPARE(removedCount, itemsToRemove * N); + QCOMPARE(l.size() + removedCount, list.size()); + QVERIFY(!l.contains(valueToRemove)); + + QCOMPARE(MyBase::liveCount, isComplex ? l.isDetached() ? list.size() + l.size() + 1 : list.size() + 1 : 1); + QCOMPARE(MyBase::copyCount, isComplex ? l.isDetached() ? list.size() + l.size() : list.size() : 0); + } + if (isComplex) + QCOMPARE(MyBase::errorCount, 0); +} + +Q_DECLARE_METATYPE(QList<int>); + +void tst_QList::removeAll_primitive_data() +{ + qRegisterMetaType<QList<int> >(); + + QTest::addColumn<QList<int> >("i10"); + QTest::addColumn<int>("valueToRemove"); + QTest::addColumn<int>("itemsToRemove"); + + QTest::newRow("0%") << (QList<int>() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0) << 5 << 0; + QTest::newRow("10%") << (QList<int>() << 0 << 0 << 0 << 0 << 5 << 0 << 0 << 0 << 0 << 0) << 5 << 1; + QTest::newRow("90%") << (QList<int>() << 5 << 5 << 5 << 5 << 0 << 5 << 5 << 5 << 5 << 5) << 5 << 9; + QTest::newRow("100%") << (QList<int>() << 5 << 5 << 5 << 5 << 5 << 5 << 5 << 5 << 5 << 5) << 5 << 10; +} + +void tst_QList::removeAll_primitive() +{ + QFETCH(QList<int>, i10); + QFETCH(int, valueToRemove); + QFETCH(int, itemsToRemove); + + removeAll_test<MyPrimitive>(i10, valueToRemove, itemsToRemove); +} + +void tst_QList::removeAll_movable_data() +{ + removeAll_primitive_data(); +} + +void tst_QList::removeAll_movable() +{ + QFETCH(QList<int>, i10); + QFETCH(int, valueToRemove); + QFETCH(int, itemsToRemove); + + removeAll_test<MyMovable>(i10, valueToRemove, itemsToRemove); +} + +void tst_QList::removeAll_complex_data() +{ + removeAll_primitive_data(); +} + +void tst_QList::removeAll_complex() +{ + QFETCH(QList<int>, i10); + QFETCH(int, valueToRemove); + QFETCH(int, itemsToRemove); + + removeAll_test<MyComplex>(i10, valueToRemove, itemsToRemove); +} + +QTEST_APPLESS_MAIN(tst_QList) + +#include "main.moc" diff --git a/tests/benchmarks/corelib/tools/qlist/qlist.pro b/tests/benchmarks/corelib/tools/qlist/qlist.pro new file mode 100644 index 0000000..902e72e --- /dev/null +++ b/tests/benchmarks/corelib/tools/qlist/qlist.pro @@ -0,0 +1,5 @@ +load(qttest_p4) +TARGET = tst_qlist +QT = core + +SOURCES += main.cpp diff --git a/tests/benchmarks/corelib/tools/tools.pro b/tests/benchmarks/corelib/tools/tools.pro index 681a6c6..44e8973 100644 --- a/tests/benchmarks/corelib/tools/tools.pro +++ b/tests/benchmarks/corelib/tools/tools.pro @@ -3,6 +3,7 @@ SUBDIRS = \ containers-associative \ containers-sequential \ qbytearray \ + qlist \ qrect \ qregexp \ qstring \ -- cgit v0.12 From 52223d80ec8ba6d579c091efe0e40589a5d2bd67 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin <ritt.ks@gmail.com> Date: Wed, 13 Jul 2011 18:14:39 +0200 Subject: don't detach until the list is going to be modified removeAt() does detach()'ing for us Merge-request: 1285 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> --- src/corelib/tools/qlist.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h index e104f65..9f7b23f 100644 --- a/src/corelib/tools/qlist.h +++ b/src/corelib/tools/qlist.h @@ -795,7 +795,6 @@ Q_OUTOFLINE_TEMPLATE int QList<T>::removeAll(const T &_t) template <typename T> Q_OUTOFLINE_TEMPLATE bool QList<T>::removeOne(const T &_t) { - detachShared(); int index = indexOf(_t); if (index != -1) { removeAt(index); -- cgit v0.12 From fa2e888d6c5e148fec99c21011f68dcade7cb4ba Mon Sep 17 00:00:00 2001 From: Corentin Chary <corentin.chary@gmail.com> Date: Fri, 12 Aug 2011 19:05:06 +0200 Subject: tests: fix QNetworkProxyFactory test QNetworkProxy takes an hostname, not an url. Signed-off-by: Corentin Chary <corentin.chary@gmail.com> Merge-request: 1319 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> --- tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp b/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp index 839612e..4ffb00b 100644 --- a/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp +++ b/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp @@ -116,7 +116,7 @@ void tst_QNetworkProxyFactory::systemProxyForQuery() const QNetworkProxy proxy; QList<QNetworkProxy> nativeProxyList; - nativeProxyList << QNetworkProxy(QNetworkProxy::HttpProxy, QString("http://test.proxy.com"), 8080) << QNetworkProxy::NoProxy; + nativeProxyList << QNetworkProxy(QNetworkProxy::HttpProxy, QString("test.proxy.com"), 8080) << QNetworkProxy::NoProxy; foreach (proxy, systemProxyList) { if (!nativeProxyList.contains(proxy)) { -- cgit v0.12 From 647ffa677f9bf6da50fcdb7a6948501e7e6719ce Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther <zecke@selfish.org> Date: Fri, 12 Aug 2011 19:05:47 +0200 Subject: directfb: Include directfbgl.h directly directfb.h is included directly in all other files, include directfbgl.h without the directfb/ prefix as well. $ pkg-config --cflags directfb -D_REENTRANT -I/home/foo/install/directfb/include/directfb Merge-request: 2643 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> --- src/plugins/platforms/directfb/qdirectfbglcontext.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/directfb/qdirectfbglcontext.cpp b/src/plugins/platforms/directfb/qdirectfbglcontext.cpp index 8a40b24..aca28f1 100644 --- a/src/plugins/platforms/directfb/qdirectfbglcontext.cpp +++ b/src/plugins/platforms/directfb/qdirectfbglcontext.cpp @@ -41,7 +41,7 @@ #include "qdirectfbglcontext.h" -#include <directfb/directfbgl.h> +#include <directfbgl.h> #include <QDebug> -- cgit v0.12 From 98d4b36403bb042a44e3aec39492f77ce70f38b7 Mon Sep 17 00:00:00 2001 From: Takumi ASAKI <takumi.asaki@nokia.com> Date: Fri, 12 Aug 2011 19:24:14 +0200 Subject: Update Japanese translations for Qt 4.8. Merge-request: 1315 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> --- translations/assistant_ja.ts | 358 ++++++++++++----------------------- translations/designer_ja.ts | 121 +++++++++--- translations/qt_ja.ts | 437 +++++++++++++++++++++++++++++++++++-------- translations/qtconfig_ja.ts | 192 +++++++------------ 4 files changed, 640 insertions(+), 468 deletions(-) diff --git a/translations/assistant_ja.ts b/translations/assistant_ja.ts index 5c990de..0ebfec8 100644 --- a/translations/assistant_ja.ts +++ b/translations/assistant_ja.ts @@ -76,10 +76,6 @@ Reason: <translation>コレクションファイル '%1' の作成中にエラーが発生しました: %2。</translation> </message> <message> - <source>Error reading collection file '%1': %2</source> - <translation type="obsolete">コレクションファイル '%1' の読み込み中にエラーが発生しました: %2</translation> - </message> - <message> <source>Cannot load sqlite database driver!</source> <translation>SQLite データベース ドライバーをロードできません!</translation> </message> @@ -87,10 +83,6 @@ Reason: <context> <name>BookmarkDialog</name> <message> - <source>Bookmarks</source> - <translation type="obsolete">ブックマーク</translation> - </message> - <message> <source>Add Bookmark</source> <translation>ブックマークの追加</translation> </message> @@ -111,10 +103,6 @@ Reason: <translation>新しいフォルダ</translation> </message> <message> - <source>Delete Folder</source> - <translation type="obsolete">フォルダを削除</translation> - </message> - <message> <source>Rename Folder</source> <translation>フォルダの名前変更</translation> </message> @@ -133,10 +121,6 @@ Reason: <context> <name>BookmarkManager</name> <message> - <source>Bookmarks</source> - <translation type="obsolete">ブックマーク</translation> - </message> - <message> <source>Untitled</source> <translation>タイトルなし</translation> </message> @@ -184,10 +168,6 @@ Reason: <source>Rename Bookmark</source> <translation>ブックマークの名前変更</translation> </message> - <message> - <source>New Folder</source> - <translation type="obsolete">新しいフォルダ</translation> - </message> </context> <context> <name>BookmarkManagerWidget</name> @@ -279,6 +259,10 @@ Reason: <translation>アドレス</translation> </message> <message> + <source>Toolbar Menu</source> + <translation>ツールバーメニュー</translation> + </message> + <message> <source>Bookmarks Menu</source> <translation>ブックマークメニュー</translation> </message> @@ -294,30 +278,6 @@ Reason: <translation>削除</translation> </message> <message> - <source>Delete Folder</source> - <translation type="obsolete">フォルダを削除</translation> - </message> - <message> - <source>Rename Folder</source> - <translation type="obsolete">フォルダの名前変更</translation> - </message> - <message> - <source>Show Bookmark</source> - <translation type="obsolete">ブックマークを開く</translation> - </message> - <message> - <source>Show Bookmark in New Tab</source> - <translation type="obsolete">ブックマークを新しいタブで開く</translation> - </message> - <message> - <source>Delete Bookmark</source> - <translation type="obsolete">ブックマークを削除</translation> - </message> - <message> - <source>Rename Bookmark</source> - <translation type="obsolete">ブックマークの名前変更</translation> - </message> - <message> <source>Add</source> <translation>追加</translation> </message> @@ -329,41 +289,9 @@ Reason: <context> <name>CentralWidget</name> <message> - <source>Add new page</source> - <translation>新しいページの追加</translation> - </message> - <message> - <source>Close current page</source> - <translation>現在のページを閉じる</translation> - </message> - <message> <source>Print Document</source> <translation>ドキュメントを印刷</translation> </message> - <message> - <source>unknown</source> - <translation>不明</translation> - </message> - <message> - <source>Add New Page</source> - <translation>新しいページの追加</translation> - </message> - <message> - <source>Close This Page</source> - <translation>このページを閉じる</translation> - </message> - <message> - <source>Close Other Pages</source> - <translation>他のページを閉じる</translation> - </message> - <message> - <source>Add Bookmark for this Page...</source> - <translation>このページをブックマークに追加...</translation> - </message> - <message> - <source>Search</source> - <translation>検索</translation> - </message> </context> <context> <name>CmdLineParser</name> @@ -617,10 +545,6 @@ Reason: <translation>大文字/小文字を区別する</translation> </message> <message> - <source>Whole words</source> - <translation type="obsolete">単語単位で検索する</translation> - </message> - <message> <source><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Search wrapped</source> <translation><img src=":/trolltech/assistant/images/wrap.png">&nbsp;見つからなければ先頭から検索する</translation> </message> @@ -699,6 +623,49 @@ Reason: </message> </context> <context> + <name>GlobalActions</name> + <message> + <source>&Back</source> + <translation>戻る(&B)</translation> + </message> + <message> + <source>&Forward</source> + <translation>進む(&F)</translation> + </message> + <message> + <source>&Home</source> + <translation>ホーム(&H)</translation> + </message> + <message> + <source>ALT+Home</source> + <translation>ALT+Home</translation> + </message> + <message> + <source>Zoom &in</source> + <translation>拡大(&I)</translation> + </message> + <message> + <source>Zoom &out</source> + <translation>縮小(&O)</translation> + </message> + <message> + <source>&Copy selected Text</source> + <translation>選択中の文字をコピー(&C)</translation> + </message> + <message> + <source>&Print...</source> + <translation>印刷(&P)...</translation> + </message> + <message> + <source>&Find in Text...</source> + <translation>検索(&F)...</translation> + </message> + <message> + <source>&Find</source> + <translation>検索(&F)</translation> + </message> +</context> +<context> <name>HelpEngineWrapper</name> <message> <source>Unfiltered</source> @@ -715,14 +682,6 @@ Reason: <context> <name>HelpViewer</name> <message> - <source>Help</source> - <translation type="obsolete">ヘルプ</translation> - </message> - <message> - <source>OK</source> - <translation type="obsolete">OK</translation> - </message> - <message> <source><title>about:blank</title></source> <translation><title>about:blank</title></translation> </message> @@ -731,22 +690,28 @@ Reason: <translation><title>Error 404...</title><div align="center"><br><br><h1>ページが見つかりませんでした</h1><br><h3>'%1'</h3></div></translation> </message> <message> + <source>Open Link</source> + <translation>リンクを開く</translation> + </message> + <message> <source>Copy &Link Location</source> <translation>リンクのURLをコピー(&L)</translation> </message> <message> - <source>Open Link in New Tab Ctrl+LMB</source> - <translation>リンクを新しいタブで開く Ctrl+LMB</translation> + <source>Copy</source> + <translation>コピー</translation> </message> <message> - <source>Open Link in New Tab</source> - <translation>リンクを新しいタブで開く</translation> + <source>Reload</source> + <translation>リロード</translation> </message> <message> - <source>Unable to launch external application. -</source> - <translation type="obsolete">外部アプリケーションを起動できません。 -</translation> + <source>Open Link in New Tab Ctrl+LMB</source> + <translation>リンクを新しいタブで開く Ctrl+LMB</translation> + </message> + <message> + <source>Open Link in New Page</source> + <translation>リンクを新しいページで開く</translation> </message> </context> <context> @@ -945,10 +910,6 @@ Reason: <translation>Qt Assistant</translation> </message> <message> - <source>Unfiltered</source> - <translation type="obsolete">フィルタなし</translation> - </message> - <message> <source>Page Set&up...</source> <translation>ページ設定(&U)...</translation> </message> @@ -957,10 +918,6 @@ Reason: <translation>印刷プレビュー...</translation> </message> <message> - <source>&Print...</source> - <translation>印刷(&P)...</translation> - </message> - <message> <source>New &Tab</source> <translation>新しいタブ(&T)</translation> </message> @@ -977,18 +934,6 @@ Reason: <translation>CTRL+Q</translation> </message> <message> - <source>&Copy selected Text</source> - <translation>選択中の文字をコピー(&C)</translation> - </message> - <message> - <source>&Find in Text...</source> - <translation>検索(&F)...</translation> - </message> - <message> - <source>&Find</source> - <translation>検索(&F)</translation> - </message> - <message> <source>Find &Next</source> <translation>次を検索(&N)</translation> </message> @@ -1001,14 +946,6 @@ Reason: <translation>設定...</translation> </message> <message> - <source>Zoom &in</source> - <translation>拡大(&I)</translation> - </message> - <message> - <source>Zoom &out</source> - <translation>縮小(&O)</translation> - </message> - <message> <source>Normal &Size</source> <translation>普通の大きさ(&S)</translation> </message> @@ -1029,10 +966,6 @@ Reason: <translation>ALT+S</translation> </message> <message> - <source>&Home</source> - <translation>ホーム(&H)</translation> - </message> - <message> <source><center><h3>%1</h3><p>Version %2</p></center><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p></source> <translation><center><h3>%1</h3><p>バージョン %2</p></center><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p></translation> </message> @@ -1041,18 +974,6 @@ Reason: <translation>ファイル '%1' を登録できませんでした: %2</translation> </message> <message> - <source>Ctrl+Home</source> - <translation type="obsolete">Ctrl+Home</translation> - </message> - <message> - <source>&Back</source> - <translation>戻る(&B)</translation> - </message> - <message> - <source>&Forward</source> - <translation>進む(&F)</translation> - </message> - <message> <source>Sync with Table of Contents</source> <translation>内容と目次を同期する</translation> </message> @@ -1073,10 +994,6 @@ Reason: <translation>Ctrl+Alt+Left</translation> </message> <message> - <source>Add Bookmark...</source> - <translation type="obsolete">ブックマークの追加...</translation> - </message> - <message> <source>About...</source> <translation>Qt Assistant について...</translation> </message> @@ -1137,10 +1054,22 @@ Reason: <translation>ズーム</translation> </message> <message> + <source>Open Pages</source> + <translation>ページを開く</translation> + </message> + <message> + <source>Bookmark Toolbar</source> + <translation>ブックマークツールバー</translation> + </message> + <message> <source>&File</source> <translation>ファイル(&F)</translation> </message> <message> + <source>E&xit</source> + <translation>終了(&X)</translation> + </message> + <message> <source>&Edit</source> <translation>編集(&E)</translation> </message> @@ -1149,12 +1078,12 @@ Reason: <translation>表示(&V)</translation> </message> <message> - <source>&Go</source> - <translation>ジャンプ(&G)</translation> + <source>ALT+P</source> + <translation>ALT+P</translation> </message> <message> - <source>ALT+Home</source> - <translation>ALT+Home</translation> + <source>&Go</source> + <translation>ジャンプ(&G)</translation> </message> <message> <source>Sync</source> @@ -1172,9 +1101,16 @@ Reason: <source>ALT+O</source> <translation>ALT+O</translation> </message> +</context> +<context> + <name>OpenPagesWidget</name> + <message> + <source>Close %1</source> + <translation>"%1" を閉じる</translation> + </message> <message> - <source>CTRL+D</source> - <translation type="obsolete">CTRL+D</translation> + <source>Close All Except %1</source> + <translation>"%1" 以外をすべて閉じる</translation> </message> </context> <context> @@ -1396,6 +1332,14 @@ Do you want to remove it?</source> <source>Blank Page</source> <translation>空白ページ</translation> </message> + <message> + <source>Appearance</source> + <translation>外観</translation> + </message> + <message> + <source>Show tabs for each individual page</source> + <translation>各ページにタブを表示する</translation> + </message> </context> <context> <name>QCollectionGenerator</name> @@ -1567,97 +1511,6 @@ qhelpgenerator <ヘルププロジェクトファイル> [オプション] </message> </context> <context> - <name>QObject</name> - <message> - <source>The specified collection file does not exist!</source> - <translation type="obsolete">指定されたコレクションファイルは存在しません!</translation> - </message> - <message> - <source>Missing collection file!</source> - <translation type="obsolete">コレクションファイルが見つかりません!</translation> - </message> - <message> - <source>Invalid URL!</source> - <translation type="obsolete">不正なURLです!</translation> - </message> - <message> - <source>Missing URL!</source> - <translation type="obsolete">URLが見つかりません!</translation> - </message> - <message> - <source>Unknown widget: %1</source> - <translation type="obsolete">不明なウィジェット: %1</translation> - </message> - <message> - <source>Missing widget!</source> - <translation type="obsolete">ウィジェットが見つかりません!</translation> - </message> - <message> - <source>The specified Qt help file does not exist!</source> - <translation type="obsolete">指定された Qt ヘルプ ファイルが存在しません!</translation> - </message> - <message> - <source>Missing help file!</source> - <translation type="obsolete">ヘルプファイルが見つかりません!</translation> - </message> - <message> - <source>Missing filter argument!</source> - <translation type="obsolete">フィルタ引数が不足しています!</translation> - </message> - <message> - <source>Unknown option: %1</source> - <translation type="obsolete">不明なオプション: %1</translation> - </message> - <message> - <source>Qt Assistant</source> - <translation type="obsolete">Qt Assistant</translation> - </message> - <message> - <source>Could not register documentation file -%1 - -Reason: -%2</source> - <translation type="obsolete">ドキュメントファイルを登録できませんでした。 -%1 - -原因: -%2</translation> - </message> - <message> - <source>Documentation successfully registered.</source> - <translation type="obsolete">ドキュメントの登録に成功しました。</translation> - </message> - <message> - <source>Could not unregister documentation file -%1 - -Reason: -%2</source> - <translation type="obsolete">ドキュメントファイルを解除できませんでした。 -%1 - -原因: -%2</translation> - </message> - <message> - <source>Documentation successfully unregistered.</source> - <translation type="obsolete">ドキュメントの解放に成功しました。</translation> - </message> - <message> - <source>Cannot load sqlite database driver!</source> - <translation type="obsolete">SQLite データベース ドライバーをロードできません!</translation> - </message> - <message> - <source>The specified collection file could not be read!</source> - <translation type="obsolete">指定されたコレクションファイルは読み込めません!</translation> - </message> - <message> - <source>Bookmark</source> - <translation type="obsolete">ブックマーク</translation> - </message> -</context> -<context> <name>RemoteControl</name> <message> <source>Debugging Remote Control</source> @@ -1686,9 +1539,28 @@ Reason: <source>Select All</source> <translation>すべてを選択</translation> </message> +</context> +<context> + <name>TabBar</name> + <message> + <source>(Untitled)</source> + <translation>(タイトルなし)</translation> + </message> <message> - <source>Open Link</source> - <translation type="obsolete">リンクを開く</translation> + <source>New &Tab</source> + <translation>新しいタブ(&T)</translation> + </message> + <message> + <source>&Close Tab</source> + <translation>タブを閉じる(&C)</translation> + </message> + <message> + <source>Close Other Tabs</source> + <translation>他のタブを閉じる</translation> + </message> + <message> + <source>Add Bookmark for this Page...</source> + <translation>このページをブックマークに追加...</translation> </message> </context> <context> diff --git a/translations/designer_ja.ts b/translations/designer_ja.ts index 7fcc66d..2be8cd4 100644 --- a/translations/designer_ja.ts +++ b/translations/designer_ja.ts @@ -371,10 +371,6 @@ <translation>ページ</translation> </message> <message> - <source>page</source> - <translation>ページ</translation> - </message> - <message> <source>Insert Page</source> <translation>ページを挿入</translation> </message> @@ -483,10 +479,6 @@ <translation>サブウィンドウを挿入</translation> </message> <message> - <source>subwindow</source> - <translation>サブウィンドウ</translation> - </message> - <message> <source>Subwindow</source> <translation>サブウィンドウ</translation> </message> @@ -530,6 +522,10 @@ <translation>'%1' のレイアウトを %2 から %3 に変更</translation> </message> <message> + <source>Change layout alignment</source> + <translation>レイアウトの配置を変更</translation> + </message> + <message> <source>Change script</source> <translation>スクリプトを変更</translation> </message> @@ -868,8 +864,6 @@ <source>Invalid stretch value for '%1': '%2'</source> <extracomment>Parsing layout stretch values ---------- -Parsing layout stretch values ----------- Parsing layout stretch values</extracomment> <translation>'%1' のストレッチ値が無効です: '%2'</translation> </message> @@ -877,8 +871,6 @@ Parsing layout stretch values</extracomment> <source>Invalid minimum size for '%1': '%2'</source> <extracomment>Parsing grid layout minimum size values ---------- -Parsing grid layout minimum size values ----------- Parsing grid layout minimum size values</extracomment> <translation>'%1' の最小サイズが無効です: '%2'</translation> </message> @@ -1827,10 +1819,6 @@ Container pages should only be added by specifying them in XML returned by the d <translation>ヘルプ(&H)</translation> </message> <message> - <source>Edit</source> - <translation>編集</translation> - </message> - <message> <source>Toolbars</source> <translation>ツールバー</translation> </message> @@ -1847,6 +1835,10 @@ Container pages should only be added by specifying them in XML returned by the d <translation>表示(&V)</translation> </message> <message> + <source>&Edit</source> + <translation>編集(&E)</translation> + </message> + <message> <source>&Settings</source> <translation>設定(&S)</translation> </message> @@ -1891,8 +1883,6 @@ Container pages should only be added by specifying them in XML returned by the d <source>An empty class name was passed on to %1 (object name: '%2').</source> <extracomment>Empty class name passed to widget factory method ---------- -Empty class name passed to widget factory method ----------- Empty class name passed to widget factory method</extracomment> <translation>%1 (オブジェクト名: %2)に空のクラス名が渡されました。</translation> </message> @@ -3725,6 +3715,10 @@ Do you want overwrite the template?</source> <translation>親から継承</translation> </message> <message> + <source>[Theme] %1</source> + <translation>[テーマ] %1</translation> + </message> + <message> <source>Horizontal</source> <translation>横方向</translation> </message> @@ -3733,6 +3727,10 @@ Do you want overwrite the template?</source> <translation>縦方向</translation> </message> <message> + <source>Theme</source> + <translation>テーマ</translation> + </message> + <message> <source>Normal Off</source> <translation>通常 オフ</translation> </message> @@ -4317,6 +4315,17 @@ Do you want overwrite the template?</source> </message> </context> <context> + <name>qdesigner_internal::IconThemeDialog</name> + <message> + <source>Set Icon From Theme</source> + <translation>テーマからアイコンを設定する</translation> + </message> + <message> + <source>Input icon name from the current theme:</source> + <translation>現在のテーマからアイコンの名前を入力:</translation> + </message> +</context> +<context> <name>qdesigner_internal::ItemListEditor</name> <message> <source>Properties &<<</source> @@ -4458,18 +4467,6 @@ Do you want overwrite the template?</source> <translation>テキスト(&T):</translation> </message> <message> - <source>Shortcut:</source> - <translation>ショートカット:</translation> - </message> - <message> - <source>Checkable:</source> - <translation>チェック可:</translation> - </message> - <message> - <source>ToolTip:</source> - <translation>ツールチップ:</translation> - </message> - <message> <source>...</source> <translation>...</translation> </message> @@ -4481,6 +4478,22 @@ Do you want overwrite the template?</source> <source>Object &name:</source> <translation>オブジェクト名(&N):</translation> </message> + <message> + <source>T&oolTip:</source> + <translation>ツールチップ(&O):</translation> + </message> + <message> + <source>Icon th&eme:</source> + <translation>アイコンテーマ(&E):</translation> + </message> + <message> + <source>&Checkable:</source> + <translation>チェック可(&C):</translation> + </message> + <message> + <source>&Shortcut:</source> + <translation>ショートカット(&S):</translation> + </message> </context> <context> <name>qdesigner_internal::NewDynamicPropertyDialog</name> @@ -4738,9 +4751,17 @@ Please select another name.</source> <translation>ファイルを選択...</translation> </message> <message> + <source>Set Icon From Theme...</source> + <translation>テーマからアイコンを設定...</translation> + </message> + <message> <source>...</source> <translation>...</translation> </message> + <message> + <source>[Theme] %1</source> + <translation>[テーマ] %1</translation> + </message> </context> <context> <name>qdesigner_internal::PlainTextEditorDialog</name> @@ -5126,6 +5147,42 @@ Class: %2</source> <translation>シグナル/スロットを変更...</translation> </message> <message> + <source>Layout Alignment</source> + <translation>レイアウトの配置</translation> + </message> + <message> + <source>No Horizontal Alignment</source> + <translation>横方向の調整なし</translation> + </message> + <message> + <source>Left</source> + <translation>左端揃え</translation> + </message> + <message> + <source>Center Horizontally</source> + <translation>中央揃え(横方向)</translation> + </message> + <message> + <source>Right</source> + <translation>右端揃え</translation> + </message> + <message> + <source>No Vertical Alignment</source> + <translation>横方向の調整なし</translation> + </message> + <message> + <source>Top</source> + <translation>上端揃え</translation> + </message> + <message> + <source>Center Vertically</source> + <translation>中央揃え(縦方向)</translation> + </message> + <message> + <source>Bottom</source> + <translation>下端揃え</translation> + </message> + <message> <source>Size Constraints</source> <translation>限界サイズ</translation> </message> @@ -5329,6 +5386,10 @@ Class: %2</source> <source>Insert &Link</source> <translation>リンクを挿入(&L)</translation> </message> + <message> + <source>Simplify Rich Text</source> + <translation>リッチテキストを単純化する</translation> + </message> </context> <context> <name>qdesigner_internal::ScriptDialog</name> diff --git a/translations/qt_ja.ts b/translations/qt_ja.ts index 094e34d..05ed9d4 100644 --- a/translations/qt_ja.ts +++ b/translations/qt_ja.ts @@ -10,9 +10,20 @@ </message> </context> <context> + <name>Debugger::JSAgentWatchData</name> + <message> + <source>[Array of length %1]</source> + <translation>[配列長 %1]</translation> + </message> + <message> + <source><undefined></source> + <translation><未定義></translation> + </message> +</context> +<context> <name>FakeReply</name> <message> - <source>Fake error !</source> + <source>Fake error!</source> <translation>疑似エラー!</translation> </message> <message> @@ -171,7 +182,7 @@ libgstreamer-plugins-base はインストールされていますか。</transla </message> <message> <source>Not found</source> - <translation>見つかりませんでした</translation> + <translation>見つかりません</translation> </message> <message> <source>Out of memory</source> @@ -762,7 +773,7 @@ libgstreamer-plugins-base はインストールされていますか。</transla File not found. Check path and filename.</source> <translation>%1 -ファイルが見つかりませんでした。 +ファイルが見つかりません。 パスおよびファイル名を確認してください。</translation> </message> </context> @@ -1017,7 +1028,7 @@ to <name>QAbstractSocket</name> <message> <source>Host not found</source> - <translation>ホストが見つかりませんでした</translation> + <translation>ホストが見つかりません</translation> </message> <message> <source>Connection refused</source> @@ -1063,6 +1074,14 @@ to <context> <name>QAccessibleButton</name> <message> + <source>Uncheck</source> + <translation>選択解除</translation> + </message> + <message> + <source>Check</source> + <translation>選択</translation> + </message> + <message> <source>Press</source> <translation>押す</translation> </message> @@ -1722,10 +1741,6 @@ to <translation>エイリアスプロパティがエイリアスの境界を越えています</translation> </message> <message> - <source>Invalid alias reference. An alias reference must be specified as <id> or <id>.<property></source> - <translation type="obsolete">無効なエイリアスの参照です。エイリアスの参照先は <ID> もしくは <ID>.<プロパティ> でなくてはいけません</translation> - </message> - <message> <source>Invalid alias reference. Unable to find id "%1"</source> <translation>無効なエイリアスの参照です。ID "%1" が見つかりません</translation> </message> @@ -1742,25 +1757,6 @@ to </message> </context> <context> - <name>QDeclarativeCompositeTypeManager</name> - <message> - <source>Resource %1 unavailable</source> - <translation type="obsolete">リソース %1 が利用できません</translation> - </message> - <message> - <source>Namespace %1 cannot be used as a type</source> - <translation type="obsolete">名前空間 %1 を型として使用することはできません</translation> - </message> - <message> - <source>%1 %2</source> - <translation type="obsolete">%1 %2</translation> - </message> - <message> - <source>Type %1 unavailable</source> - <translation type="obsolete">型 %1 が利用できません</translation> - </message> -</context> -<context> <name>QDeclarativeConnections</name> <message> <source>Cannot assign to non-existent property "%1"</source> @@ -2160,25 +2156,6 @@ to </message> </context> <context> - <name>QDeclarativeTypeData</name> - <message> - <source>Script %1 unavailable</source> - <translation type="obsolete">スクリプト %1 が利用できません</translation> - </message> - <message> - <source>Type %1 unavailable</source> - <translation type="obsolete">型 %1 が利用できません</translation> - </message> - <message> - <source>Namespace %1 cannot be used as a type</source> - <translation type="obsolete">名前空間 %1 を型として使用することはできません</translation> - </message> - <message> - <source>%1 %2</source> - <translation type="obsolete">%1 %2</translation> - </message> -</context> -<context> <name>QDeclarativeTypeLoader</name> <message> <source>Script %1 unavailable</source> @@ -2493,6 +2470,10 @@ to <source>Cannot create %1 for output</source> <translation>コピー先として %1 を作成できません</translation> </message> + <message> + <source>No file engine available or engine does not support UnMapExtension</source> + <translation>ファイルエンジンが見つからないか、UnMapExtension をサポートしていません</translation> + </message> </context> <context> <name>QFileDialog</name> @@ -2985,7 +2966,7 @@ Do you want to delete it anyway?</source> </message> <message> <source>Host %1 not found</source> - <translation>ホスト %1 が見つかりませんでした</translation> + <translation>ホスト %1 が見つかりません</translation> </message> <message> <source>Connection refused to host %1</source> @@ -3156,7 +3137,7 @@ Do you want to delete it anyway?</source> </message> <message> <source>Host %1 not found</source> - <translation>ホスト %1 が見つかりませんでした</translation> + <translation>ホスト %1 が見つかりません</translation> </message> <message> <source>HTTP request failed</source> @@ -3416,18 +3397,10 @@ Do you want to delete it anyway?</source> <context> <name>QLibrary</name> <message> - <source>Could not mmap '%1': %2</source> - <translation type="obsolete">'%1' をメモリにマッピングできませんでした: %2</translation> - </message> - <message> <source>Plugin verification data mismatch in '%1'</source> <translation>'%1' でプラグイン検証データが一致しません</translation> </message> <message> - <source>Could not unmap '%1': %2</source> - <translation type="obsolete">'%1' のマッピングを解除できませんでした: %2</translation> - </message> - <message> <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source> <translation>プラグイン '%1' は、互換性のない Qt ライブラリを使用しています。(%2.%3.%4) [%5]</translation> </message> @@ -3463,6 +3436,18 @@ Do you want to delete it anyway?</source> <source>Cannot resolve symbol "%1" in %2: %3</source> <translation>'%2'に含まれる識別子 "%1" を解決できません: %3</translation> </message> + <message> + <source>'%1' is not an ELF object (%2)</source> + <translation>'%1' は ELF オブジェクトではありません(%2)</translation> + </message> + <message> + <source>'%1' is not an ELF object</source> + <translation>'%1' は ELF オブジェクトではありません</translation> + </message> + <message> + <source>'%1' is an invalid ELF object (%2)</source> + <translation>'%1' は無効な ELF オブジェクトです(%2)</translation> + </message> </context> <context> <name>QLineEdit</name> @@ -3560,6 +3545,10 @@ Do you want to delete it anyway?</source> <source>%1: Unknown error %2</source> <translation>%1: 未知のエラー %2</translation> </message> + <message> + <source>%1: Access denied</source> + <translation>%1: アクセスできません</translation> + </message> </context> <context> <name>QMYSQLDriver</name> @@ -3902,10 +3891,6 @@ Do you want to delete it anyway?</source> <context> <name>QNetworkAccessDataBackend</name> <message> - <source>Operation not supported on %1</source> - <translation>%1 ではこの操作はサポートされていません</translation> - </message> - <message> <source>Invalid URI: %1</source> <translation>無効なURIです: %1</translation> </message> @@ -4000,6 +3985,10 @@ Do you want to delete it anyway?</source> <translation>ネットワークセッションエラー。</translation> </message> <message> + <source>backend start error.</source> + <translation>バックエンド開始時のエラー。</translation> + </message> + <message> <source>Temporary network failure.</source> <translation>一時的なネットワークの失敗。</translation> </message> @@ -4192,6 +4181,10 @@ Do you want to delete it anyway?</source> <source>invalid query: "%1"</source> <translation>無効なクエリー: "%1"</translation> </message> + <message> + <source>Host not found</source> + <translation>ホストが見つかりません</translation> + </message> </context> <context> <name>QPPDOptionsModel</name> @@ -5500,6 +5493,10 @@ Please choose a different file name.</source> <translation>%1: 指定されたサイズはシステムにより拒否されました</translation> </message> <message> + <source>%1: bad name</source> + <translation>%1: 無効な名前です</translation> + </message> + <message> <source>%1: not attached</source> <translation>%1: アタッチしていません</translation> </message> @@ -5508,11 +5505,6 @@ Please choose a different file name.</source> <translation>%1: 無効なサイズです</translation> </message> <message> - <source>%1: key error</source> - <translatorcomment>safekey.isEmpty()==true</translatorcomment> - <translation>%1: キーかありません</translation> - </message> - <message> <source>%1: size query failed</source> <translation>%1: サイズのクエリーに失敗しました</translation> </message> @@ -6733,6 +6725,121 @@ Please choose a different file name.</source> </message> </context> <context> + <name>QSymbianSocketEngine</name> + <message> + <source>Unable to initialize non-blocking socket</source> + <translation>非ブロック型ソケットを初期化できません</translation> + </message> + <message> + <source>Unable to initialize broadcast socket</source> + <translation>ブロードキャストソケットを初期化できません</translation> + </message> + <message> + <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> + <translation>IPv6 がサポートされていないプラットフォームで IPv6 ソケットを使用しようとしています</translation> + </message> + <message> + <source>The remote host closed the connection</source> + <translation>リモートホストは接続を閉じました</translation> + </message> + <message> + <source>Network operation timed out</source> + <translation>ネットワーク操作がタイムアウトしました</translation> + </message> + <message> + <source>Out of resources</source> + <translation>リソースが足りません</translation> + </message> + <message> + <source>Unsupported socket operation</source> + <translation>サポートされていないソケット操作です</translation> + </message> + <message> + <source>Protocol type not supported</source> + <translation>プロトコル型がサポートされていません</translation> + </message> + <message> + <source>Invalid socket descriptor</source> + <translation>無効なソケット記述子です</translation> + </message> + <message> + <source>Host unreachable</source> + <translation>ホストへ到達できません</translation> + </message> + <message> + <source>Network unreachable</source> + <translation>ネットワークへ到達できません</translation> + </message> + <message> + <source>Permission denied</source> + <translation>許可されていません</translation> + </message> + <message> + <source>Connection timed out</source> + <translation>接続がタイムアウトしました</translation> + </message> + <message> + <source>Connection refused</source> + <translation>接続が拒否されました</translation> + </message> + <message> + <source>The bound address is already in use</source> + <translation>バインドアドレスは既に使われています</translation> + </message> + <message> + <source>The address is not available</source> + <translation>そのアドレスは使用できません</translation> + </message> + <message> + <source>The address is protected</source> + <translation>そのアドレスへのアクセス権がありません</translation> + </message> + <message> + <source>Datagram was too large to send</source> + <translation>データグラムが大き過ぎて送信できませんでした</translation> + </message> + <message> + <source>Unable to send a message</source> + <translation>メッセージを送信できません</translation> + </message> + <message> + <source>Unable to receive a message</source> + <translation>メッセージを受信できません</translation> + </message> + <message> + <source>Unable to write</source> + <translation>書き込みができません</translation> + </message> + <message> + <source>Network error</source> + <translation>ネットワークエラー</translation> + </message> + <message> + <source>Another socket is already listening on the same port</source> + <translation>別のソケットが同じポートで既に待ち受けています</translation> + </message> + <message> + <source>Operation on non-socket</source> + <translation>非ソケットに対する操作です</translation> + </message> + <message> + <source>The proxy type is invalid for this operation</source> + <translation>このプロキシーは、この操作に対応していません</translation> + </message> + <message> + <source>The address is invalid for this operation</source> + <translation>この操作には無効なアドレスです</translation> + </message> + <message> + <source>The specified network session is not opened</source> + <translation>指定されたネットワークセッションは開いていません</translation> + </message> + <message> + <source>Unknown error</source> + <translation>未知のエラー</translation> + </message> +</context> +<context> <name>QSystemSemaphore</name> <message> <source>%1: out of resources</source> @@ -6751,6 +6858,10 @@ Please choose a different file name.</source> <translation>%1: 存在しません</translation> </message> <message> + <source>%1: name error</source> + <translation>%1: 名前の解決に失敗</translation> + </message> + <message> <source>%1: unknown error %2</source> <translation>%1: 未知のエラーです %2</translation> </message> @@ -6759,7 +6870,7 @@ Please choose a different file name.</source> <name>QTDSDriver</name> <message> <source>Unable to open connection</source> - <translation>接続をオープンできません</translation> + <translation>接続を開けません</translation> </message> <message> <source>Unable to use database</source> @@ -6840,11 +6951,21 @@ Please choose a different file name.</source> <context> <name>QUndoGroup</name> <message> + <source>Undo %1</source> + <translation>%1 を元に戻す</translation> + </message> + <message> <source>Undo</source> + <comment>Default text for undo action</comment> <translation>元に戻す</translation> </message> <message> + <source>Redo %1</source> + <translation>%1 をやり直す</translation> + </message> + <message> <source>Redo</source> + <comment>Default text for redo action</comment> <translation>やり直す</translation> </message> </context> @@ -6858,11 +6979,21 @@ Please choose a different file name.</source> <context> <name>QUndoStack</name> <message> + <source>Undo %1</source> + <translation>%1 を元に戻す</translation> + </message> + <message> <source>Undo</source> + <comment>Default text for undo action</comment> <translation>元に戻す</translation> </message> <message> + <source>Redo %1</source> + <translation>%1 をやり直す</translation> + </message> + <message> <source>Redo</source> + <comment>Default text for redo action</comment> <translation>やり直す</translation> </message> </context> @@ -6939,6 +7070,10 @@ Please choose a different file name.</source> <source>File does not exist</source> <translation>ファイルが存在しません</translation> </message> + <message> + <source>Loading is handled by the media engine</source> + <translation>メディアエンジンで読み込みを行います</translation> + </message> </context> <context> <name>QWebPage</name> @@ -6947,10 +7082,6 @@ Please choose a different file name.</source> <translation>リダイレクトの上限に達しました</translation> </message> <message> - <source>Bad HTTP request</source> - <translation>誤った HTTP のリクエストです</translation> - </message> - <message> <source>Submit</source> <comment>default label for Submit buttons in forms on web pages</comment> <translation>送信</translation> @@ -6981,6 +7112,11 @@ Please choose a different file name.</source> <translation>ファイルが選択されていません</translation> </message> <message> + <source>Details</source> + <comment>text to display in <details> tag when it has no <summary> child</comment> + <translation>詳細</translation> + </message> + <message> <source>Open in New Window</source> <comment>Open in New Window context menu item</comment> <translation>新しいウィンドウで開く</translation> @@ -7011,6 +7147,61 @@ Please choose a different file name.</source> <translation>画像をコピー</translation> </message> <message> + <source>Copy Image Address</source> + <comment>Copy Image Address menu item</comment> + <translation>画像のアドレスをコピー</translation> + </message> + <message> + <source>Open Video</source> + <comment>Open Video in New Window</comment> + <translation>ビデオを開く</translation> + </message> + <message> + <source>Open Audio</source> + <comment>Open Audio in New Window</comment> + <translation>オーディオを開く</translation> + </message> + <message> + <source>Copy Video</source> + <comment>Copy Video Link Location</comment> + <translation>ビデオをコピー</translation> + </message> + <message> + <source>Copy Audio</source> + <comment>Copy Audio Link Location</comment> + <translation>オーディオをコピー</translation> + </message> + <message> + <source>Toggle Controls</source> + <comment>Toggle Media Controls</comment> + <translation>コントロールの表示の切替</translation> + </message> + <message> + <source>Toggle Loop</source> + <comment>Toggle Media Loop Playback</comment> + <translation>ループのオン/オフの切替</translation> + </message> + <message> + <source>Enter Fullscreen</source> + <comment>Switch Video to Fullscreen</comment> + <translation>フルスクリーン表示</translation> + </message> + <message> + <source>Play</source> + <comment>Play</comment> + <translation>再生</translation> + </message> + <message> + <source>Pause</source> + <comment>Pause</comment> + <translation>一時停止</translation> + </message> + <message> + <source>Mute</source> + <comment>Mute</comment> + <translation>ミュート</translation> + </message> + <message> <source>Open Frame</source> <comment>Open Frame in New Window context menu item</comment> <translation>フレームを新しいウィンドウで開く</translation> @@ -7051,6 +7242,11 @@ Please choose a different file name.</source> <translation>貼り付け</translation> </message> <message> + <source>Select All</source> + <comment>Select All context menu item</comment> + <translation>すべてを選択</translation> + </message> + <message> <source>No Guesses Found</source> <comment>No Guesses Found context menu item</comment> <translation>推測候補はありません</translation> @@ -7529,10 +7725,6 @@ Please choose a different file name.</source> <translation>文章の末尾にカーソルを移動</translation> </message> <message> - <source>Select all</source> - <translation>すべてを選択</translation> - </message> - <message> <source>Select to the next character</source> <translation>次の文字を選択</translation> </message> @@ -8030,6 +8222,101 @@ Please choose a different file name.</source> </message> </context> <context> + <name>QmlJSDebugger::LiveSelectionTool</name> + <message> + <source>Items</source> + <translation>アイテム</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::QmlToolBar</name> + <message> + <source>Inspector Mode</source> + <translation>インスペクタモード</translation> + </message> + <message> + <source>Play/Pause Animations</source> + <translation>アニメーションの再生/一時停止</translation> + </message> + <message> + <source>Select</source> + <translation>選択</translation> + </message> + <message> + <source>Select (Marquee)</source> + <translation type="unfinished">セレクト (Marquee)</translation> + </message> + <message> + <source>Zoom</source> + <translation>ズーム</translation> + </message> + <message> + <source>Color Picker</source> + <translation>カラーピッカー</translation> + </message> + <message> + <source>Apply Changes to QML Viewer</source> + <translation>変更を QML Viewer へ適用する</translation> + </message> + <message> + <source>Apply Changes to Document</source> + <translation>変更をドキュメントへ適用する</translation> + </message> + <message> + <source>Tools</source> + <translation>ツール</translation> + </message> + <message> + <source>1x</source> + <translation>1倍</translation> + </message> + <message> + <source>0.5x</source> + <translation>0.5倍</translation> + </message> + <message> + <source>0.25x</source> + <translation>0.25倍</translation> + </message> + <message> + <source>0.125x</source> + <translation>0.125倍</translation> + </message> + <message> + <source>0.1x</source> + <translation>0.1倍</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ToolBarColorBox</name> + <message> + <source>Copy Color</source> + <translation>色をコピー</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ToolBox</name> + <message> + <source>Qt Quick Toolbox</source> + <translation>Qt Quick ツールボックス</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ZoomTool</name> + <message> + <source>Zoom to &100%</source> + <translation>&100% 表示</translation> + </message> + <message> + <source>Zoom In</source> + <translation>拡大</translation> + </message> + <message> + <source>Zoom Out</source> + <translation>縮小</translation> + </message> +</context> +<context> <name>QtXmlPatterns</name> <message> <source>%1 is an unsupported encoding.</source> @@ -8913,7 +9200,7 @@ Please choose a different file name.</source> </message> <message> <source>Complex type %1 cannot be derived from base type %2%3.</source> - <translation>複合型 %1 は基底型 %2 から派生する事はできません %3。</translation> + <translation>複合型 %1 は基底型 %2%3 から派生する事はできません。</translation> </message> <message> <source>Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3.</source> diff --git a/translations/qtconfig_ja.ts b/translations/qtconfig_ja.ts index 8440389..332eb8b 100644 --- a/translations/qtconfig_ja.ts +++ b/translations/qtconfig_ja.ts @@ -5,23 +5,23 @@ <name>MainWindow</name> <message> <source><p><b><font size+=2>Appearance</font></b></p><hr><p>Use this tab to customize the appearance of your Qt applications.</p><p>You can select the default GUI Style from the drop down list and customize the colors.</p><p>Any GUI Style plugins in your plugin path will automatically be added to the list of built-in Qt styles. (See the Library Paths tab for information on adding new plugin paths.)</p><p>When you choose 3-D Effects and Window Background colors, the Qt Configuration program will automatically generate a palette for you. To customize colors further, press the Tune Palette button to open the advanced palette editor.<p>The Preview Window shows what the selected Style and colors look like.</source> - <translation type="unfinished"></translation> + <translation><p><b><font size+=2>外観</font></b></p><hr><p>このタブでは Qt アプリケーションの外観をカスタマイズします。</p><p>ドロップダウンリストからデフォルトの GUI スタイルを選択して、その色をカスタマイズできます。</p><p>プラグインパスにある全てのプラグインが自動的にQt のビルトインスタイルのリストに追加されます。 (See the Library Paths tab for information on adding new plugin paths.)</p><p>3D 効果とウィンドウの背景色を選択した場合、Qt 設定ツールは自動的にパレットを生成します。さらに色をカスタマイズするには、パレットの調整ボタンを押して拡張パレットエディタを開いてください。<p>プレビューウィンドウでは選択したスタイルと色がどのように見えるかを確認できます。</translation> </message> <message> <source><p><b><font size+=2>Fonts</font></b></p><hr><p>Use this tab to select the default font for your Qt applications. The selected font is shown (initially as 'Sample Text') in the line edit below the Family, Style and Point Size drop down lists.</p><p>Qt has a powerful font substitution feature that allows you to specify a list of substitute fonts. Substitute fonts are used when a font cannot be loaded, or if the specified font doesn't have a particular character.<p>For example, if you select the font Lucida, which doesn't have Korean characters, but need to show some Korean text using the Mincho font family you can do so by adding Mincho to the list. Once Mincho is added, any Korean characters that are not found in the Lucida font will be taken from the Mincho font. Because the font substitutions are lists, you can also select multiple families, such as Song Ti (for use with Chinese text).</source> - <translation type="unfinished"></translation> + <translation><p><b><font size+=2>フォント</font></b></p><hr><p>このタブでは Qt アプリケーションのデフォルトフォントの設定を行います。選択したフォントはファミリー、スタイル、ポイントサイズのドロップダウンリストの下にあるラインエディタに(初期値は「テキストのサンプル」で)表示されます。</p><p>Qt には強力なフォント置換機能があり、置換するフォントのリストを指定することができます。置換するフォントはフォントが読み込めない場合や指定したフォントが特定の文字を持たない場合に使用されます。</p><p>例えば、漢字を持たない Lucida フォントを選択した場合に、リストに明朝体のフォントを追加すれば漢字からなる文字列を明朝体で表示することができます。明朝体のフォントが追加してある場合、Lucida フォントに含まれない全ての漢字が明朝体のフォントから用いられます。フォントの置換機能では、ハングル等の複数のファミリーを指定することができます。</translation> </message> <message> <source><p><b><font size+=2>Interface</font></b></p><hr><p>Use this tab to customize the feel of your Qt applications.</p><p>If the Resolve Symlinks checkbox is checked Qt will follow symlinks when handling URLs. For example, in the file dialog, if this setting is turned on and /usr/tmp is a symlink to /var/tmp, entering the /usr/tmp directory will cause the file dialog to change to /var/tmp. With this setting turned off, symlinks are not resolved or followed.</p><p>The Global Strut setting is useful for people who require a minimum size for all widgets (e.g. when using a touch panel or for users who are visually impaired). Leaving the Global Strut width and height at 0 will disable the Global Strut feature</p><p>XIM (Extended Input Methods) are used for entering characters in languages that have large character sets, for example, Chinese and Japanese.</source> - <translation type="unfinished"></translation> + <translation><p><b><font size+=2>インターフェース</font></b></p><hr><p>このタブでは Qt アプリケーションの操作感をカスタマイズします。</p><p>「URL でのシンボリックリンクを解決」チェックボックスがチェックされている場合、Qt が URL を処理する際にシンボリックリンクを追跡します。例えば、この設定がオンで /usr/tmp が /var/tmp へのシンボリックリンクの場合、ファイルダイアログで /usr/tmp を表示しようとすると /var/tmp へ移動します。この設定がオフの場合、シンボリックリンクの解決や追跡は行われません。</p><p>「グローバルな設定」は全てのウィジェットに最小サイズが必要な場合(例えば、タッチパネルを使用していたり、目の不自由な方々など)に有用です。幅の最小値と高さの最小値を0にするとこの機能が無効になります。</p><p>XIM (インプットメソッド) は中国語や日本語のような、多数の文字を持つ言語で文字の入力に用いられています。</translation> </message> <message> <source><p><b><font size+=2>Printer</font></b></p><hr><p>Use this tab to configure the way Qt generates output for the printer.You can specify if Qt should try to embed fonts into its generated output.If you enable font embedding, the resulting postscript will be more portable and will more accurately reflect the visual output on the screen; however the resulting postscript file size will be bigger.<p>When using font embedding you can select additional directories where Qt should search for embeddable font files. By default, the X server font path is used.</source> - <translation type="unfinished"></translation> + <translation><p><b><font size+=2>プリンタ</font></b></p><hr><p>このタブでは Qt が印刷する際に生成する出力の設定を行います。Qt が生成された印刷物にフォントを埋め込もうとするかどうかを指定できます。フォントを埋め込む場合、生成された PostScript の可搬性が増し、その見た目は画面上の表示をより正確に反映したものとなります。その反面、生成された PostScript ファイルのサイズが大きくなります。<p>フォントを埋め込む場合、Qt が埋め込むフォントファイルを検索するディレクトリを追加で選択することができます。デフォルトでは X サーバーのフォントパスが使われます。</translation> </message> <message> <source><p><b><font size+=2>Phonon</font></b></p><hr><p>Use this tab to configure the Phonon GStreamer multimedia backend. <p>It is reccommended to leave all settings on "Auto" to let Phonon determine your settings automatically.</source> - <translation type="unfinished"></translation> + <translation><p><b><font size+=2>Phonon</font></b></p><hr><p>このタブでは Phonon の GStreamer マルチメディアバックエンドの設定を行います。<p>全ての設定を "自動" にして Phonon に自動的に設定させることを推奨します。</translation> </message> <message> <source>Desktop Settings (Default)</source> @@ -36,6 +36,10 @@ <translation>On The Spot</translation> </message> <message> + <source>Unknown</source> + <translation>不明</translation> + </message> + <message> <source>Auto (default)</source> <translation>自動(デフォルト)</translation> </message> @@ -92,6 +96,10 @@ <translation>保存中…</translation> </message> <message> + <source>Saved changes.</source> + <translation>変更を保存しました。</translation> + </message> + <message> <source>Over The Spot</source> <translation>Over The Spot</translation> </message> @@ -124,25 +132,6 @@ <translation>変更内容を設定に保存しますか?</translation> </message> <message> - <source>&Yes</source> - <translation>はい(&Y)</translation> - </message> - <message> - <source>&No</source> - <translation>いいえ(&N)</translation> - </message> - <message> - <source>&Cancel</source> - <translation>キャンセル(&C)</translation> - </message> -</context> -<context> - <name>MainWindowBase</name> - <message> - <source>Qt Configuration</source> - <translation>Qt 設定ツール</translation> - </message> - <message> <source>Appearance</source> <translation>外観</translation> </message> @@ -179,8 +168,8 @@ <translation>パレットの設定</translation> </message> <message> - <source>&3-D Effects:</source> - <translation>&3D エフェクト:</translation> + <source>&Button Background:</source> + <translation>ボタンのバックグラウンド(&B):</translation> </message> <message> <source>Window Back&ground:</source> @@ -188,11 +177,11 @@ </message> <message> <source>&Tune Palette...</source> - <translation>パレットを調整(&T)...</translation> + <translation>パレットの調整(&T)...</translation> </message> <message> <source>Please use the KDE Control Center to set the palette.</source> - <translation>KDE のコントロールセンターでパレットの設定をしてください。</translation> + <translation>KDE のシステム設定でパレットの設定をしてください。</translation> </message> <message> <source>Fonts</source> @@ -284,7 +273,7 @@ </message> <message> <source>Resolve symlinks in URLs</source> - <translation>URL のシンボリックリンクの解決</translation> + <translation>URL でのシンボリックリンクを解決</translation> </message> <message> <source>GUI Effects</source> @@ -328,7 +317,7 @@ </message> <message> <source>Global Strut</source> - <translation>Global Strut</translation> + <translation>グローバルな設定</translation> </message> <message> <source>Minimum &Width:</source> @@ -351,22 +340,6 @@ <translation>XIM のインプットスタイル:</translation> </message> <message> - <source>On The Spot</source> - <translation>On The Spot</translation> - </message> - <message> - <source>Over The Spot</source> - <translation>Over The Spot</translation> - </message> - <message> - <source>Off The Spot</source> - <translation>Off The Spot</translation> - </message> - <message> - <source>Root</source> - <translation>Root</translation> - </message> - <message> <source>Default Input Method:</source> <translation>デフォルトのインプットメソッド:</translation> </message> @@ -411,32 +384,16 @@ <translation>ウェブサイト:</translation> </message> <message> - <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html></source> - <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html></translation> + <source><a href="http://phonon.kde.org">http://phonon.kde.org/</a></source> + <translation><a href="http://phonon.kde.org">http://phonon.kde.org/</a></translation> </message> <message> <source>About GStreamer</source> <translation>GStreamer について</translation> </message> <message> - <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html></source> - <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html></translation> + <source><a href="http://gstreamer.freedesktop.org/">http://gstreamer.freedesktop.org/</a></source> + <translation><a href="http://gstreamer.freedesktop.org/">http://gstreamer.freedesktop.org/</a></translation> </message> <message> <source>GStreamer backend settings</source> @@ -491,6 +448,10 @@ p, li { white-space: pre-wrap; } <translation>終了</translation> </message> <message> + <source>Ctrl+Q</source> + <translation>Ctrl+Q</translation> + </message> + <message> <source>&About</source> <translation>Qt 設定ツールについて(&A)</translation> </message> @@ -508,16 +469,12 @@ p, li { white-space: pre-wrap; } </message> </context> <context> - <name>PaletteEditorAdvancedBase</name> + <name>PaletteEditorAdvanced</name> <message> <source>Tune Palette</source> <translation>パレットの調整</translation> </message> <message> - <source><b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p></source> - <translation><b>パレットの編集</b><p>現在のウィジェットやフォームのパレットを変更してください。</p><p>自動生成されたパレットを使用するか、それぞれのグループ/役割に対して色を選択してください。</p><p>パレットの内容のプレビューセクションにある様々なウィジェットのレイアウトで確認できます。</p></translation> - </message> - <message> <source>Select &Palette:</source> <translation>パレットの選択(&P):</translation> </message> @@ -566,24 +523,36 @@ p, li { white-space: pre-wrap; } <translation>ウィンドウテキスト</translation> </message> <message> - <source>Button</source> - <translation>ボタン</translation> - </message> - <message> <source>Base</source> <translation>ベース</translation> </message> <message> + <source>AlternateBase</source> + <translation>その他のベース</translation> + </message> + <message> + <source>ToolTipBase</source> + <translation>ツールチップのベース</translation> + </message> + <message> + <source>ToolTipText</source> + <translation>ツールチップのテキスト</translation> + </message> + <message> <source>Text</source> <translation>テキスト</translation> </message> <message> - <source>BrightText</source> - <translation>明るいテキスト</translation> + <source>Button</source> + <translation>ボタン</translation> </message> <message> <source>ButtonText</source> - <translation>ボタンテキスト</translation> + <translation>ボタンのテキスト</translation> + </message> + <message> + <source>BrightText</source> + <translation>明るいテキスト</translation> </message> <message> <source>Highlight</source> @@ -591,29 +560,25 @@ p, li { white-space: pre-wrap; } </message> <message> <source>HighlightedText</source> - <translation>ハイライトのテキスト</translation> + <translation>ハイライトされたテキスト</translation> </message> <message> - <source>&Select Color:</source> - <translation>色の選択(&S):</translation> + <source>Link</source> + <translation>リンク</translation> </message> <message> - <source>Choose a color</source> - <translation>色を選択してください</translation> + <source>LinkVisited</source> + <translation>訪問済みのリンク</translation> </message> <message> - <source>Choose a color for the selected central color role.</source> - <translation>選択された中央部の色の役割に使用する色を選択してください。</translation> + <source>&Select Color:</source> + <translation>色の選択(&S):</translation> </message> <message> <source>3-D shadow &effects</source> <translation>3Dの影の効果(&E)</translation> </message> <message> - <source>Build &from button color</source> - <translation>ボタンの色から構築する(&F)</translation> - </message> - <message> <source>Generate shadings</source> <translation>影を生成する</translation> </message> @@ -622,6 +587,10 @@ p, li { white-space: pre-wrap; } <translation>3D効果の色をボタンの色から計算するにはチェックしてください。</translation> </message> <message> + <source>Build &from button color</source> + <translation>ボタンの色から構築する(&F)</translation> + </message> + <message> <source>Choose 3D-effect color role</source> <translation>3D効果の色の役割の選択</translation> </message> @@ -654,24 +623,16 @@ p, li { white-space: pre-wrap; } <translation>色の選択(&L):</translation> </message> <message> - <source>Choose a color for the selected effect color role.</source> - <translation>選択の効果の色の役割に使用する色を選択してください。</translation> - </message> - <message> - <source>OK</source> - <translation>OK</translation> - </message> - <message> - <source>Close dialog and apply all changes.</source> - <translation>全ての変更を適用してダイアログを閉じる。</translation> + <source>Choose a color</source> + <translation>色を選択してください</translation> </message> <message> - <source>Cancel</source> - <translation>キャンセル</translation> + <source>Choose a color for the selected central color role.</source> + <translation>選択された中央部の色の役割に使用する色を選択してください。</translation> </message> <message> - <source>Close dialog and discard all changes.</source> - <translation>全ての変更を破棄してダイアログを閉じる。</translation> + <source>Choose a color for the selected effect color role.</source> + <translation>選択の効果の色の役割に使用する色を選択してください。</translation> </message> </context> <context> @@ -682,14 +643,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> - <name>PreviewWidgetBase</name> + <name>PreviewWidget</name> <message> <source>Preview Window</source> <translation>プレビューウィンドウ</translation> </message> <message> - <source>ButtonGroup</source> - <translation>ボタングループ</translation> + <source>GroupBox</source> + <translation>グループボックス</translation> </message> <message> <source>RadioButton1</source> @@ -704,8 +665,8 @@ p, li { white-space: pre-wrap; } <translation>ラジオボタン3</translation> </message> <message> - <source>ButtonGroup2</source> - <translation>ボタングループ2</translation> + <source>GroupBox2</source> + <translation>グループボックス2</translation> </message> <message> <source>CheckBox1</source> @@ -728,18 +689,9 @@ p, li { white-space: pre-wrap; } <translation>プッシュボタン</translation> </message> <message> - <source><p> -<a href="http://qt.nokia.com">http://qt.nokia.com</a> -</p> -<p> -<a href="http://www.kde.org">http://www.kde.org</a> -</p></source> - <translation><p> -<a href="http://qt.nokia.com">http://qt.nokia.com</a> -</p> -<p> -<a href="http://www.kde.org">http://www.kde.org</a> -</p></translation> + <source><p><a href="http://qt.nokia.com">http://qt.nokia.com</a></p> +<p><a href="http://www.kde.org">http://www.kde.org</a></p></source> + <translation></translation> </message> </context> </TS> -- cgit v0.12 From a1c224f151f1fd0003198e4783bef50fa9338a49 Mon Sep 17 00:00:00 2001 From: Sergey Belyashov <Sergey.Belyashov@gmail.com> Date: Fri, 12 Aug 2011 19:50:16 +0200 Subject: Russian translation update Merge-request: 1303 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> --- translations/assistant_ru.ts | 193 +++++++++++++-------- translations/designer_ru.ts | 137 +++++++++++---- translations/qt_ru.ts | 402 +++++++++++++++++++++++++++++++++++++++---- translations/qtconfig_ru.ts | 243 +++++++++++--------------- 4 files changed, 687 insertions(+), 288 deletions(-) diff --git a/translations/assistant_ru.ts b/translations/assistant_ru.ts index b16f940..02eddc0 100644 --- a/translations/assistant_ru.ts +++ b/translations/assistant_ru.ts @@ -259,6 +259,10 @@ Reason: <translation>Адрес</translation> </message> <message> + <source>Toolbar Menu</source> + <translation>Меню панели инструментов</translation> + </message> + <message> <source>Bookmarks Menu</source> <translation>Меню закладок</translation> </message> @@ -285,41 +289,9 @@ Reason: <context> <name>CentralWidget</name> <message> - <source>Add new page</source> - <translation>Открыть новую страницу</translation> - </message> - <message> - <source>Close current page</source> - <translation>Закрыть текущую страницу</translation> - </message> - <message> <source>Print Document</source> <translation>Печать документа</translation> </message> - <message> - <source>unknown</source> - <translation>безымянная вкладка</translation> - </message> - <message> - <source>Add New Page</source> - <translation>Открыть новую страницу</translation> - </message> - <message> - <source>Close This Page</source> - <translation>Закрыть данную страницу</translation> - </message> - <message> - <source>Close Other Pages</source> - <translation>Закрыть остальные страницы</translation> - </message> - <message> - <source>Add Bookmark for this Page...</source> - <translation>Добавить закладку для этой страницы...</translation> - </message> - <message> - <source>Search</source> - <translation>Поиск</translation> - </message> </context> <context> <name>CmdLineParser</name> @@ -655,6 +627,49 @@ Reason: </message> </context> <context> + <name>GlobalActions</name> + <message> + <source>&Back</source> + <translation>&Назад</translation> + </message> + <message> + <source>&Forward</source> + <translation>&Вперёд</translation> + </message> + <message> + <source>&Home</source> + <translation>&Домой</translation> + </message> + <message> + <source>ALT+Home</source> + <translation></translation> + </message> + <message> + <source>Zoom &in</source> + <translation>У&величить</translation> + </message> + <message> + <source>Zoom &out</source> + <translation>У&меньшить</translation> + </message> + <message> + <source>&Copy selected Text</source> + <translation>&Копировать выделенный текст</translation> + </message> + <message> + <source>&Print...</source> + <translation>&Печать...</translation> + </message> + <message> + <source>&Find in Text...</source> + <translation>П&оиск в тексте...</translation> + </message> + <message> + <source>&Find</source> + <translation>&Поиск</translation> + </message> +</context> +<context> <name>HelpEngineWrapper</name> <message> <source>Unfiltered</source> @@ -679,16 +694,28 @@ Reason: <translation><title>Ошибка 404...</title><div align="center"><br><br><h1>Страница не найдена</h1><br><h3>'%1'</h3></div></translation> </message> <message> + <source>Open Link</source> + <translation>Открыть ссылку</translation> + </message> + <message> <source>Copy &Link Location</source> <translation>Копировать &адрес ссылки</translation> </message> <message> + <source>Copy</source> + <translation>Копировать</translation> + </message> + <message> + <source>Reload</source> + <translation>Перезагрузить</translation> + </message> + <message> <source>Open Link in New Tab Ctrl+LMB</source> <translation>Открыть ссылку в новой вкладке Ctrl+LMB</translation> </message> <message> - <source>Open Link in New Tab</source> - <translation>Открыть ссылку в новой вкладке</translation> + <source>Open Link in New Page</source> + <translation>Открыть ссылку в новой странице</translation> </message> </context> <context> @@ -899,10 +926,6 @@ Reason: <translation>Предпросмотр печати...</translation> </message> <message> - <source>&Print...</source> - <translation>&Печать...</translation> - </message> - <message> <source>New &Tab</source> <translation>Новая &вкладка</translation> </message> @@ -923,18 +946,6 @@ Reason: <translation>&Правка</translation> </message> <message> - <source>&Copy selected Text</source> - <translation>&Копировать выделенный текст</translation> - </message> - <message> - <source>&Find in Text...</source> - <translation>П&оиск в тексте...</translation> - </message> - <message> - <source>&Find</source> - <translation>&Поиск</translation> - </message> - <message> <source>Find &Next</source> <translation>Найти &следующее</translation> </message> @@ -951,14 +962,6 @@ Reason: <translation>&Вид</translation> </message> <message> - <source>Zoom &in</source> - <translation>У&величить</translation> - </message> - <message> - <source>Zoom &out</source> - <translation>У&меньшить</translation> - </message> - <message> <source>Normal &Size</source> <translation>Нормальный р&азмер</translation> </message> @@ -991,22 +994,6 @@ Reason: <translation>&Перейти</translation> </message> <message> - <source>&Home</source> - <translation>&Домой</translation> - </message> - <message> - <source>ALT+Home</source> - <translation></translation> - </message> - <message> - <source>&Back</source> - <translation>&Назад</translation> - </message> - <message> - <source>&Forward</source> - <translation>&Вперёд</translation> - </message> - <message> <source>Sync with Table of Contents</source> <translation>Синхронизировать с оглавлением</translation> </message> @@ -1047,6 +1034,22 @@ Reason: <translation>&Справка</translation> </message> <message> + <source>Open Pages</source> + <translation>Открытые страницы</translation> + </message> + <message> + <source>Bookmark Toolbar</source> + <translation>Панель закладок</translation> + </message> + <message> + <source>E&xit</source> + <translation>В&ыход</translation> + </message> + <message> + <source>ALT+P</source> + <translation></translation> + </message> + <message> <source>About...</source> <translation>О программе...</translation> </message> @@ -1104,6 +1107,17 @@ Reason: </message> </context> <context> + <name>OpenPagesWidget</name> + <message> + <source>Close %1</source> + <translation>Закрыть %1</translation> + </message> + <message> + <source>Close All Except %1</source> + <translation>Закрыть всё, кроме %1</translation> + </message> +</context> +<context> <name>OutputPage</name> <message> <source>Form</source> @@ -1322,6 +1336,14 @@ Do you want to remove it?</source> <source>Blank Page</source> <translation>Пустая страница</translation> </message> + <message> + <source>Appearance</source> + <translation>Внешний вид</translation> + </message> + <message> + <source>Show tabs for each individual page</source> + <translation>Показывать вкладки для каждой страницы</translation> + </message> </context> <context> <name>QCollectionGenerator</name> @@ -1513,6 +1535,29 @@ qhelpgenerator <файл-проекта-справки> [ОПЦИИ] </message> </context> <context> + <name>TabBar</name> + <message> + <source>(Untitled)</source> + <translation>(Без названия)</translation> + </message> + <message> + <source>New &Tab</source> + <translation>Новая &вкладка</translation> + </message> + <message> + <source>&Close Tab</source> + <translation>&Закрыть вкладку</translation> + </message> + <message> + <source>Close Other Tabs</source> + <translation>Закрыть остальные вкладки</translation> + </message> + <message> + <source>Add Bookmark for this Page...</source> + <translation>Добавить закладку для этой страницы...</translation> + </message> +</context> +<context> <name>TopicChooser</name> <message> <source>Choose a topic for <b>%1</b>:</source> diff --git a/translations/designer_ru.ts b/translations/designer_ru.ts index fec098c..471a366 100644 --- a/translations/designer_ru.ts +++ b/translations/designer_ru.ts @@ -406,10 +406,6 @@ <translation>Страница</translation> </message> <message> - <source>page</source> - <translation>страница</translation> - </message> - <message> <source>Insert Page</source> <translation>Вставить страницу</translation> </message> @@ -462,10 +458,6 @@ <translation>Вставить дочернее окно</translation> </message> <message> - <source>subwindow</source> - <translation>дочернее окно</translation> - </message> - <message> <source>Subwindow</source> <translation>Дочернее окно</translation> </message> @@ -506,6 +498,10 @@ <translation>Изменить компоновку '%1' с %2 на %3</translation> </message> <message> + <source>Change layout alignment</source> + <translation>Изменить выравнивание компоновщика</translation> + </message> + <message> <source>Set action text</source> <translation>Установить текст действия</translation> </message> @@ -1822,7 +1818,7 @@ Container pages should only be added by specifying them in XML returned by the d </message> <message> <source>F&orm</source> - <translation>Ф&орма</translation> + <translation>Фор&ма</translation> </message> <message> <source>Preview in</source> @@ -1837,10 +1833,6 @@ Container pages should only be added by specifying them in XML returned by the d <translation>&Справка</translation> </message> <message> - <source>Edit</source> - <translation>Правка</translation> - </message> - <message> <source>Toolbars</source> <translation>Панель инструментов</translation> </message> @@ -1861,6 +1853,10 @@ Container pages should only be added by specifying them in XML returned by the d <translation>&Вид</translation> </message> <message> + <source>&Edit</source> + <translation>&Правка</translation> + </message> + <message> <source>&Settings</source> <translation>&Настройки</translation> </message> @@ -1870,7 +1866,7 @@ Container pages should only be added by specifying them in XML returned by the d </message> <message> <source>If you do not review your documents, all your changes will be lost.</source> - <translation type="unfinished">Если не просматривать изменения, все изменения будут потеряны.</translation> + <translation>Если не просматривать изменения, все они будут потеряны.</translation> </message> <message> <source>Discard Changes</source> @@ -3743,6 +3739,10 @@ Do you want overwrite the template?</source> <translation>Унаследованная</translation> </message> <message> + <source>[Theme] %1</source> + <translation>[Тема] %1</translation> + </message> + <message> <source>Horizontal</source> <translation>Горизонтальное</translation> </message> @@ -3751,6 +3751,10 @@ Do you want overwrite the template?</source> <translation>Вертикальное</translation> </message> <message> + <source>Theme</source> + <translation>Тема</translation> + </message> + <message> <source>Normal Off</source> <translation type="unfinished">Нормальный, выкл</translation> </message> @@ -3973,15 +3977,15 @@ Do you want overwrite the template?</source> </message> <message> <source>Key Move</source> - <translation type="unfinished">Перемещение клавишей</translation> + <translation>Перемещение клавишей</translation> </message> <message> <source>Key Resize</source> - <translation type="unfinished">Изменение размера клавишей</translation> + <translation>Изменение размера клавишей</translation> </message> <message numerus="yes"> <source>Paste %n action(s)</source> - <translation type="unfinished"> + <translation> <numerusform>Вставлено %n действие</numerusform> <numerusform>Вставлено %n действия</numerusform> <numerusform>Вставлено %n действий</numerusform> @@ -3989,7 +3993,7 @@ Do you want overwrite the template?</source> </message> <message numerus="yes"> <source>Paste %n widget(s)</source> - <translation type="unfinished"> + <translation> <numerusform>Вставлен %n виджет</numerusform> <numerusform>Вставлено %n виджета</numerusform> <numerusform>Вставлено %n виджета</numerusform> @@ -3997,7 +4001,7 @@ Do you want overwrite the template?</source> </message> <message> <source>Paste (%1 widgets, %2 actions)</source> - <translation type="unfinished">Вставлено (%1 виджетов, %2 действий)</translation> + <translation>Вставлено (%1 виджетов, %2 действий)</translation> </message> <message> <source>Cannot paste widgets. Designer could not find a container without a layout to paste into.</source> @@ -4029,7 +4033,7 @@ Do you want overwrite the template?</source> </message> <message> <source>Drop widget</source> - <translation type="unfinished">Вставка виджета</translation> + <translation>Вставка виджета</translation> </message> <message> <source>A QMainWindow-based form does not contain a central widget.</source> @@ -4339,6 +4343,17 @@ Do you want overwrite the template?</source> </message> </context> <context> + <name>qdesigner_internal::IconThemeDialog</name> + <message> + <source>Set Icon From Theme</source> + <translation>Установить значок из темы</translation> + </message> + <message> + <source>Input icon name from the current theme:</source> + <translation>Имя исходного значка из текущей темы:</translation> + </message> +</context> +<context> <name>qdesigner_internal::ItemListEditor</name> <message> <source>Properties &<<</source> @@ -4488,20 +4503,24 @@ Do you want overwrite the template?</source> <translation>&Значок:</translation> </message> <message> - <source>Shortcut:</source> - <translation>Горячая клавиша:</translation> + <source>...</source> + <translation>...</translation> </message> <message> - <source>Checkable:</source> - <translation>Триггерное:</translation> + <source>T&oolTip:</source> + <translation>Подска&зка:</translation> </message> <message> - <source>ToolTip:</source> - <translation>Подсказка:</translation> + <source>Icon th&eme:</source> + <translation>Тема зна&чков:</translation> </message> <message> - <source>...</source> - <translation>...</translation> + <source>&Checkable:</source> + <translation>Т&риггерное:</translation> + </message> + <message> + <source>&Shortcut:</source> + <translation>&Горячая клавиша:</translation> </message> </context> <context> @@ -4631,7 +4650,7 @@ Please select another name.</source> </message> <message> <source>Global include</source> - <translation type="unfinished">Глобальное включение</translation> + <translation>Глобальное включение</translation> </message> <message> <source>Reset</source> @@ -4688,15 +4707,15 @@ Please select another name.</source> </message> <message> <source>Show Details</source> - <translation type="unfinished">Показывать детали</translation> + <translation>Показывать детали</translation> </message> <message> <source>Compute Details</source> - <translation type="unfinished">Рассчитывать детали</translation> + <translation>Рассчитывать детали</translation> </message> <message> <source>Quick</source> - <translation type="unfinished">Быстрый</translation> + <translation>Быстрый</translation> </message> <message> <source>Preview</source> @@ -4752,6 +4771,10 @@ Please select another name.</source> <translation>Выбрать файл...</translation> </message> <message> + <source>Set Icon From Theme...</source> + <translation>Установить значок из темы...</translation> + </message> + <message> <source>Copy Path</source> <translation>Скопировать путь</translation> </message> @@ -4763,6 +4786,10 @@ Please select another name.</source> <source>...</source> <translation>...</translation> </message> + <message> + <source>[Theme] %1</source> + <translation>[Тема] %1</translation> + </message> </context> <context> <name>qdesigner_internal::PlainTextEditorDialog</name> @@ -4954,7 +4981,7 @@ ate the goose who was loose.</source> </message> <message> <source>Global include</source> - <translation type="unfinished">Глобальное включение</translation> + <translation>Глобальное включение</translation> </message> <message> <source>Usage</source> @@ -5000,7 +5027,7 @@ ate the goose who was loose.</source> </message> <message> <source>Color Groups</source> - <translation type="unfinished">Цветовые группы</translation> + <translation>Цветовые группы</translation> </message> <message> <source>Tree View</source> @@ -5008,7 +5035,7 @@ ate the goose who was loose.</source> </message> <message> <source>Drop Down Button View</source> - <translation type="unfinished">Вид выпадающего списка</translation> + <translation>Вид выпадающего списка</translation> </message> <message> <source>String...</source> @@ -5085,6 +5112,42 @@ Class: %2</source> <context> <name>qdesigner_internal::QDesignerTaskMenu</name> <message> + <source>Layout Alignment</source> + <translation>Выравнивание компоновщика</translation> + </message> + <message> + <source>No Horizontal Alignment</source> + <translation>Без горизонтального выравнивания</translation> + </message> + <message> + <source>Left</source> + <translation>По левому краю</translation> + </message> + <message> + <source>Center Horizontally</source> + <translation>По горизонтальному центру</translation> + </message> + <message> + <source>Right</source> + <translation>По правому краю</translation> + </message> + <message> + <source>No Vertical Alignment</source> + <translation>Без вертикального выравнивания</translation> + </message> + <message> + <source>Top</source> + <translation>По верхнему краю</translation> + </message> + <message> + <source>Center Vertically</source> + <translation>По вертикальному центру</translation> + </message> + <message> + <source>Bottom</source> + <translation>По нижнему краю</translation> + </message> + <message> <source>Change objectName...</source> <translation>Изменить objectName...</translation> </message> @@ -5352,6 +5415,10 @@ Class: %2</source> <source>Insert &Image</source> <translation>Вставить &изображение</translation> </message> + <message> + <source>Simplify Rich Text</source> + <translation>Упростить форматирование</translation> + </message> </context> <context> <name>qdesigner_internal::ScriptDialog</name> diff --git a/translations/qt_ru.ts b/translations/qt_ru.ts index d399b6d..19c0544 100644 --- a/translations/qt_ru.ts +++ b/translations/qt_ru.ts @@ -9,10 +9,21 @@ </message> </context> <context> + <name>Debugger::JSAgentWatchData</name> + <message> + <source>[Array of length %1]</source> + <translation>[Массив размером %1]</translation> + </message> + <message> + <source><undefined></source> + <translation><неопределено></translation> + </message> +</context> +<context> <name>FakeReply</name> <message> - <source>Fake error !</source> - <translation>Фиктивная ошибка !</translation> + <source>Fake error!</source> + <translation>Фиктивная ошибка!</translation> </message> <message> <source>Invalid URL</source> @@ -1062,6 +1073,14 @@ to <context> <name>QAccessibleButton</name> <message> + <source>Uncheck</source> + <translation>Выключить</translation> + </message> + <message> + <source>Check</source> + <translation>Включить</translation> + </message> + <message> <source>Press</source> <translation>Нажать</translation> </message> @@ -1722,10 +1741,6 @@ to <translation>Свойство псевдонима выходит за границы</translation> </message> <message> - <source>Invalid alias reference. An alias reference must be specified as <id> or <id>.<property></source> - <translation type="obsolete">Некорректная ссылка на псевдоним. Ссылка на псевдоним должна быть указана, как <id> или <id>.<property></translation> - </message> - <message> <source>Invalid alias reference. Unable to find id "%1"</source> <translation>Некорректная ссылка на псевдоним. Не удалось найти id «%1»</translation> </message> @@ -2455,6 +2470,10 @@ to <source>Cannot create %1 for output</source> <translation>Невозможно создать %1 для вывода</translation> </message> + <message> + <source>No file engine available or engine does not support UnMapExtension</source> + <translation>Нет файлового движка или он не поддерживает UnMapExtension</translation> + </message> </context> <context> <name>QFileDialog</name> @@ -3416,6 +3435,18 @@ Please verify the correct directory name was given.</source> <source>Cannot resolve symbol "%1" in %2: %3</source> <translation>Невозможно разрешить символ «%1» в %2: %3</translation> </message> + <message> + <source>'%1' is not an ELF object (%2)</source> + <translation>«%1» не является объектом ELF (%2)</translation> + </message> + <message> + <source>'%1' is not an ELF object</source> + <translation>«%1» не является объектом ELF</translation> + </message> + <message> + <source>'%1' is an invalid ELF object (%2)</source> + <translation>«%1» является неверным объектом ELF (%2)</translation> + </message> </context> <context> <name>QLineEdit</name> @@ -3513,6 +3544,10 @@ Please verify the correct directory name was given.</source> <source>%1: Unknown error %2</source> <translation>%1: Неизвестная ошибка %2</translation> </message> + <message> + <source>%1: Access denied</source> + <translation>%1: Доступ запрещён</translation> + </message> </context> <context> <name>QMYSQLDriver</name> @@ -3854,10 +3889,6 @@ Please verify the correct directory name was given.</source> <context> <name>QNetworkAccessDataBackend</name> <message> - <source>Operation not supported on %1</source> - <translation>Операция не поддерживается для %1</translation> - </message> - <message> <source>Invalid URI: %1</source> <translation>Некорректный URI: %1</translation> </message> @@ -3952,6 +3983,10 @@ Please verify the correct directory name was given.</source> <translation>Ошибка сетевой сессии.</translation> </message> <message> + <source>backend start error.</source> + <translation>ошибка запуска драйвера.</translation> + </message> + <message> <source>Temporary network failure.</source> <translation>Временная ошибка сети.</translation> </message> @@ -4145,6 +4180,10 @@ Please verify the correct directory name was given.</source> <source>PulseAudio Sound Server</source> <translation>Звуковой сервер PulseAudio</translation> </message> + <message> + <source>Host not found</source> + <translation>Узел не найден</translation> + </message> </context> <context> <name>QPPDOptionsModel</name> @@ -5446,16 +5485,16 @@ Please choose a different file name.</source> <translation>%1: системой наложены ограничения на размер</translation> </message> <message> + <source>%1: bad name</source> + <translation>%1: неверное имя</translation> + </message> + <message> <source>%1: not attached</source> <translation>%1: не приложенный</translation> </message> <message> <source>%1: invalid size</source> - <translation>%1: некорректный размер</translation> - </message> - <message> - <source>%1: key error</source> - <translation>%1: некорректный ключ</translation> + <translation>%1: неверный размер</translation> </message> <message> <source>%1: size query failed</source> @@ -6320,7 +6359,7 @@ Please choose a different file name.</source> </message> <message> <source>Flip</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Крышка</translation> </message> <message> <source>Ctrl</source> @@ -6681,6 +6720,121 @@ Please choose a different file name.</source> </message> </context> <context> + <name>QSymbianSocketEngine</name> + <message> + <source>Unable to initialize non-blocking socket</source> + <translation>Невозможно инициализировать не-блочный сокет</translation> + </message> + <message> + <source>Unable to initialize broadcast socket</source> + <translation>Невозможно инициализировать широковещательный сокет</translation> + </message> + <message> + <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> + <translation>Попытка использовать IPv6 на платформе, не поддерживающей IPv6</translation> + </message> + <message> + <source>The remote host closed the connection</source> + <translation>Удалённый узел закрыл соединение</translation> + </message> + <message> + <source>Network operation timed out</source> + <translation>Время на сетевую операцию истекло</translation> + </message> + <message> + <source>Out of resources</source> + <translation>Недостаточно ресурсов</translation> + </message> + <message> + <source>Unsupported socket operation</source> + <translation>Операция с сокетом не поддерживается</translation> + </message> + <message> + <source>Protocol type not supported</source> + <translation>Протокол не поддерживается</translation> + </message> + <message> + <source>Invalid socket descriptor</source> + <translation>Некорректный дескриптор сокета</translation> + </message> + <message> + <source>Host unreachable</source> + <translation>Узел недоступен</translation> + </message> + <message> + <source>Network unreachable</source> + <translation>Сеть недоступна</translation> + </message> + <message> + <source>Permission denied</source> + <translation>Доступ запрещён</translation> + </message> + <message> + <source>Connection timed out</source> + <translation>Время на соединение истекло</translation> + </message> + <message> + <source>Connection refused</source> + <translation>Отказано в соединении</translation> + </message> + <message> + <source>The bound address is already in use</source> + <translation>Адрес уже используется</translation> + </message> + <message> + <source>The address is not available</source> + <translation>Адрес недоступен</translation> + </message> + <message> + <source>The address is protected</source> + <translation>Адрес защищён</translation> + </message> + <message> + <source>Datagram was too large to send</source> + <translation>Датаграмма слишком большая для отправки</translation> + </message> + <message> + <source>Unable to send a message</source> + <translation>Невозможно отправить сообщение</translation> + </message> + <message> + <source>Unable to receive a message</source> + <translation>Невозможно получить сообщение</translation> + </message> + <message> + <source>Unable to write</source> + <translation>Невозможно записать</translation> + </message> + <message> + <source>Network error</source> + <translation>Ошибка сети</translation> + </message> + <message> + <source>Another socket is already listening on the same port</source> + <translation>Другой сокет уже прослушивает этот порт</translation> + </message> + <message> + <source>Operation on non-socket</source> + <translation>Операция с не-сокетом</translation> + </message> + <message> + <source>The proxy type is invalid for this operation</source> + <translation>Некорректный тип прокси-сервера для данной операции</translation> + </message> + <message> + <source>The address is invalid for this operation</source> + <translation>Данный адрес не допустим для этой операции</translation> + </message> + <message> + <source>The specified network session is not opened</source> + <translation>Указанная сетевая сессия не открыта</translation> + </message> + <message> + <source>Unknown error</source> + <translation>Неизвестная ошибка</translation> + </message> +</context> +<context> <name>QSystemSemaphore</name> <message> <source>%1: does not exist</source> @@ -6699,6 +6853,10 @@ Please choose a different file name.</source> <translation>%1: уже существует</translation> </message> <message> + <source>%1: name error</source> + <translation>%1: ошибка в имени</translation> + </message> + <message> <source>%1: unknown error %2</source> <translation>%1: неизвестная ошибка %2</translation> </message> @@ -6788,11 +6946,21 @@ Please choose a different file name.</source> <context> <name>QUndoGroup</name> <message> + <source>Undo %1</source> + <translation>Отменить %1</translation> + </message> + <message> <source>Undo</source> + <comment>Default text for undo action</comment> <translation>Отменить действие</translation> </message> <message> + <source>Redo %1</source> + <translation>Повторить %1</translation> + </message> + <message> <source>Redo</source> + <comment>Default text for redo action</comment> <translation>Повторить действие</translation> </message> </context> @@ -6806,11 +6974,21 @@ Please choose a different file name.</source> <context> <name>QUndoStack</name> <message> + <source>Undo %1</source> + <translation>Отменить %1</translation> + </message> + <message> <source>Undo</source> + <comment>Default text for undo action</comment> <translation>Отменить действие</translation> </message> <message> + <source>Redo %1</source> + <translation>Повторить %1</translation> + </message> + <message> <source>Redo</source> + <comment>Default text for redo action</comment> <translation>Повторить действие</translation> </message> </context> @@ -6887,6 +7065,10 @@ Please choose a different file name.</source> <source>File does not exist</source> <translation>Файл не существует</translation> </message> + <message> + <source>Loading is handled by the media engine</source> + <translation>Загрузка выполняется мультимедиа-подсистемой</translation> + </message> </context> <context> <name>QWebPage</name> @@ -6899,10 +7081,6 @@ Please choose a different file name.</source> <translation>Достигнут предел переадресации</translation> </message> <message> - <source>Bad HTTP request</source> - <translation>Некорректный HTTP-запрос</translation> - </message> - <message> <source>Scroll here</source> <translation>Прокрутить сюда</translation> </message> @@ -7023,10 +7201,6 @@ Please choose a different file name.</source> <translation>Переместить указатель в конец документа</translation> </message> <message> - <source>Select all</source> - <translation>Выделить всё</translation> - </message> - <message> <source>Select to the next character</source> <translation>Выделить до следующего символа</translation> </message> @@ -7173,6 +7347,11 @@ Please choose a different file name.</source> <translation>Файл не указан</translation> </message> <message> + <source>Details</source> + <comment>text to display in <details> tag when it has no <summary> child</comment> + <translation>Подробности</translation> + </message> + <message> <source>Open in New Window</source> <comment>Open in New Window context menu item</comment> <translation>Открыть в новом окне</translation> @@ -7203,6 +7382,61 @@ Please choose a different file name.</source> <translation>Копировать изображение</translation> </message> <message> + <source>Copy Image Address</source> + <comment>Copy Image Address menu item</comment> + <translation>Скопировать адрес изображения</translation> + </message> + <message> + <source>Open Video</source> + <comment>Open Video in New Window</comment> + <translation>Открыть видео</translation> + </message> + <message> + <source>Open Audio</source> + <comment>Open Audio in New Window</comment> + <translation>Открыть аудио</translation> + </message> + <message> + <source>Copy Video</source> + <comment>Copy Video Link Location</comment> + <translation>Скопировать видео</translation> + </message> + <message> + <source>Copy Audio</source> + <comment>Copy Audio Link Location</comment> + <translation>Скопировать аудио</translation> + </message> + <message> + <source>Toggle Controls</source> + <comment>Toggle Media Controls</comment> + <translation type="unfinished">Вкл/выкл управление</translation> + </message> + <message> + <source>Toggle Loop</source> + <comment>Toggle Media Loop Playback</comment> + <translation type="unfinished">Вкл/выкл зацикленность</translation> + </message> + <message> + <source>Enter Fullscreen</source> + <comment>Switch Video to Fullscreen</comment> + <translation>Полноэкранный режим</translation> + </message> + <message> + <source>Play</source> + <comment>Play</comment> + <translation>Воспроизвести</translation> + </message> + <message> + <source>Pause</source> + <comment>Pause</comment> + <translation>Приостановить</translation> + </message> + <message> + <source>Mute</source> + <comment>Mute</comment> + <translation>Приглушить</translation> + </message> + <message> <source>Open Frame</source> <comment>Open Frame in New Window context menu item</comment> <translation>Открыть фрейм</translation> @@ -7243,6 +7477,11 @@ Please choose a different file name.</source> <translation>Вставить</translation> </message> <message> + <source>Select All</source> + <comment>Select All context menu item</comment> + <translation>Выделить всё</translation> + </message> + <message> <source>No Guesses Found</source> <comment>No Guesses Found context menu item</comment> <translation>Совпадений не найдено</translation> @@ -7977,6 +8216,101 @@ Please choose a different file name.</source> </message> </context> <context> + <name>QmlJSDebugger::LiveSelectionTool</name> + <message> + <source>Items</source> + <translation>Элементы</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::QmlToolBar</name> + <message> + <source>Inspector Mode</source> + <translation>Режим инспектирования</translation> + </message> + <message> + <source>Play/Pause Animations</source> + <translation>Запустить/приостановить анимации</translation> + </message> + <message> + <source>Select</source> + <translation>Выбрать</translation> + </message> + <message> + <source>Select (Marquee)</source> + <translation>Выбрать (Маркет)</translation> + </message> + <message> + <source>Zoom</source> + <translation>Масштаб</translation> + </message> + <message> + <source>Color Picker</source> + <translation>Пипетка</translation> + </message> + <message> + <source>Apply Changes to QML Viewer</source> + <translation>Использовать изменения в просмотрщике QML</translation> + </message> + <message> + <source>Apply Changes to Document</source> + <translation>Применить изменения к документу</translation> + </message> + <message> + <source>Tools</source> + <translation>Инструменты</translation> + </message> + <message> + <source>1x</source> + <translation></translation> + </message> + <message> + <source>0.5x</source> + <translation></translation> + </message> + <message> + <source>0.25x</source> + <translation></translation> + </message> + <message> + <source>0.125x</source> + <translation></translation> + </message> + <message> + <source>0.1x</source> + <translation></translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ToolBarColorBox</name> + <message> + <source>Copy Color</source> + <translation>Скопировать цвет</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ToolBox</name> + <message> + <source>Qt Quick Toolbox</source> + <translation>Инструментарий Qt Quick</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ZoomTool</name> + <message> + <source>Zoom to &100%</source> + <translation>Масштаб &100%</translation> + </message> + <message> + <source>Zoom In</source> + <translation>Увеличить</translation> + </message> + <message> + <source>Zoom Out</source> + <translation>Уменьшить</translation> + </message> +</context> +<context> <name>QtXmlPatterns</name> <message> <source>At least one component must be present.</source> @@ -8732,7 +9066,7 @@ Please choose a different file name.</source> </message> <message> <source>%1 has inheritance loop in its base type %2.</source> - <translation type="unfinished">У %1 зациклено наследование в его базовом типе %2.</translation> + <translation>У %1 зациклено наследование в его базовом типе %2.</translation> </message> <message> <source>Circular inheritance of base type %1.</source> @@ -8740,15 +9074,15 @@ Please choose a different file name.</source> </message> <message> <source>Circular inheritance of union %1.</source> - <translation type="unfinished">Цикличное наследование базового объединения %1.</translation> + <translation>Цикличное наследование объединения %1.</translation> </message> <message> <source>%1 is not allowed to derive from %2 by restriction as the latter defines it as final.</source> - <translation type="unfinished"></translation> + <translation>%1 не может наследовать %2 через ограничение, так как ранее определено, что он конечный.</translation> </message> <message> <source>%1 is not allowed to derive from %2 by extension as the latter defines it as final.</source> - <translation type="unfinished"></translation> + <translation>%1 не может наследовать %2 через расширение, так как ранее определено, что он конечный.</translation> </message> <message> <source>Base type of simple type %1 cannot be complex type %2.</source> @@ -8768,7 +9102,7 @@ Please choose a different file name.</source> </message> <message> <source>Simple type %1 cannot derive from %2 as the latter defines restriction as final.</source> - <translation type="unfinished"></translation> + <translation>Простой тип %1 не может наследовать %2, так как есть ограничение, определяющее его конечным.</translation> </message> <message> <source>Variety of item type of %1 must be either atomic or union.</source> @@ -8780,7 +9114,7 @@ Please choose a different file name.</source> </message> <message> <source>%1 is not allowed to derive from %2 by list as the latter defines it as final.</source> - <translation type="unfinished"></translation> + <translation>%1 не может наследовать %2 через список, так как ранее определено, что он конечный.</translation> </message> <message> <source>Simple type %1 is only allowed to have %2 facet.</source> @@ -8792,7 +9126,7 @@ Please choose a different file name.</source> </message> <message> <source>Base type of simple type %1 has defined derivation by restriction as final.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Базовый тип простого типа %1 определён конечным исходя из ограничения.</translation> </message> <message> <source>Item type of base type does not match item type of %1.</source> @@ -8804,7 +9138,7 @@ Please choose a different file name.</source> </message> <message> <source>%1 is not allowed to derive from %2 by union as the latter defines it as final.</source> - <translation type="unfinished"></translation> + <translation>%1 не может наследовать %2 через объединение, так как ранее определено, что он конечный.</translation> </message> <message> <source>%1 is not allowed to have any facets.</source> @@ -8812,11 +9146,11 @@ Please choose a different file name.</source> </message> <message> <source>Base type %1 of simple type %2 must have variety of union.</source> - <translation type="unfinished">Базовый тип %1 простого типа %2 должен содержать какое-то объединение.</translation> + <translation>Базовый тип %1 простого типа %2 должен содержать какое-то объединение.</translation> </message> <message> <source>Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute.</source> - <translation type="unfinished"></translation> + <translation>Базовый тип %1 простого типа %2 не может иметь ограничение для атрибута %3.</translation> </message> <message> <source>Member type %1 cannot be derived from member type %2 of %3's base type %4.</source> diff --git a/translations/qtconfig_ru.ts b/translations/qtconfig_ru.ts index 07b7fd3..a200ac1 100644 --- a/translations/qtconfig_ru.ts +++ b/translations/qtconfig_ru.ts @@ -5,23 +5,23 @@ <name>MainWindow</name> <message> <source><p><b><font size+=2>Appearance</font></b></p><hr><p>Use this tab to customize the appearance of your Qt applications.</p><p>You can select the default GUI Style from the drop down list and customize the colors.</p><p>Any GUI Style plugins in your plugin path will automatically be added to the list of built-in Qt styles. (See the Library Paths tab for information on adding new plugin paths.)</p><p>When you choose 3-D Effects and Window Background colors, the Qt Configuration program will automatically generate a palette for you. To customize colors further, press the Tune Palette button to open the advanced palette editor.<p>The Preview Window shows what the selected Style and colors look like.</source> - <translation type="unfinished"><p><b><font size+=2>Внешний вид</font></b></p><hr><p>На этой вкладке можно настроить внешний вид приложений Qt.</p><p>Позволяет выбрать стиль интерфейса по умолчанию из выпадающего списка и настроить используемые стилем цвета.</p><p>Каждый стиль интерфейса, содержащийся в модулях, найденных в путях к модулям, автоматически добавляется в список встроенных стилей Qt (на вкладке Пути к библиотекам имеется более подробная информация о добавлении путей к модулям).</p><p>При выборе эффектов 3D и фоновых цветов окна программа настройки Qt автоматически создаст подходящую палитру. Для дальнейшей настройки цветов следует зайти в расширенный редактор палитры, нажав кнопку Настроить палитру.<p>В окне предпросмотра можно увидеть как будет выглядеть интерфейс с выбранными стилем и цветами.</translation> + <translation><p><b><font size+=2>Внешний вид</font></b></p><hr><p>На этой вкладке можно настроить внешний вид приложений Qt.</p><p>Позволяет выбрать стиль интерфейса по умолчанию из выпадающего списка и настроить используемые стилем цвета.</p><p>Каждый стиль интерфейса, содержащийся в модулях, найденных в путях к модулям, автоматически добавляется в список встроенных стилей Qt (на вкладке Пути к библиотекам имеется более подробная информация о добавлении путей к модулям).</p><p>При выборе эффектов 3D и фоновых цветов окна программа настройки Qt автоматически создаст подходящую палитру. Для дальнейшей настройки цветов следует зайти в расширенный редактор палитры, нажав кнопку Настроить палитру.<p>В окне предпросмотра можно увидеть как будет выглядеть интерфейс с выбранными стилем и цветами.</translation> </message> <message> <source><p><b><font size+=2>Fonts</font></b></p><hr><p>Use this tab to select the default font for your Qt applications. The selected font is shown (initially as 'Sample Text') in the line edit below the Family, Style and Point Size drop down lists.</p><p>Qt has a powerful font substitution feature that allows you to specify a list of substitute fonts. Substitute fonts are used when a font cannot be loaded, or if the specified font doesn't have a particular character.<p>For example, if you select the font Lucida, which doesn't have Korean characters, but need to show some Korean text using the Mincho font family you can do so by adding Mincho to the list. Once Mincho is added, any Korean characters that are not found in the Lucida font will be taken from the Mincho font. Because the font substitutions are lists, you can also select multiple families, such as Song Ti (for use with Chinese text).</source> - <translation type="unfinished"><p><b><font size+=2>Шрифты</font></b></p><hr><p>На этой вкладке можно выбрать шрифт по умолчанию для приложений Qt. Выбранный шрифт отображается в строке редактирования ниже выпадающих списков "Шрифт", "Начертание" и "Размер" (по умолчанию это текст "Текст для примера (Sample Text)").</p><p>Qt обладает мощным механизмом подмены шрифтов, который позволяет задавать список подставляемых шрифтов. Подставляемые шрифты используются, когда шрифт не удаётся загрузить или в нём отсутствуют необходимые символы.<p>Например, если требуется, чтобы при выборе шрифта Lucida, в котором отсутствуют корейские иероглифы, для отображения корейского текста использовался шрифт Mincho,то можно добавить его в список. После этого все корейские символы, отсутствующие в шрифте Lucida, будут браться из шрифта Mincho. Так как для замены используется список, то можно добавлять несколько шрифтов, например, можно также добавить шрифт Song Ti для отображения китайского текста.</translation> + <translation><p><b><font size+=2>Шрифты</font></b></p><hr><p>На этой вкладке можно выбрать шрифт по умолчанию для приложений Qt. Выбранный шрифт отображается в строке редактирования ниже выпадающих списков "Шрифт", "Начертание" и "Размер" (по умолчанию это текст "Текст для примера (Sample Text)").</p><p>Qt обладает мощным механизмом подмены шрифтов, который позволяет задавать список подставляемых шрифтов. Подставляемые шрифты используются, когда шрифт не удаётся загрузить или в нём отсутствуют необходимые символы.<p>Например, если требуется, чтобы при выборе шрифта Lucida, в котором отсутствуют корейские иероглифы, для отображения корейского текста использовался шрифт Mincho,то можно добавить его в список. После этого все корейские символы, отсутствующие в шрифте Lucida, будут браться из шрифта Mincho. Так как для замены используется список, то можно добавлять несколько шрифтов, например, можно также добавить шрифт Song Ti для отображения китайского текста.</translation> </message> <message> <source><p><b><font size+=2>Interface</font></b></p><hr><p>Use this tab to customize the feel of your Qt applications.</p><p>If the Resolve Symlinks checkbox is checked Qt will follow symlinks when handling URLs. For example, in the file dialog, if this setting is turned on and /usr/tmp is a symlink to /var/tmp, entering the /usr/tmp directory will cause the file dialog to change to /var/tmp. With this setting turned off, symlinks are not resolved or followed.</p><p>The Global Strut setting is useful for people who require a minimum size for all widgets (e.g. when using a touch panel or for users who are visually impaired). Leaving the Global Strut width and height at 0 will disable the Global Strut feature</p><p>XIM (Extended Input Methods) are used for entering characters in languages that have large character sets, for example, Chinese and Japanese.</source> - <translation type="unfinished"><p><b><font size+=2>Интерфейс</font></b></p><hr><p>На этой вкладке можно настроить поведение приложений Qt.</p><p>Если включено "Разрешать символьные ссылки", Qt будет следовать по символьным ссылкам при обработке путей URL. Например, если эта функция включена и /usr/tmp является символьной ссылкой на /var/tmp, то в диалоге выбора файла при вводе пути к каталогу /usr/tmp он будет изменён на /var/tmp.</p><p>Функция "Минимальные размеры" предназначены для тех, кому необходимо чтобы элементы интерфейса были не менее заданного размера (например, при использовании сенсорной панели или для людей с проблемами зрения). Если задать 0 в полях "минимальная ширина" и "минимальная высота", то данная функция будет отключена.</p><p>Метод ввода XIM (расширенные методы ввода) используется для ввода символов на языках с большим набором символов (например, китайском или японском).</translation> + <translation><p><b><font size+=2>Интерфейс</font></b></p><hr><p>На этой вкладке можно настроить поведение приложений Qt.</p><p>Если включено "Разрешать символьные ссылки", Qt будет следовать по символьным ссылкам при обработке путей URL. Например, если эта функция включена и /usr/tmp является символьной ссылкой на /var/tmp, то в диалоге выбора файла при вводе пути к каталогу /usr/tmp он будет изменён на /var/tmp.</p><p>Функция "Минимальные размеры" предназначены для тех, кому необходимо чтобы элементы интерфейса были не менее заданного размера (например, при использовании сенсорной панели или для людей с проблемами зрения). Если задать 0 в полях "минимальная ширина" и "минимальная высота", то данная функция будет отключена.</p><p>Метод ввода XIM (расширенные методы ввода) используется для ввода символов на языках с большим набором символов (например, китайском или японском).</translation> </message> <message> <source><p><b><font size+=2>Printer</font></b></p><hr><p>Use this tab to configure the way Qt generates output for the printer.You can specify if Qt should try to embed fonts into its generated output.If you enable font embedding, the resulting postscript will be more portable and will more accurately reflect the visual output on the screen; however the resulting postscript file size will be bigger.<p>When using font embedding you can select additional directories where Qt should search for embeddable font files. By default, the X server font path is used.</source> - <translation type="unfinished"><p><b><font size+=2>Принтер</font></b></p><hr><p>На этой вкладке можно настроить способ, которым Qt будет подготавливать данные для печати. Можно указать следует ли встраивать шрифты - в этом случае напечатанные документы будут более похожи на те, что на экране, но при этом увеличится объём данных, передаваемых на печатающее устройство.<p>При использовании встраивания шрифтов можно указать дополнительные каталоги, в которых Qt будет искать файлы шрифтов для встраивания. По умолчанию используется путь к шрифтам X сервера.</translation> + <translation><p><b><font size+=2>Принтер</font></b></p><hr><p>На этой вкладке можно настроить способ, которым Qt будет подготавливать данные для печати. Можно указать следует ли встраивать шрифты - в этом случае напечатанные документы будут более похожи на те, что на экране, но при этом увеличится объём данных, передаваемых на печатающее устройство.<p>При использовании встраивания шрифтов можно указать дополнительные каталоги, в которых Qt будет искать файлы шрифтов для встраивания. По умолчанию используется путь к шрифтам X сервера.</translation> </message> <message> <source><p><b><font size+=2>Phonon</font></b></p><hr><p>Use this tab to configure the Phonon GStreamer multimedia backend. <p>It is reccommended to leave all settings on "Auto" to let Phonon determine your settings automatically.</source> - <translation type="unfinished"><p><b><font size+=2>Phonon</font></b></p><hr><p>На этой вкладке можно настроить мультимедийную подсистему Phonon GStreamer.<p>Рекомендуется оставить значение "Автоматически" для всех настроек, чтобы Phonon определил параметры самостоятельно.</translation> + <translation><p><b><font size+=2>Phonon</font></b></p><hr><p>На этой вкладке можно настроить мультимедийную подсистему Phonon GStreamer.<p>Рекомендуется оставить значение "Автоматически" для всех настроек, чтобы Phonon определил параметры самостоятельно.</translation> </message> <message> <source>Desktop Settings (Default)</source> @@ -36,6 +36,10 @@ <translation type="unfinished"></translation> </message> <message> + <source>Unknown</source> + <translation>Неизвестный</translation> + </message> + <message> <source>Auto (default)</source> <translation>Автоматически (по умолчанию)</translation> </message> @@ -92,6 +96,10 @@ <translation>Сохранение изменений...</translation> </message> <message> + <source>Saved changes.</source> + <translation>Сохранённые изменения.</translation> + </message> + <message> <source>Over The Spot</source> <translation type="unfinished"></translation> </message> @@ -124,25 +132,6 @@ <translation>Сохранить изменения настроек?</translation> </message> <message> - <source>&Yes</source> - <translation>&Да</translation> - </message> - <message> - <source>&No</source> - <translation>&Нет</translation> - </message> - <message> - <source>&Cancel</source> - <translation>От&мена</translation> - </message> -</context> -<context> - <name>MainWindowBase</name> - <message> - <source>Qt Configuration</source> - <translation>Конфигурация Qt</translation> - </message> - <message> <source>Appearance</source> <translation>Внешний вид</translation> </message> @@ -155,26 +144,6 @@ <translation>&Стиль интерфейса:</translation> </message> <message> - <source>Build Palette</source> - <translation>Палитра</translation> - </message> - <message> - <source>&3-D Effects:</source> - <translation>Эффекты &3D:</translation> - </message> - <message> - <source>Window Back&ground:</source> - <translation>&Фон окна:</translation> - </message> - <message> - <source>&Tune Palette...</source> - <translation>&Настроить палитру...</translation> - </message> - <message> - <source>Please use the KDE Control Center to set the palette.</source> - <translation>Используйте Центр управления KDE для настройки цветов.</translation> - </message> - <message> <source>Preview</source> <translation>Предпросмотр</translation> </message> @@ -195,6 +164,26 @@ <translation>Палитра выключенных элементов</translation> </message> <message> + <source>Build Palette</source> + <translation>Палитра</translation> + </message> + <message> + <source>&Button Background:</source> + <translation>Фон &кнопки:</translation> + </message> + <message> + <source>Window Back&ground:</source> + <translation>&Фон окна:</translation> + </message> + <message> + <source>&Tune Palette...</source> + <translation>&Настроить палитру...</translation> + </message> + <message> + <source>Please use the KDE Control Center to set the palette.</source> + <translation>Используйте Центр управления KDE для настройки цветов.</translation> + </message> + <message> <source>Fonts</source> <translation>Шрифты</translation> </message> @@ -256,7 +245,7 @@ </message> <message> <source>Feel Settings</source> - <translation type="unfinished">Настройки поведения</translation> + <translation>Настройки поведения</translation> </message> <message> <source> ms</source> @@ -296,7 +285,7 @@ </message> <message> <source>Alt+E</source> - <translation>Alt+D</translation> + <translation></translation> </message> <message> <source>&Menu Effect:</source> @@ -351,22 +340,6 @@ <translation>Стиль ввода XIM:</translation> </message> <message> - <source>On The Spot</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Over The Spot</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Off The Spot</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Root</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Default Input Method:</source> <translation>Метод ввода по умолчанию:</translation> </message> @@ -411,32 +384,16 @@ <translation>Вэб-сайт:</translation> </message> <message> - <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html></source> - <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html></translation> + <source><a href="http://phonon.kde.org">http://phonon.kde.org/</a></source> + <translation></translation> </message> <message> <source>About GStreamer</source> <translation>О GStreamer</translation> </message> <message> - <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html></source> - <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html></translation> + <source><a href="http://gstreamer.freedesktop.org/">http://gstreamer.freedesktop.org/</a></source> + <translation></translation> </message> <message> <source>GStreamer backend settings</source> @@ -480,7 +437,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Ctrl+S</source> - <translation>Ctrl+S</translation> + <translation></translation> </message> <message> <source>E&xit</source> @@ -491,6 +448,10 @@ p, li { white-space: pre-wrap; } <translation>Выход</translation> </message> <message> + <source>Ctrl+Q</source> + <translation></translation> + </message> + <message> <source>&About</source> <translation>&О программе</translation> </message> @@ -508,16 +469,12 @@ p, li { white-space: pre-wrap; } </message> </context> <context> - <name>PaletteEditorAdvancedBase</name> + <name>PaletteEditorAdvanced</name> <message> <source>Tune Palette</source> <translation>Настройка палитры</translation> </message> <message> - <source><b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p></source> - <translation><b>Изменение палитры</b><p>Изменение палитры текущего виджета или формы.</p><p>Используйте сформированную палитру или выберите цвета для каждой группы цветов и каждой их роли.</p><p>Палитру можно проверить на виджетах в разных режимах отображения в разделе предпросмотра.</p></translation> - </message> - <message> <source>Select &Palette:</source> <translation>Выбор &палитры:</translation> </message> @@ -566,26 +523,39 @@ p, li { white-space: pre-wrap; } <translation>Текст окна</translation> </message> <message> - <source>Button</source> - <translation>Кнопка</translation> - </message> - <message> <source>Base</source> <translation>Фон</translation> </message> <message> + <source>AlternateBase</source> + <translation>Альтернативный Фон +</translation> + </message> + <message> + <source>ToolTipBase</source> + <translation>Фон подсказки</translation> + </message> + <message> + <source>ToolTipText</source> + <translation>Текст подсказки</translation> + </message> + <message> <source>Text</source> <translation>Текст</translation> </message> <message> - <source>BrightText</source> - <translation>Светлый текст</translation> + <source>Button</source> + <translation>Кнопка</translation> </message> <message> <source>ButtonText</source> <translation>Текст на кнопке</translation> </message> <message> + <source>BrightText</source> + <translation>Светлый текст</translation> + </message> + <message> <source>Highlight</source> <translation>Выделение</translation> </message> @@ -594,26 +564,22 @@ p, li { white-space: pre-wrap; } <translation>Выделенный текст</translation> </message> <message> - <source>&Select Color:</source> - <translation>&Выбор цвета:</translation> + <source>Link</source> + <translation>Ссылка</translation> </message> <message> - <source>Choose a color</source> - <translation>Выберите цвет</translation> + <source>LinkVisited</source> + <translation>Посещённая ссылка</translation> </message> <message> - <source>Choose a color for the selected central color role.</source> - <translation>Выберите цвет для указанной роли.</translation> + <source>&Select Color:</source> + <translation>&Выбор цвета:</translation> </message> <message> <source>3-D shadow &effects</source> <translation>Эффекты т&рехмерной тени</translation> </message> <message> - <source>Build &from button color</source> - <translation>Получ&ить из цвета кнопки</translation> - </message> - <message> <source>Generate shadings</source> <translation>Создание полутонов</translation> </message> @@ -622,6 +588,10 @@ p, li { white-space: pre-wrap; } <translation>Создать цвета эффекта трёхмерности из цвета кнопки.</translation> </message> <message> + <source>Build &from button color</source> + <translation>Получ&ить из цвета кнопки</translation> + </message> + <message> <source>Choose 3D-effect color role</source> <translation>Выбор роли цвета дял эффекта трёхмерности</translation> </message> @@ -654,24 +624,16 @@ p, li { white-space: pre-wrap; } <translation>Выбор &цвета:</translation> </message> <message> - <source>Choose a color for the selected effect color role.</source> - <translation>Выбор цвета для указанной роли.</translation> - </message> - <message> - <source>OK</source> - <translation>Принять</translation> - </message> - <message> - <source>Close dialog and apply all changes.</source> - <translation>Закрыть окно с применением изменений.</translation> + <source>Choose a color</source> + <translation>Выберите цвет</translation> </message> <message> - <source>Cancel</source> - <translation>Отмена</translation> + <source>Choose a color for the selected central color role.</source> + <translation>Выберите цвет для указанной роли.</translation> </message> <message> - <source>Close dialog and discard all changes.</source> - <translation>Закрыть окно с отменой изменений.</translation> + <source>Choose a color for the selected effect color role.</source> + <translation>Выбор цвета для указанной роли.</translation> </message> </context> <context> @@ -682,64 +644,55 @@ p, li { white-space: pre-wrap; } </message> </context> <context> - <name>PreviewWidgetBase</name> + <name>PreviewWidget</name> <message> <source>Preview Window</source> <translation>Окно предпросмотра</translation> </message> <message> - <source>ButtonGroup</source> - <translation>ButtonGroup</translation> + <source>GroupBox</source> + <translation type="unfinished">Объединение</translation> </message> <message> <source>RadioButton1</source> - <translation>RadioButton1</translation> + <translation type="unfinished">Переключатель1</translation> </message> <message> <source>RadioButton2</source> - <translation>RadioButton2</translation> + <translation type="unfinished">Переключатель2</translation> </message> <message> <source>RadioButton3</source> - <translation>RadioButton3</translation> + <translation type="unfinished">Переключатель3</translation> </message> <message> - <source>ButtonGroup2</source> - <translation>ButtonGroup2</translation> + <source>GroupBox2</source> + <translation type="unfinished">Объединение2</translation> </message> <message> <source>CheckBox1</source> - <translation>CheckBox1</translation> + <translation type="unfinished">Выключатель1</translation> </message> <message> <source>CheckBox2</source> - <translation>CheckBox2</translation> + <translation type="unfinished">Выключатель2</translation> </message> <message> <source>LineEdit</source> - <translation>LineEdit</translation> + <translation type="unfinished">Строка редактирования</translation> </message> <message> <source>ComboBox</source> - <translation>ComboBox</translation> + <translation type="unfinished">Выпадающий список</translation> </message> <message> <source>PushButton</source> - <translation>PushButton</translation> - </message> - <message> - <source><p> -<a href="http://qt.nokia.com">http://qt.nokia.com</a> -</p> -<p> -<a href="http://www.kde.org">http://www.kde.org</a> -</p></source> - <translation><p> -<a href="http://qt.nokia.com">http://qt.nokia.com</a> -</p> -<p> -<a href="http://www.kde.org">http://www.kde.org</a> -</p></translation> + <translation type="unfinished">Простая кнопка</translation> + </message> + <message> + <source><p><a href="http://qt.nokia.com">http://qt.nokia.com</a></p> +<p><a href="http://www.kde.org">http://www.kde.org</a></p></source> + <translation></translation> </message> </context> </TS> -- cgit v0.12 From b90a0139a4f63c730bb4668e04ab3f8c81ead04f Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Mon, 15 Aug 2011 15:26:28 +0200 Subject: examples: fix compilation with namespaced Qt. --- examples/webkit/simplewebplugin/csvfactory.h | 2 ++ examples/webkit/simplewebplugin/csvview.h | 2 ++ examples/webkit/webftpclient/downloader.h | 2 ++ examples/webkit/webftpclient/ftpreply.h | 3 +-- examples/webkit/webftpclient/ftpview.h | 1 - examples/webkit/webplugin/csvfactory.h | 2 ++ examples/webkit/webplugin/csvview.h | 2 ++ examples/widgets/orientation/mainwindow.h | 4 +--- 8 files changed, 12 insertions(+), 6 deletions(-) diff --git a/examples/webkit/simplewebplugin/csvfactory.h b/examples/webkit/simplewebplugin/csvfactory.h index 0b046c5..e3013b1 100644 --- a/examples/webkit/simplewebplugin/csvfactory.h +++ b/examples/webkit/simplewebplugin/csvfactory.h @@ -44,8 +44,10 @@ #include <QNetworkRequest> #include <QWebPluginFactory> +QT_BEGIN_NAMESPACE class QNetworkAccessManager; class QNetworkReply; +QT_END_NAMESPACE //! [plugin factory] class CSVFactory : public QWebPluginFactory diff --git a/examples/webkit/simplewebplugin/csvview.h b/examples/webkit/simplewebplugin/csvview.h index 0a136f3..f457d0a 100644 --- a/examples/webkit/simplewebplugin/csvview.h +++ b/examples/webkit/simplewebplugin/csvview.h @@ -46,8 +46,10 @@ #include <QTableView> #include <QWebPluginFactory> +QT_BEGIN_NAMESPACE class QNetworkAccessManager; class QNetworkReply; +QT_END_NAMESPACE //! [definition] class CSVView : public QTableView diff --git a/examples/webkit/webftpclient/downloader.h b/examples/webkit/webftpclient/downloader.h index 8201cea..dd2f8ec 100644 --- a/examples/webkit/webftpclient/downloader.h +++ b/examples/webkit/webftpclient/downloader.h @@ -46,10 +46,12 @@ #include <QObject> #include <QUrl> +QT_BEGIN_NAMESPACE class QNetworkAccessManager; class QNetworkRequest; class QNetworkReply; class QWidget; +QT_END_NAMESPACE class Downloader : public QObject { diff --git a/examples/webkit/webftpclient/ftpreply.h b/examples/webkit/webftpclient/ftpreply.h index becd4e4..ca0a271 100644 --- a/examples/webkit/webftpclient/ftpreply.h +++ b/examples/webkit/webftpclient/ftpreply.h @@ -44,8 +44,7 @@ #include <QNetworkReply> #include <QStringList> #include <QUrlInfo> - -class QFtp; +#include <QFtp> //! [class definition] class FtpReply : public QNetworkReply diff --git a/examples/webkit/webftpclient/ftpview.h b/examples/webkit/webftpclient/ftpview.h index 2538812..544c0a9 100644 --- a/examples/webkit/webftpclient/ftpview.h +++ b/examples/webkit/webftpclient/ftpview.h @@ -41,7 +41,6 @@ #include <QWebView> class Downloader; -class QNetworkAccessManager; class FtpView : public QWebView { diff --git a/examples/webkit/webplugin/csvfactory.h b/examples/webkit/webplugin/csvfactory.h index 5a44c50..d1d6b9c 100644 --- a/examples/webkit/webplugin/csvfactory.h +++ b/examples/webkit/webplugin/csvfactory.h @@ -44,8 +44,10 @@ #include <QNetworkRequest> #include <QWebPluginFactory> +QT_BEGIN_NAMESPACE class QNetworkAccessManager; class QNetworkReply; +QT_END_NAMESPACE class QWebView; class CSVFactory : public QWebPluginFactory diff --git a/examples/webkit/webplugin/csvview.h b/examples/webkit/webplugin/csvview.h index bf8918b..4cbb069 100644 --- a/examples/webkit/webplugin/csvview.h +++ b/examples/webkit/webplugin/csvview.h @@ -46,8 +46,10 @@ #include <QTableView> #include <QWebPluginFactory> +QT_BEGIN_NAMESPACE class QNetworkAccessManager; class QNetworkReply; +QT_END_NAMESPACE class QWebFrame; //! [definition] diff --git a/examples/widgets/orientation/mainwindow.h b/examples/widgets/orientation/mainwindow.h index 400a6a5..745497c 100644 --- a/examples/widgets/orientation/mainwindow.h +++ b/examples/widgets/orientation/mainwindow.h @@ -41,13 +41,11 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -#include <QWidget> +#include <QAbstractButton> #include "ui_landscape.h" #include "ui_portrait.h" -class QAbstractButton; - //! [0] class MainWindow : public QWidget { -- cgit v0.12 From 1bea92a96e3007667d23058be03b75cef315608b Mon Sep 17 00:00:00 2001 From: Pierre Rossi <pierre.rossi@nokia.com> Date: Tue, 19 Jul 2011 18:36:05 +0200 Subject: Add support for rawFonts loaded from data in FaceId The problem was that with an empty filename and index of 0, all raw fonts loaded from data had the same FaceId, and we wouldn't bother to load another one after doing this once. This commit introduces a uuid in FaceId to help distinguish them in that case. Change-Id: I93655ff07a7d8856af1f854024e207c519f8ed1a Reviewed-on: http://codereview.qt.nokia.com/1882 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com> --- src/gui/text/qfontengine_p.h | 3 ++- src/gui/text/qrawfont_ft.cpp | 2 ++ tests/auto/qrawfont/tst_qrawfont.cpp | 25 ++++++++++++++++++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index a70aec1..8d81acb 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -155,6 +155,7 @@ public: struct FaceId { FaceId() : index(0), encoding(0) {} QByteArray filename; + QByteArray uuid; int index; int encoding; }; @@ -295,7 +296,7 @@ inline bool operator ==(const QFontEngine::FaceId &f1, const QFontEngine::FaceId inline uint qHash(const QFontEngine::FaceId &f) { - return qHash((f.index << 16) + f.encoding) + qHash(f.filename); + return qHash((f.index << 16) + f.encoding) + qHash(f.filename + f.uuid); } diff --git a/src/gui/text/qrawfont_ft.cpp b/src/gui/text/qrawfont_ft.cpp index 5bba221..1666df3 100644 --- a/src/gui/text/qrawfont_ft.cpp +++ b/src/gui/text/qrawfont_ft.cpp @@ -45,6 +45,7 @@ #include "qrawfont_p.h" #include "qfontengine_ft_p.h" +#include "quuid.h" #if defined(Q_WS_X11) && !defined(QT_NO_FONTCONFIG) # include "qfontengine_x11_p.h" @@ -87,6 +88,7 @@ public: FaceId faceId; faceId.filename = ""; faceId.index = 0; + faceId.uuid = QUuid::createUuid().toByteArray(); return init(faceId, true, Format_None, fontData); } diff --git a/tests/auto/qrawfont/tst_qrawfont.cpp b/tests/auto/qrawfont/tst_qrawfont.cpp index e0680c4..eb78057 100644 --- a/tests/auto/qrawfont/tst_qrawfont.cpp +++ b/tests/auto/qrawfont/tst_qrawfont.cpp @@ -47,7 +47,6 @@ class tst_QRawFont: public QObject { Q_OBJECT - #if !defined(QT_NO_RAWFONT) private slots: void invalidRawFont(); @@ -94,6 +93,11 @@ private slots: void rawFontSetPixelSize_data(); void rawFontSetPixelSize(); + +#if defined(Q_WS_X11) || defined(Q_WS_MAC) && defined(QT_MAC_USE_COCOA) + void multipleRawFontsFromData(); +#endif + #endif // QT_NO_RAWFONT }; @@ -843,6 +847,25 @@ void tst_QRawFont::rawFontSetPixelSize() QCOMPARE(rawFont.pixelSize(), 24.0); } +#if defined(Q_WS_X11) || defined(Q_WS_MAC) && defined(QT_MAC_USE_COCOA) +void tst_QRawFont::multipleRawFontsFromData() +{ + QFile file(QString::fromLatin1(SRCDIR "testfont.ttf")); + QRawFont testFont; + if (file.open(QIODevice::ReadOnly)) { + testFont.loadFromData(file.readAll(), 11, QFont::PreferDefaultHinting); + file.close(); + } + file.setFileName(QLatin1String(SRCDIR "testfont_bold_italic.ttf")); + QRawFont testFontBoldItalic; + if (file.open(QIODevice::ReadOnly)) + testFontBoldItalic.loadFromData(file.readAll(), 11, QFont::PreferDefaultHinting); + + QVERIFY(testFont.familyName() != (testFontBoldItalic.familyName()) + || testFont.styleName() != (testFontBoldItalic.styleName())); +} +#endif + #endif // QT_NO_RAWFONT QTEST_MAIN(tst_QRawFont) -- cgit v0.12 From 13e7d402c438fd2c527dbc302cf1103d5c835a2f Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Tue, 26 Apr 2011 15:35:51 +0200 Subject: Make text rendering working outside the gui thread on Symbian. It was previously not possible to render text (QPainter::drawText) in a secondary thread on Symbian, it always resulted in some kind of panic. This patch corrects it. For S60 5.0 and earlier the behavior is not changed, threaded text rendering is only supported on Symbian^3 and newer. This also means QFontDatabase::supportsThreadedFontRendering() will return true from now on, but only on Symbian^3 and higher. Task-number: QTBUG-18516 Reviewed-by: mread (cherry picked from commit 0c62e02b80570bf8b92eff7acceb9018df61c89e) --- src/gui/kernel/qapplication_s60.cpp | 3 +++ src/gui/kernel/qt_s60_p.h | 26 ++++++++++++++++++++++++++ src/gui/text/qfontdatabase_s60.cpp | 30 +++++++++++++++++++----------- 3 files changed, 48 insertions(+), 11 deletions(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index b98bdbc..a53d273 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -2723,6 +2723,9 @@ QS60ThreadLocalData::QS60ThreadLocalData() QS60ThreadLocalData::~QS60ThreadLocalData() { + for (int i = 0; i < releaseFuncs.count(); ++i) + releaseFuncs[i](); + releaseFuncs.clear(); if (!usingCONEinstances) { delete screenDevice; wsSession.Close(); diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index 4295f60..3e6a293 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -97,6 +97,10 @@ static const int qt_symbian_max_screens = 4; //this macro exists because EColor16MAP enum value doesn't exist in Symbian OS 9.2 #define Q_SYMBIAN_ECOLOR16MAP TDisplayMode(13) +class QSymbianTypeFaceExtras; +typedef QHash<QString, const QSymbianTypeFaceExtras *> QSymbianTypeFaceExtrasHash; +typedef void (*QThreadLocalReleaseFunc)(); + class Q_AUTOTEST_EXPORT QS60ThreadLocalData { public: @@ -105,6 +109,8 @@ public: bool usingCONEinstances; RWsSession wsSession; CWsScreenDevice *screenDevice; + QSymbianTypeFaceExtrasHash fontData; + QVector<QThreadLocalReleaseFunc> releaseFuncs; }; class QS60Data @@ -178,6 +184,8 @@ public: inline CWsScreenDevice* screenDevice(const QWidget *widget); inline CWsScreenDevice* screenDevice(int screenNumber); static inline int screenNumberForWidget(const QWidget *widget); + inline QSymbianTypeFaceExtrasHash& fontData(); + inline void addThreadLocalReleaseFunc(QThreadLocalReleaseFunc func); static inline CCoeAppUi* appUi(); static inline CEikMenuBar* menuBar(); #ifdef Q_WS_S60 @@ -477,6 +485,24 @@ inline int QS60Data::screenNumberForWidget(const QWidget *widget) return qt_widget_private(const_cast<QWidget *>(w))->symbianScreenNumber; } +inline QSymbianTypeFaceExtrasHash& QS60Data::fontData() +{ + if (!tls.hasLocalData()) { + tls.setLocalData(new QS60ThreadLocalData); + } + return tls.localData()->fontData; +} + +inline void QS60Data::addThreadLocalReleaseFunc(QThreadLocalReleaseFunc func) +{ + if (!tls.hasLocalData()) { + tls.setLocalData(new QS60ThreadLocalData); + } + QS60ThreadLocalData *data = tls.localData(); + if (!data->releaseFuncs.contains(func)) + data->releaseFuncs.append(func); +} + inline CCoeAppUi* QS60Data::appUi() { return CCoeEnv::Static()-> AppUi(); diff --git a/src/gui/text/qfontdatabase_s60.cpp b/src/gui/text/qfontdatabase_s60.cpp index 1c1bc29..d209726 100644 --- a/src/gui/text/qfontdatabase_s60.cpp +++ b/src/gui/text/qfontdatabase_s60.cpp @@ -166,7 +166,6 @@ public: COpenFontRasterizer *m_rasterizer; mutable QList<const QSymbianTypeFaceExtras *> m_extras; - mutable QHash<QString, const QSymbianTypeFaceExtras *> m_extrasHash; mutable QSet<QString> m_applicationFontFamilies; }; @@ -269,8 +268,9 @@ void QSymbianFontDatabaseExtrasImplementation::clear() static_cast<const QSymbianFontDatabaseExtrasImplementation*>(db->symbianExtras); if (!dbExtras) return; // initializeDb() has never been called + QSymbianTypeFaceExtrasHash &extrasHash = S60->fontData(); if (QSymbianTypeFaceExtras::symbianFontTableApiAvailable()) { - qDeleteAll(dbExtras->m_extrasHash); + qDeleteAll(extrasHash); } else { typedef QList<const QSymbianTypeFaceExtras *>::iterator iterator; for (iterator p = dbExtras->m_extras.begin(); p != dbExtras->m_extras.end(); ++p) { @@ -279,11 +279,16 @@ void QSymbianFontDatabaseExtrasImplementation::clear() } dbExtras->m_extras.clear(); } - dbExtras->m_extrasHash.clear(); + extrasHash.clear(); } void qt_cleanup_symbianFontDatabase() { + static bool cleanupDone = false; + if (cleanupDone) + return; + cleanupDone = true; + QFontDatabasePrivate *db = privateDb(); if (!db) return; @@ -334,9 +339,12 @@ COpenFont* OpenFontFromBitmapFont(const CBitmapFont* aBitmapFont) const QSymbianTypeFaceExtras *QSymbianFontDatabaseExtrasImplementation::extras(const QString &aTypeface, bool bold, bool italic) const { + QSymbianTypeFaceExtrasHash &extrasHash = S60->fontData(); + if (extrasHash.isEmpty() && QThread::currentThread() != QApplication::instance()->thread()) + S60->addThreadLocalReleaseFunc(clear); const QString typeface = qt_symbian_fontNameWithAppFontMarker(aTypeface); const QString searchKey = typeface + QString::number(int(bold)) + QString::number(int(italic)); - if (!m_extrasHash.contains(searchKey)) { + if (!extrasHash.contains(searchKey)) { TFontSpec searchSpec(qt_QString2TPtrC(typeface), 1); if (bold) searchSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold); @@ -350,7 +358,7 @@ const QSymbianTypeFaceExtras *QSymbianFontDatabaseExtrasImplementation::extras(c QScopedPointer<CFont, CFontFromScreenDeviceReleaser> sFont(font); QSymbianTypeFaceExtras *extras = new QSymbianTypeFaceExtras(font); sFont.take(); - m_extrasHash.insert(searchKey, extras); + extrasHash.insert(searchKey, extras); } else { const TInt err = m_store->GetNearestFontToDesignHeightInPixels(font, searchSpec); Q_ASSERT(err == KErrNone && font); @@ -364,20 +372,20 @@ const QSymbianTypeFaceExtras *QSymbianFontDatabaseExtrasImplementation::extras(c const TOpenFontFaceAttrib* const attrib = openFont->FaceAttrib(); const QString foundKey = QString((const QChar*)attrib->FullName().Ptr(), attrib->FullName().Length()); - if (!m_extrasHash.contains(foundKey)) { + if (!extrasHash.contains(foundKey)) { QScopedPointer<CFont, CFontFromFontStoreReleaser> sFont(font); QSymbianTypeFaceExtras *extras = new QSymbianTypeFaceExtras(font, openFont); sFont.take(); m_extras.append(extras); - m_extrasHash.insert(searchKey, extras); - m_extrasHash.insert(foundKey, extras); + extrasHash.insert(searchKey, extras); + extrasHash.insert(foundKey, extras); } else { m_store->ReleaseFont(font); - m_extrasHash.insert(searchKey, m_extrasHash.value(foundKey)); + extrasHash.insert(searchKey, extrasHash.value(foundKey)); } } } - return m_extrasHash.value(searchKey); + return extrasHash.value(searchKey); } void QSymbianFontDatabaseExtrasImplementation::removeAppFontData( @@ -971,7 +979,7 @@ bool QFontDatabase::removeAllApplicationFonts() bool QFontDatabase::supportsThreadedFontRendering() { - return false; + return QSymbianTypeFaceExtras::symbianFontTableApiAvailable(); } static -- cgit v0.12 From fef1ae94b31762cd97ad76f2c5a45e9259ef1c6c Mon Sep 17 00:00:00 2001 From: Casper van Donderen <casper.vandonderen@nokia.com> Date: Tue, 16 Aug 2011 13:46:44 +0200 Subject: Change spacing of title in offline style. Reviewed-by: Daniel Molkentin --- doc/src/template/style/offline.css | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/src/template/style/offline.css b/doc/src/template/style/offline.css index 44abb3c..d33d8e7 100644 --- a/doc/src/template/style/offline.css +++ b/doc/src/template/style/offline.css @@ -74,8 +74,7 @@ body { - margin-left: 0.5em; - margin-right: 0.5em; + margin: 0px; font-family: sans-serif; line-height: normal } @@ -238,7 +237,9 @@ .header .content { - margin-bottom: 0.5em + margin-left: 5px; + margin-top: 5px; + margin-bottom: 0.5em; } .header .breadcrumb @@ -413,6 +414,11 @@ .flowList dd a{ } + .mainContent + { + padding-left:5px; + } + .content .flowList p{ padding:0px; } -- cgit v0.12 From 182b10dbad23e9da310c0d600095f17c41dd0d3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= <tor.arne.vestbo@nokia.com> Date: Mon, 15 Aug 2011 18:26:08 +0200 Subject: Fix build with the Clang compiler http://llvm.org/bugs/show_bug.cgi?id=10338 Reviewed-by: Marius Storm-Olsen <marius.storm-olsen@nokia.com> --- src/gui/image/qpnghandler.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp index f7d07a5..812c450 100644 --- a/src/gui/image/qpnghandler.cpp +++ b/src/gui/image/qpnghandler.cpp @@ -420,7 +420,7 @@ bool Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngHeader() return false; } - if (setjmp(png_jmpbuf(png_ptr))) { + if (setjmp((*png_set_longjmp_fn((png_ptr), (png_longjmp_ptr)longjmp, sizeof(jmp_buf))))) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); png_ptr = 0; return false; @@ -449,7 +449,7 @@ bool Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngImage(QImage *outImage) } row_pointers = 0; - if (setjmp(png_jmpbuf(png_ptr))) { + if (setjmp((*png_set_longjmp_fn((png_ptr), (png_longjmp_ptr)longjmp, sizeof(jmp_buf))))) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); delete [] row_pointers; png_ptr = 0; @@ -723,7 +723,7 @@ bool Q_INTERNAL_WIN_NO_THROW QPNGImageWriter::writeImage(const QImage& image, in return false; } - if (setjmp(png_jmpbuf(png_ptr))) { + if (setjmp((*png_set_longjmp_fn((png_ptr), (png_longjmp_ptr)longjmp, sizeof(jmp_buf))))) { png_destroy_write_struct(&png_ptr, &info_ptr); return false; } -- cgit v0.12 From d69788728ccd843e3d4a372680185fdf5e711c86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Fri, 5 Aug 2011 10:35:55 +0200 Subject: Encapsulate pointer manipulations to createFileTemplate function , where we actually control how we use the pointers. Reduce some code duplication in #ifdefs. --- src/corelib/io/qtemporaryfile.cpp | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index d457601..9228f94 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -96,18 +96,22 @@ QT_BEGIN_NAMESPACE \internal Generates a unique file path and returns a native handle to the open file. - \a path is used as a template when generating unique paths, - \a placeholderStart and \a placeholderEnd delimit the sub-string that will - be randomized. + \a path is used as a template when generating unique paths, \a pos + identifies the position of the first character that will be replaced in the + template and \a length the number of characters that may be substituted. Returns an open handle to the newly created file if successful, an invalid handle otherwise. In both cases, the string in \a path will be changed and contain the generated path name. */ -static int createFileFromTemplate(char *const path, - char *const placeholderStart, char *const placeholderEnd) +static int createFileFromTemplate(QByteArray &path, size_t pos, size_t length) { - Q_ASSERT(placeholderEnd > placeholderStart); + Q_ASSERT(length != 0); + Q_ASSERT(pos < size_t(path.length())); + Q_ASSERT(length < size_t(path.length()) - pos); + + char *const placeholderStart = path.data() + pos; + char *const placeholderEnd = placeholderStart + length; // Initialize placeholder with random chars + PID. { @@ -134,14 +138,16 @@ static int createFileFromTemplate(char *const path, // Atomically create file and obtain handle #ifndef Q_OS_WIN { - int fd = QT_OPEN(path, QT_OPEN_CREAT | O_EXCL | QT_OPEN_RDWR | QT_OPEN_LARGEFILE, 0600); + int fd = QT_OPEN(path.constData(), + QT_OPEN_CREAT | O_EXCL | QT_OPEN_RDWR | QT_OPEN_LARGEFILE, + 0600); if (fd != -1) return fd; if (errno != EEXIST) return -1; } #else - if (!QFileInfo(QString::fromLocal8Bit(path)).exists()) + if (!QFileInfo(QString::fromLocal8Bit(path.constData(), path.length())).exists()) return 1; #endif @@ -295,10 +301,9 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) else filename.insert(phPos + phLength, suffix.toLocal8Bit()); - char *path = filename.data(); + int fd = createFileFromTemplate(filename, phPos, phLength); #ifndef Q_OS_WIN - int fd = createFileFromTemplate(path, path + phPos, path + phPos + phLength); if (fd != -1) { // First open the fd as an external file descriptor to // initialize the engine properly. @@ -308,7 +313,7 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) d->closeFileHandle = true; // Restore the file names (open() resets them). - d->fileEntry = QFileSystemEntry(QString::fromLocal8Bit(path, filename.length())); //note that filename is NOT a native path + d->fileEntry = QFileSystemEntry(QString::fromLocal8Bit(filename.constData(), filename.length())); //note that filename is NOT a native path filePathIsTemplate = false; return true; } @@ -318,13 +323,11 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) setError(errno == EMFILE ? QFile::ResourceError : QFile::OpenError, qt_error_string(errno)); return false; #else - if (createFileFromTemplate(path, path + phPos, path + phPos + phLength) == -1) { + if (fd == -1) return false; - } QString template_ = d->fileEntry.filePath(); - d->fileEntry = QFileSystemEntry(QString::fromLocal8Bit(path, filename.length())); - + d->fileEntry = QFileSystemEntry(QString::fromLocal8Bit(filename.constData(), filename.length())); if (QFSFileEngine::open(openMode)) { filePathIsTemplate = false; return true; -- cgit v0.12 From 63bb67d3107b03f399cddf4c9cca9c7eb347b62d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Fri, 5 Aug 2011 10:39:53 +0200 Subject: Make Symbian follow Windows code in temporary path generation On the one hand, we stop using OpenC here. On the other, we no longer use an atomic create and obtain file handle API -- just as we don't on Windows yet. This is a stepping stone to removing back and forth conversions of path names when generating unique names and also towards the use of native APIs for creating and obtaining a file handle atomically. Reviewed-by: Gareth Stockwell Reviewed-by: Shane Kearns --- src/corelib/io/qtemporaryfile.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index 9228f94..497faad 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -49,12 +49,9 @@ #include "private/qabstractfileengine_p.h" #include "private/qfsfileengine_p.h" -#if !defined(Q_OS_WINCE) -# include <errno.h> -#endif - -#if defined(Q_OS_UNIX) -# include "private/qcore_unix_p.h" // overrides QT_OPEN +#if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) +#include "private/qcore_unix_p.h" // overrides QT_OPEN +#include <errno.h> #endif #if defined(QT_BUILD_CORE_LIB) @@ -136,7 +133,7 @@ static int createFileFromTemplate(QByteArray &path, size_t pos, size_t length) for (;;) { // Atomically create file and obtain handle -#ifndef Q_OS_WIN +#if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) { int fd = QT_OPEN(path.constData(), QT_OPEN_CREAT | O_EXCL | QT_OPEN_RDWR | QT_OPEN_LARGEFILE, @@ -303,7 +300,7 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) int fd = createFileFromTemplate(filename, phPos, phLength); -#ifndef Q_OS_WIN +#if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) if (fd != -1) { // First open the fd as an external file descriptor to // initialize the engine properly. -- cgit v0.12 From d71d3b1ce31ffc585258330d825ff8ea535254ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Fri, 5 Aug 2011 10:57:19 +0200 Subject: Use QStringBuilder when copying template for modification This avoids modifying the original string in the case where a placeholder marker is not found. By marking the variable const we further avoid checks on the reference count and detaches, also allowing us to safely reuse it later in the function. The new approach also fixes an issue where suffix wasn't empty, but the toLocal8Bit conversion would be. This resulted in a buffer overflow inside createFileFromTemplate. Reviewed-by: Shane Kearns --- src/corelib/io/qtemporaryfile.cpp | 62 +++++++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index 497faad..b079d3e 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -45,6 +45,7 @@ #include "qplatformdefs.h" #include "qabstractfileengine.h" +#include "qstringbuilder.h" #include "private/qfile_p.h" #include "private/qabstractfileengine_p.h" #include "private/qfsfileengine_p.h" @@ -60,6 +61,38 @@ QT_BEGIN_NAMESPACE +struct Placeholder +{ + Placeholder(int size) + : size_(size) + { + } + + int size() const + { + return size_; + } + +private: + int size_; +}; + +template <> +struct QConcatenable<Placeholder> +{ + typedef Placeholder type; + typedef QByteArray ConvertTo; + enum { ExactSize = true }; + static int size(const Placeholder &p) { return p.size(); } + + template <class CharT> + static inline void appendTo(const Placeholder &p, CharT *&out) + { + // Uninitialized + out += p.size(); + } +}; + /* * Copyright (c) 1987, 1993 * The Regents of the University of California. All rights reserved. @@ -258,7 +291,7 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) if (!filePathIsTemplate) return QFSFileEngine::open(openMode); - QString qfilename = d->fileEntry.filePath(); + const QString qfilename = d->fileEntry.filePath(); // Find placeholder string. uint phPos = qfilename.length(); @@ -281,22 +314,22 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) phLength = 0; } - QStringRef prefix, suffix; + QByteArray filename; + if (phLength < 6) { - qfilename += QLatin1Char('.'); - prefix = QStringRef(&qfilename); + filename = qfilename.toLocal8Bit(); + + phPos = filename.length() + 1; // Account for added dot in prefix phLength = 6; + filename = filename % '.' % Placeholder(phLength); } else { - prefix = qfilename.leftRef(phPos); - suffix = qfilename.midRef(phPos + phLength); - } + QByteArray prefix, suffix; + prefix = qfilename.leftRef(phPos).toLocal8Bit(); + suffix = qfilename.midRef(phPos + phLength).toLocal8Bit(); - QByteArray filename = prefix.toLocal8Bit(); - phPos = filename.length(); - if (suffix.isEmpty()) - filename.resize(phPos + phLength); - else - filename.insert(phPos + phLength, suffix.toLocal8Bit()); + phPos = prefix.length(); + filename = prefix % Placeholder(phLength) % suffix; + } int fd = createFileFromTemplate(filename, phPos, phLength); @@ -323,14 +356,13 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) if (fd == -1) return false; - QString template_ = d->fileEntry.filePath(); d->fileEntry = QFileSystemEntry(QString::fromLocal8Bit(filename.constData(), filename.length())); if (QFSFileEngine::open(openMode)) { filePathIsTemplate = false; return true; } - d->fileEntry = QFileSystemEntry(template_, QFileSystemEntry::FromInternalPath()); + d->fileEntry = QFileSystemEntry(qfilename, QFileSystemEntry::FromInternalPath()); return false; #endif } -- cgit v0.12 From 9a76587363a2f37312326286e08cce502f7fe27e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Fri, 5 Aug 2011 10:58:08 +0200 Subject: Minimize encoding conversions when generating unique file name With minor adjustments, createFileFromTemplate is made to work directly on (UTF-16) QString data, which is already in the native encoding for Windows and Symbian. This is possible because the function only fills out the placeholder sub-string, without touching adjacent characters. This eliminates unnecessary conversions on those platforms. Reviewed-by: Gareth Stockwell Reviewed-by: Shane Kearns --- src/corelib/io/qtemporaryfile.cpp | 69 ++++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 15 deletions(-) diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index b079d3e..e4c53aa 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -61,6 +61,33 @@ QT_BEGIN_NAMESPACE +#if defined(Q_OS_WIN) || defined(Q_OS_SYMBIAN) +typedef ushort Char; + +static inline Char Latin1Char(char ch) +{ + return ushort(uchar(ch)); +} + +template <> +struct QConcatenable<Char> +{ + typedef Char type; + typedef QString ConvertTo; + enum { ExactSize = true }; + static int size(const Char &) { return 1; } + + static inline void appendTo(const Char &u16, QChar *&out) + { + *out++ = QChar(u16); + } +}; + +#else // POSIX +typedef char Char; +typedef char Latin1Char; +#endif + struct Placeholder { Placeholder(int size) @@ -134,23 +161,24 @@ struct QConcatenable<Placeholder> handle otherwise. In both cases, the string in \a path will be changed and contain the generated path name. */ -static int createFileFromTemplate(QByteArray &path, size_t pos, size_t length) +static int createFileFromTemplate(QFileSystemEntry::NativePath &path, + size_t pos, size_t length) { Q_ASSERT(length != 0); Q_ASSERT(pos < size_t(path.length())); Q_ASSERT(length < size_t(path.length()) - pos); - char *const placeholderStart = path.data() + pos; - char *const placeholderEnd = placeholderStart + length; + Char *const placeholderStart = (Char *)path.data() + pos; + Char *const placeholderEnd = placeholderStart + length; // Initialize placeholder with random chars + PID. { - char *rIter = placeholderEnd; + Char *rIter = placeholderEnd; #if defined(QT_BUILD_CORE_LIB) quint64 pid = quint64(QCoreApplication::applicationPid()); do { - *--rIter = (pid % 10) + '0'; + *--rIter = Latin1Char((pid % 10) + '0'); pid /= 10; } while (rIter != placeholderStart && pid != 0); #endif @@ -158,9 +186,9 @@ static int createFileFromTemplate(QByteArray &path, size_t pos, size_t length) while (rIter != placeholderStart) { char ch = char((qrand() & 0xffff) % (26 + 26)); if (ch < 26) - *--rIter = ch + 'A'; + *--rIter = Latin1Char(ch + 'A'); else - *--rIter = ch - 26 + 'a'; + *--rIter = Latin1Char(ch - 26 + 'a'); } } @@ -177,18 +205,18 @@ static int createFileFromTemplate(QByteArray &path, size_t pos, size_t length) return -1; } #else - if (!QFileInfo(QString::fromLocal8Bit(path.constData(), path.length())).exists()) + if (!QFileInfo(path).exists()) return 1; #endif /* tricky little algorwwithm for backward compatibility */ - for (char *iter = placeholderStart;;) { + for (Char *iter = placeholderStart;;) { // Character progression: [0-9] => 'a' ... 'z' => 'A' .. 'Z' // String progression: "ZZaiC" => "aabiC" - switch (*iter) { + switch (char(*iter)) { case 'Z': // Rollover, advance next character - *iter = 'a'; + *iter = Latin1Char('a'); if (++iter == placeholderEnd) return -1; @@ -196,12 +224,12 @@ static int createFileFromTemplate(QByteArray &path, size_t pos, size_t length) case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': - *iter = 'a'; + *iter = Latin1Char('a'); break; case 'z': // increment 'z' to 'A' - *iter = 'A'; + *iter = Latin1Char('A'); break; default: @@ -314,8 +342,9 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) phLength = 0; } - QByteArray filename; + QFileSystemEntry::NativePath filename; +#if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) if (phLength < 6) { filename = qfilename.toLocal8Bit(); @@ -330,6 +359,16 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) phPos = prefix.length(); filename = prefix % Placeholder(phLength) % suffix; } +#else + if (phLength < 6) { + phPos = qfilename.length() + 1; // Account for added dot in prefix + phLength = 6; + filename = qfilename % Latin1Char('.') % Placeholder(phLength); + } else + filename = qfilename; + + // No native separators, not a "native path" +#endif int fd = createFileFromTemplate(filename, phPos, phLength); @@ -356,7 +395,7 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) if (fd == -1) return false; - d->fileEntry = QFileSystemEntry(QString::fromLocal8Bit(filename.constData(), filename.length())); + d->fileEntry = QFileSystemEntry(filename, QFileSystemEntry::FromInternalPath()); if (QFSFileEngine::open(openMode)) { filePathIsTemplate = false; return true; -- cgit v0.12 From ff9b69838ec146aeb43d4af8a03043f9c5f0454d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Fri, 5 Aug 2011 10:45:08 +0200 Subject: Atomic implementation of create file and obtain handle for Win/Symbian Besides generating a unique name, createFileFromTemplate now also acquires a file handle on all platforms. The file engine's native handle is passed by reference and modified in place. This fixes a long standing security issue on Windows. On Windows and Symbian platforms we directly use the "native" file path when processing the template and generating the unique name. Since the native encoding is known, conversions at this point are safe. Errors other than "file exists" are propagated to Q(Temporary)File, and result in a failure in open(). The changes also unify error handling and should give consistent behaviour across all platforms. Worthy of note, there's a change in behaviour on Windows and Symbian: fileNames returned by QTemporaryFile on Windows and Symbian are always absolute after open has been called. This has to do with how QFileSystemEntry::nativeFilePath works on these platforms. (Test was updated to reflect change in behaviour.) Reviewed-by: Gareth Stockwell Reviewed-by: Shane Kearns --- src/corelib/io/qtemporaryfile.cpp | 151 +++++++++++++++-------- tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp | 31 +++-- 2 files changed, 122 insertions(+), 60 deletions(-) diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index e4c53aa..cd6ab40 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -49,6 +49,11 @@ #include "private/qfile_p.h" #include "private/qabstractfileengine_p.h" #include "private/qfsfileengine_p.h" +#include "private/qsystemerror_p.h" + +#if defined(Q_OS_SYMBIAN) +#include "private/qcore_symbian_p.h" +#endif #if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) #include "private/qcore_unix_p.h" // overrides QT_OPEN @@ -83,9 +88,20 @@ struct QConcatenable<Char> } }; +# ifdef Q_OS_WIN +typedef HANDLE NativeFileHandle; +# else // Q_OS_SYMBIAN +# ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API +typedef RFile64 NativeFileHandle; +# else +typedef RFile NativeFileHandle; +# endif +# endif + #else // POSIX typedef char Char; typedef char Latin1Char; +typedef int NativeFileHandle; #endif struct Placeholder @@ -161,8 +177,9 @@ struct QConcatenable<Placeholder> handle otherwise. In both cases, the string in \a path will be changed and contain the generated path name. */ -static int createFileFromTemplate(QFileSystemEntry::NativePath &path, - size_t pos, size_t length) +static bool createFileFromTemplate(NativeFileHandle &file, + QFileSystemEntry::NativePath &path, size_t pos, size_t length, + QSystemError &error) { Q_ASSERT(length != 0); Q_ASSERT(pos < size_t(path.length())); @@ -192,21 +209,50 @@ static int createFileFromTemplate(QFileSystemEntry::NativePath &path, } } +#ifdef Q_OS_SYMBIAN + RFs& fs = qt_s60GetRFs(); +#endif + for (;;) { // Atomically create file and obtain handle -#if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) - { - int fd = QT_OPEN(path.constData(), - QT_OPEN_CREAT | O_EXCL | QT_OPEN_RDWR | QT_OPEN_LARGEFILE, - 0600); - if (fd != -1) - return fd; - if (errno != EEXIST) - return -1; +#if defined(Q_OS_WIN) + file = CreateFile((const wchar_t *)path.constData(), + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_NEW, + FILE_ATTRIBUTE_NORMAL, NULL); + + if (file != INVALID_HANDLE_VALUE) + return true; + + DWORD err = GetLastError(); + if (err != ERROR_FILE_EXISTS) { + error = QSystemError(err, QSystemError::NativeError); + return false; + } +#elif defined(Q_OS_SYMBIAN) + TInt err = file.Create(fs, qt_QString2TPtrC(path), + EFileRead | EFileWrite | EFileShareReadersOrWriters); + + if (err == KErrNone) + return true; + + if (err != KErrAlreadyExists) { + error = QSystemError(err, QSystemError::NativeError); + return false; + } +#else // POSIX + file = QT_OPEN(path.constData(), + QT_OPEN_CREAT | O_EXCL | QT_OPEN_RDWR | QT_OPEN_LARGEFILE, + 0600); + + if (file != -1) + return true; + + int err = errno; + if (err != EEXIST) { + error = QSystemError(err, QSystemError::NativeError); + return false; } -#else - if (!QFileInfo(path).exists()) - return 1; #endif /* tricky little algorwwithm for backward compatibility */ @@ -217,8 +263,11 @@ static int createFileFromTemplate(QFileSystemEntry::NativePath &path, case 'Z': // Rollover, advance next character *iter = Latin1Char('a'); - if (++iter == placeholderEnd) - return -1; + if (++iter == placeholderEnd) { + // Out of alternatives. Return file exists error, previously set. + error = QSystemError(err, QSystemError::NativeError); + return false; + } continue; @@ -319,7 +368,14 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) if (!filePathIsTemplate) return QFSFileEngine::open(openMode); - const QString qfilename = d->fileEntry.filePath(); + const QString qfilename = +#if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) + // Since the native encoding is out of our control, we need to process + // the path as UTF-16 before doing any conversions + d->fileEntry.filePath(); +#else + d->fileEntry.nativeFilePath(); +#endif // Find placeholder string. uint phPos = qfilename.length(); @@ -333,8 +389,14 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) continue; } - if (qfilename[phPos] == QLatin1Char('/') - || phLength >= 6) { + if (phLength >= 6 + || qfilename[phPos] == +#if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) + QLatin1Char('/') +#else + QLatin1Char('\\') +#endif + ) { ++phPos; break; } @@ -366,44 +428,35 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) filename = qfilename % Latin1Char('.') % Placeholder(phLength); } else filename = qfilename; - - // No native separators, not a "native path" #endif - int fd = createFileFromTemplate(filename, phPos, phLength); + QSystemError error; +#if defined(Q_OS_WIN) + NativeFileHandle &file = d->fileHandle; +#elif defined(Q_OS_SYMBIAN) + NativeFileHandle &file = d->symbianFile; +#else // POSIX + NativeFileHandle &file = d->fd; +#endif -#if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) - if (fd != -1) { - // First open the fd as an external file descriptor to - // initialize the engine properly. - if (QFSFileEngine::open(openMode, fd)) { + if (!createFileFromTemplate(file, filename, phPos, phLength, error)) { + setError(QFile::OpenError, error.toString()); + return false; + } - // Allow the engine to close the handle even if it's "external". - d->closeFileHandle = true; + d->fileEntry = QFileSystemEntry(filename, QFileSystemEntry::FromNativePath()); - // Restore the file names (open() resets them). - d->fileEntry = QFileSystemEntry(QString::fromLocal8Bit(filename.constData(), filename.length())); //note that filename is NOT a native path - filePathIsTemplate = false; - return true; - } +#if !defined(Q_OS_WIN) + d->closeFileHandle = true; +#endif - QT_CLOSE(fd); - } - setError(errno == EMFILE ? QFile::ResourceError : QFile::OpenError, qt_error_string(errno)); - return false; -#else - if (fd == -1) - return false; + filePathIsTemplate = false; - d->fileEntry = QFileSystemEntry(filename, QFileSystemEntry::FromInternalPath()); - if (QFSFileEngine::open(openMode)) { - filePathIsTemplate = false; - return true; - } + d->openMode = openMode; + d->lastFlushFailed = false; + d->tried_stat = 0; - d->fileEntry = QFileSystemEntry(qfilename, QFileSystemEntry::FromInternalPath()); - return false; -#endif + return true; } bool QTemporaryFileEngine::remove() diff --git a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp index 2edb93a..05fee95 100644 --- a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp +++ b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp @@ -201,11 +201,12 @@ void tst_QTemporaryFile::fileTemplate() QCOMPARE(file.open(), true); + QString fileName = QFileInfo(file).fileName(); if (prefix.length()) - QCOMPARE(file.fileName().left(prefix.length()), prefix); + QCOMPARE(fileName.left(prefix.length()), prefix); if (suffix.length()) - QCOMPARE(file.fileName().right(suffix.length()), suffix); + QCOMPARE(fileName.right(suffix.length()), suffix); } @@ -701,20 +702,28 @@ void tst_QTemporaryFile::QTBUG_4796() << file5.fileName() << file6.fileName(); - QVERIFY(file1.fileName().startsWith(fileTemplate1 + QLatin1Char('.'))); - QVERIFY(file2.fileName().startsWith(fileTemplate2 + QLatin1Char('.'))); - QVERIFY(file5.fileName().startsWith("test-XXXXXX/" + fileTemplate1 + QLatin1Char('.'))); - QVERIFY(file6.fileName().startsWith("test-XXXXXX/" + prefix)); + QDir currentDir; + QString fileName1 = currentDir.relativeFilePath(file1.fileName()); + QString fileName2 = currentDir.relativeFilePath(file2.fileName()); + QString fileName3 = currentDir.relativeFilePath(file3.fileName()); + QString fileName4 = currentDir.relativeFilePath(file4.fileName()); + QString fileName5 = currentDir.relativeFilePath(file5.fileName()); + QString fileName6 = currentDir.relativeFilePath(file6.fileName()); + + QVERIFY(fileName1.startsWith(fileTemplate1 + QLatin1Char('.'))); + QVERIFY(fileName2.startsWith(fileTemplate2 + QLatin1Char('.'))); + QVERIFY(fileName5.startsWith("test-XXXXXX/" + fileTemplate1 + QLatin1Char('.'))); + QVERIFY(fileName6.startsWith("test-XXXXXX/" + prefix)); if (!prefix.isEmpty()) { - QVERIFY(file3.fileName().startsWith(prefix)); - QVERIFY(file4.fileName().startsWith(prefix)); + QVERIFY(fileName3.startsWith(prefix)); + QVERIFY(fileName4.startsWith(prefix)); } if (!suffix.isEmpty()) { - QVERIFY(file3.fileName().endsWith(suffix)); - QVERIFY(file4.fileName().endsWith(suffix)); - QVERIFY(file6.fileName().endsWith(suffix)); + QVERIFY(fileName3.endsWith(suffix)); + QVERIFY(fileName4.endsWith(suffix)); + QVERIFY(fileName6.endsWith(suffix)); } } } -- cgit v0.12 From d95da2fc82cdd7e5157460157b0895c209852897 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Tue, 16 Aug 2011 16:02:47 +0200 Subject: Add output on test failure Reviewed-by: Shane Kearns --- tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp | 43 ++++++++++++++---------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp index 05fee95..2db5c60 100644 --- a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp +++ b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp @@ -412,11 +412,11 @@ void tst_QTemporaryFile::rename() { QTemporaryFile file(dir.filePath("temporary-file.XXXXXX")); - QVERIFY(file.open()); + QVERIFY2(file.open(), qPrintable(file.errorString())); tempname = file.fileName(); QVERIFY(dir.exists(tempname)); - QVERIFY(file.rename("temporary-file.txt")); + QVERIFY2(file.rename("temporary-file.txt"), qPrintable(file.errorString())); QVERIFY(!dir.exists(tempname)); QVERIFY(dir.exists("temporary-file.txt")); QCOMPARE(file.fileName(), QString("temporary-file.txt")); @@ -679,12 +679,21 @@ void tst_QTemporaryFile::QTBUG_4796() QTemporaryFile file5("test-XXXXXX/" + fileTemplate1); QTemporaryFile file6("test-XXXXXX/" + fileTemplate3); - QCOMPARE(file1.open(), openResult); - QCOMPARE(file2.open(), openResult); - QCOMPARE(file3.open(), openResult); - QCOMPARE(file4.open(), openResult); - QCOMPARE(file5.open(), openResult); - QCOMPARE(file6.open(), openResult); + if (openResult) { + QVERIFY2(file1.open(), qPrintable(file1.errorString())); + QVERIFY2(file2.open(), qPrintable(file2.errorString())); + QVERIFY2(file3.open(), qPrintable(file3.errorString())); + QVERIFY2(file4.open(), qPrintable(file4.errorString())); + QVERIFY2(file5.open(), qPrintable(file5.errorString())); + QVERIFY2(file6.open(), qPrintable(file6.errorString())); + } else { + QVERIFY(!file1.open()); + QVERIFY(!file2.open()); + QVERIFY(!file3.open()); + QVERIFY(!file4.open()); + QVERIFY(!file5.open()); + QVERIFY(!file6.open()); + } QCOMPARE(file1.exists(), openResult); QCOMPARE(file2.exists(), openResult); @@ -710,20 +719,20 @@ void tst_QTemporaryFile::QTBUG_4796() QString fileName5 = currentDir.relativeFilePath(file5.fileName()); QString fileName6 = currentDir.relativeFilePath(file6.fileName()); - QVERIFY(fileName1.startsWith(fileTemplate1 + QLatin1Char('.'))); - QVERIFY(fileName2.startsWith(fileTemplate2 + QLatin1Char('.'))); - QVERIFY(fileName5.startsWith("test-XXXXXX/" + fileTemplate1 + QLatin1Char('.'))); - QVERIFY(fileName6.startsWith("test-XXXXXX/" + prefix)); + QVERIFY2(fileName1.startsWith(fileTemplate1 + QLatin1Char('.')), qPrintable(file1.fileName())); + QVERIFY2(fileName2.startsWith(fileTemplate2 + QLatin1Char('.')), qPrintable(file2.fileName())); + QVERIFY2(fileName5.startsWith("test-XXXXXX/" + fileTemplate1 + QLatin1Char('.')), qPrintable(file5.fileName())); + QVERIFY2(fileName6.startsWith("test-XXXXXX/" + prefix), qPrintable(file6.fileName())); if (!prefix.isEmpty()) { - QVERIFY(fileName3.startsWith(prefix)); - QVERIFY(fileName4.startsWith(prefix)); + QVERIFY2(fileName3.startsWith(prefix), qPrintable(file3.fileName())); + QVERIFY2(fileName4.startsWith(prefix), qPrintable(file4.fileName())); } if (!suffix.isEmpty()) { - QVERIFY(fileName3.endsWith(suffix)); - QVERIFY(fileName4.endsWith(suffix)); - QVERIFY(fileName6.endsWith(suffix)); + QVERIFY2(fileName3.endsWith(suffix), qPrintable(file3.fileName())); + QVERIFY2(fileName4.endsWith(suffix), qPrintable(file4.fileName())); + QVERIFY2(fileName6.endsWith(suffix), qPrintable(file6.fileName())); } } } -- cgit v0.12 From a153d50eea2dea0925695a90af2c12f1887a9020 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Fri, 5 Aug 2011 10:47:01 +0200 Subject: Cleanup #includes These are already required and included by qfsfileengine_p.h. --- src/corelib/io/qtemporaryfile.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index cd6ab40..9f7cde2 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -44,10 +44,8 @@ #ifndef QT_NO_TEMPORARYFILE #include "qplatformdefs.h" -#include "qabstractfileengine.h" #include "qstringbuilder.h" #include "private/qfile_p.h" -#include "private/qabstractfileengine_p.h" #include "private/qfsfileengine_p.h" #include "private/qsystemerror_p.h" -- cgit v0.12 From 0de701d01cb221464eed773fd3751aff73fe4d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Fri, 5 Aug 2011 10:49:44 +0200 Subject: Use "native paths" on POSIX platforms as well And don't rely solely on "local8Bit" conversions. QFile defines an API for overriding how encoding conversions are done for filenames. In generating unique names, QTemporaryFile ignored that API and hardcoded the use of local 8-bit, implicitly assuming that that was appropriate. With this change, we switch that assumption to one where user supplied encoding function keeps the byte value of 'X' and '/', also assuming that encoded 'X' takes up a single-byte (i.e., the byte sequence for "XXXXXX" remains unchanged). There was also, and there still is an assumption in name generation that byte values for ASCII alpha-numeric characters are valid in the "native" encoding. In practice this change is compatible with UTF-8, Latin-1 and other ISO/IEC 8859 encodings. At any rate, it's very likely that only UTF-8 is relevant here. Reviewed-by: Denis Dzyubenko --- src/corelib/io/qtemporaryfile.cpp | 30 +++--------------------------- 1 file changed, 3 insertions(+), 27 deletions(-) diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index 9f7cde2..ac5deac 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -366,14 +366,7 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) if (!filePathIsTemplate) return QFSFileEngine::open(openMode); - const QString qfilename = -#if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) - // Since the native encoding is out of our control, we need to process - // the path as UTF-16 before doing any conversions - d->fileEntry.filePath(); -#else - d->fileEntry.nativeFilePath(); -#endif + const QFileSystemEntry::NativePath qfilename = d->fileEntry.nativeFilePath(); // Find placeholder string. uint phPos = qfilename.length(); @@ -382,7 +375,7 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) while (phPos != 0) { --phPos; - if (qfilename[phPos] == QLatin1Char('X')) { + if (qfilename[phPos] == Latin1Char('X')) { ++phLength; continue; } @@ -390,7 +383,7 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) if (phLength >= 6 || qfilename[phPos] == #if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) - QLatin1Char('/') + '/' #else QLatin1Char('\\') #endif @@ -404,29 +397,12 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) QFileSystemEntry::NativePath filename; -#if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) - if (phLength < 6) { - filename = qfilename.toLocal8Bit(); - - phPos = filename.length() + 1; // Account for added dot in prefix - phLength = 6; - filename = filename % '.' % Placeholder(phLength); - } else { - QByteArray prefix, suffix; - prefix = qfilename.leftRef(phPos).toLocal8Bit(); - suffix = qfilename.midRef(phPos + phLength).toLocal8Bit(); - - phPos = prefix.length(); - filename = prefix % Placeholder(phLength) % suffix; - } -#else if (phLength < 6) { phPos = qfilename.length() + 1; // Account for added dot in prefix phLength = 6; filename = qfilename % Latin1Char('.') % Placeholder(phLength); } else filename = qfilename; -#endif QSystemError error; #if defined(Q_OS_WIN) -- cgit v0.12 From 401722ef9e6fe79bd41f9d5f79668f5c4997c8e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Tue, 16 Aug 2011 17:53:41 +0200 Subject: Fix QTemporaryFile regressions and new found issues With this change, the file template is always processed in original QString format. Trying to generate native paths before adding a missing placeholder mask could change the meaning of templates, such as "." and "..", which are now tested to mean "..XXXXXX" and "...XXXXXX", respectively. After ensuring the template includes a placeholder mask, the path is converted to a native *absolute* file path and the mask is sought for again. On Windows, native paths were already absolute. On Symbian, we'd need at least a clean path, as "." and ",," are not natively understood. There is a requirement that the placeholder mask /XXXXXX+/ makes it through this conversion unaltered, which relaxes prior requirements on *nix platforms. On Windows and Symbian the conversion is under Qt's control and not user-configurable. Reviewed-by: Shane Kearns --- src/corelib/io/qtemporaryfile.cpp | 84 ++++++++++-------------- tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp | 2 + 2 files changed, 36 insertions(+), 50 deletions(-) diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index ac5deac..375d07f 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -44,10 +44,10 @@ #ifndef QT_NO_TEMPORARYFILE #include "qplatformdefs.h" -#include "qstringbuilder.h" #include "private/qfile_p.h" #include "private/qfsfileengine_p.h" #include "private/qsystemerror_p.h" +#include "private/qfilesystemengine_p.h" #if defined(Q_OS_SYMBIAN) #include "private/qcore_symbian_p.h" @@ -102,38 +102,6 @@ typedef char Latin1Char; typedef int NativeFileHandle; #endif -struct Placeholder -{ - Placeholder(int size) - : size_(size) - { - } - - int size() const - { - return size_; - } - -private: - int size_; -}; - -template <> -struct QConcatenable<Placeholder> -{ - typedef Placeholder type; - typedef QByteArray ConvertTo; - enum { ExactSize = true }; - static int size(const Placeholder &p) { return p.size(); } - - template <class CharT> - static inline void appendTo(const Placeholder &p, CharT *&out) - { - // Uninitialized - out += p.size(); - } -}; - /* * Copyright (c) 1987, 1993 * The Regents of the University of California. All rights reserved. @@ -366,43 +334,59 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) if (!filePathIsTemplate) return QFSFileEngine::open(openMode); - const QFileSystemEntry::NativePath qfilename = d->fileEntry.nativeFilePath(); + QString qfilename = d->fileEntry.filePath(); - // Find placeholder string. + // Ensure there is a placeholder mask uint phPos = qfilename.length(); uint phLength = 0; while (phPos != 0) { --phPos; - if (qfilename[phPos] == Latin1Char('X')) { + if (qfilename[phPos] == QLatin1Char('X')) { ++phLength; continue; } if (phLength >= 6 - || qfilename[phPos] == -#if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) - '/' -#else - QLatin1Char('\\') -#endif - ) { + || qfilename[phPos] == QLatin1Char('/')) { ++phPos; break; } + // start over phLength = 0; } - QFileSystemEntry::NativePath filename; + if (phLength < 6) + qfilename.append(QLatin1String(".XXXXXX")); + + // "Nativify" :-) + QFileSystemEntry::NativePath filename = QFileSystemEngine::absoluteName( + QFileSystemEntry(qfilename, QFileSystemEntry::FromInternalPath())) + .nativeFilePath(); + + // Find mask in native path + phPos = filename.length(); + phLength = 0; + while (phPos != 0) { + --phPos; + + if (filename[phPos] == Latin1Char('X')) { + ++phLength; + continue; + } + + if (phLength >= 6) { + ++phPos; + break; + } + + // start over + phLength = 0; + } - if (phLength < 6) { - phPos = qfilename.length() + 1; // Account for added dot in prefix - phLength = 6; - filename = qfilename % Latin1Char('.') % Placeholder(phLength); - } else - filename = qfilename; + Q_ASSERT(phLength >= 6); QSystemError error; #if defined(Q_OS_WIN) diff --git a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp index 2db5c60..18b9337 100644 --- a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp +++ b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp @@ -632,6 +632,8 @@ void tst_QTemporaryFile::QTBUG_4796_data() QString unicode = QString::fromUtf8("\xc3\xa5\xc3\xa6\xc3\xb8"); QTest::newRow("<empty>") << QString() << QString() << true; + QTest::newRow(".") << QString(".") << QString() << true; + QTest::newRow("..") << QString("..") << QString() << true; QTest::newRow("blaXXXXXX") << QString("bla") << QString() << true; QTest::newRow("XXXXXXbla") << QString() << QString("bla") << true; QTest::newRow("does-not-exist/qt_temp.XXXXXX") << QString("does-not-exist/qt_temp") << QString() << false; -- cgit v0.12 From 98f0e52547f6f840e386740dc6c2d99452965266 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Wed, 17 Aug 2011 14:38:27 +0200 Subject: Cleanup code: removing empty stubs Reviewed-by: Shane Kearns --- tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp | 29 ------------------------ 1 file changed, 29 deletions(-) diff --git a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp index 18b9337..11b2bb3 100644 --- a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp +++ b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp @@ -69,13 +69,7 @@ class tst_QTemporaryFile : public QObject { Q_OBJECT -public: - tst_QTemporaryFile(); - virtual ~tst_QTemporaryFile(); public slots: - void init(); - void cleanup(); - void initTestCase(); void cleanupTestCase(); @@ -103,8 +97,6 @@ private slots: void QTBUG_4796_data(); void QTBUG_4796(); - -public: }; void tst_QTemporaryFile::initTestCase() @@ -139,27 +131,6 @@ void tst_QTemporaryFile::getSetCheck() QCOMPARE(true, obj1.autoRemove()); } -tst_QTemporaryFile::tst_QTemporaryFile() -{ -} - -tst_QTemporaryFile::~tst_QTemporaryFile() -{ - -} - -void tst_QTemporaryFile::init() -{ -// TODO: Add initialization code here. -// This will be executed immediately before each test is run. -} - -void tst_QTemporaryFile::cleanup() -{ -// TODO: Add cleanup code here. -// This will be executed immediately after each test is run. -} - void tst_QTemporaryFile::fileTemplate_data() { QTest::addColumn<QString>("constructorTemplate"); -- cgit v0.12 From 4e2b245df03b79df272318092a63a4a3708ba3b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Wed, 17 Aug 2011 14:43:18 +0200 Subject: Merged fileTemplate test with QTBUG_4796 The latter was more thorough, but didn't test setting the file template after construction, while the former included some prefix/suffix combinations that weren't specifically tested in the latter. Reviewed-by: Shane Kearns --- tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp | 116 ++++++++++------------- 1 file changed, 48 insertions(+), 68 deletions(-) diff --git a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp index 11b2bb3..c9d4ba4 100644 --- a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp +++ b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp @@ -94,20 +94,17 @@ private slots: void resetTemplateAfterError(); void setTemplateAfterOpen(); void autoRemoveAfterFailedRename(); - - void QTBUG_4796_data(); - void QTBUG_4796(); }; void tst_QTemporaryFile::initTestCase() { - // For QTBUG_4796 + // For fileTemplate tests QVERIFY(QDir("test-XXXXXX").exists() || QDir().mkdir("test-XXXXXX")); } void tst_QTemporaryFile::cleanupTestCase() { - // From QTBUG_4796 + // From fileTemplate tests QVERIFY(QDir().rmdir("test-XXXXXX")); } @@ -131,56 +128,6 @@ void tst_QTemporaryFile::getSetCheck() QCOMPARE(true, obj1.autoRemove()); } -void tst_QTemporaryFile::fileTemplate_data() -{ - QTest::addColumn<QString>("constructorTemplate"); - QTest::addColumn<QString>("prefix"); - QTest::addColumn<QString>("suffix"); - QTest::addColumn<QString>("fileTemplate"); - - QTest::newRow("constructor default") << "" << "." << "" << ""; - QTest::newRow("constructor with xxx sufix") << "qt_XXXXXXxxx" << "qt_" << "xxx" << ""; - QTest::newRow("constructor with xXx sufix") << "qt_XXXXXXxXx" << "qt_" << "xXx" << ""; - QTest::newRow("constructor with no sufix") << "qt_XXXXXX" << "qt_" << "" << ""; - QTest::newRow("constructor with >6 X's and xxx suffix") << "qt_XXXXXXXXXXxxx" << "qt_" << "xxx" << ""; - QTest::newRow("constructor with >6 X's, no suffix") << "qt_XXXXXXXXXX" << "qt_" << "" << ""; - - QTest::newRow("constructor with XXXX suffix") << "qt_XXXXXX_XXXX" << "qt_" << "_XXXX" << ""; - QTest::newRow("constructor with XXXXX suffix") << "qt_XXXXXX_XXXXX" << "qt_" << "_XXXXX" << ""; - QTest::newRow("constructor with XXXX prefix") << "qt_XXXX" << "qt_XXXX." << "" << ""; - QTest::newRow("constructor with XXXXX prefix") << "qt_XXXXX" << "qt_XXXXX." << "" << ""; - QTest::newRow("constructor with XXXX prefix and suffix") << "qt_XXXX_XXXXXX_XXXX" << "qt_XXXX_" << "_XXXX" << ""; - QTest::newRow("constructor with XXXXX prefix and suffix") << "qt_XXXXX_XXXXXX_XXXXX" << "qt_XXXXX_" << "_XXXXX" << ""; - - QTest::newRow("set template, no suffix") << "" << "foo" << "" << "foo"; - QTest::newRow("set template, with lowercase XXXXXX") << "" << "qt_" << "xxxxxx" << "qt_XXXXXXxxxxxx"; - QTest::newRow("set template, with xxx") << "" << "qt_" << ".xxx" << "qt_XXXXXX.xxx"; - QTest::newRow("set template, with >6 X's") << "" << "qt_" << ".xxx" << "qt_XXXXXXXXXXXXXX.xxx"; - QTest::newRow("set template, with >6 X's, no suffix") << "" << "qt_" << "" << "qt_XXXXXXXXXXXXXX"; -} - -void tst_QTemporaryFile::fileTemplate() -{ - QFETCH(QString, constructorTemplate); - QFETCH(QString, prefix); - QFETCH(QString, suffix); - QFETCH(QString, fileTemplate); - - QTemporaryFile file(constructorTemplate); - if (!fileTemplate.isEmpty()) - file.setFileTemplate(fileTemplate); - - QCOMPARE(file.open(), true); - - QString fileName = QFileInfo(file).fileName(); - if (prefix.length()) - QCOMPARE(fileName.left(prefix.length()), prefix); - - if (suffix.length()) - QCOMPARE(fileName.right(suffix.length()), suffix); -} - - /* This tests whether the temporary file really gets placed in QDir::tempPath */ @@ -594,7 +541,7 @@ void tst_QTemporaryFile::autoRemoveAfterFailedRename() cleaner.reset(); } -void tst_QTemporaryFile::QTBUG_4796_data() +void tst_QTemporaryFile::fileTemplate_data() { QTest::addColumn<QString>("prefix"); QTest::addColumn<QString>("suffix"); @@ -603,17 +550,33 @@ void tst_QTemporaryFile::QTBUG_4796_data() QString unicode = QString::fromUtf8("\xc3\xa5\xc3\xa6\xc3\xb8"); QTest::newRow("<empty>") << QString() << QString() << true; + QTest::newRow(".") << QString(".") << QString() << true; QTest::newRow("..") << QString("..") << QString() << true; + + QTest::newRow("foo") << QString("foo") << QString() << true; + QTest::newRow("qt_ ... xxxxxx") << QString("qt_") << QString("xxxxxx") << true; + QTest::newRow("qt_ ... xxx") << QString("qt_") << QString("xxx") << true; + QTest::newRow("qt_ ... xXx") << QString("qt_") << QString("xXx") << true; + QTest::newRow("qt_ ...") << QString("qt_") << QString() << true; + QTest::newRow("qt_ ... _XXXX") << QString("qt_") << QString("_XXXX") << true; + QTest::newRow("qt_ ... _XXXXX") << QString("qt_") << QString("_XXXXX") << true; + QTest::newRow("qt_XXXX_ ...") << QString("qt_XXXX_") << QString() << true; + QTest::newRow("qt_XXXXX_ ...") << QString("qt_XXXXX_") << QString() << true; + QTest::newRow("qt_XXXX_ ... _XXXX") << QString("qt_XXXX_") << QString("_XXXX") << true; + QTest::newRow("qt_XXXXX_ ... _XXXXX") << QString("qt_XXXXX_") << QString("_XXXXX") << true; + QTest::newRow("blaXXXXXX") << QString("bla") << QString() << true; QTest::newRow("XXXXXXbla") << QString() << QString("bla") << true; + QTest::newRow("does-not-exist/qt_temp.XXXXXX") << QString("does-not-exist/qt_temp") << QString() << false; + QTest::newRow("XXXXXX<unicode>") << QString() << unicode << true; QTest::newRow("<unicode>XXXXXX") << unicode << QString() << true; QTest::newRow("<unicode>XXXXXX<unicode>") << unicode << unicode << true; } -void tst_QTemporaryFile::QTBUG_4796() +void tst_QTemporaryFile::fileTemplate() { QVERIFY(QDir("test-XXXXXX").exists()); @@ -639,18 +602,40 @@ void tst_QTemporaryFile::QTBUG_4796() QFETCH(QString, suffix); QFETCH(bool, openResult); + enum IterationType { + UseConstructor, + UseSetFileTemplate, + Done + }; + + for (IterationType setFileTemplate = UseConstructor; setFileTemplate != Done; + setFileTemplate = IterationType(int(setFileTemplate) + 1)) { + Q_FOREACH(QString const &tempName, cleaner.tempNames) + QVERIFY( !QFile::exists(tempName) ); + + cleaner.reset(); + QString fileTemplate1 = prefix + QString("XX") + suffix; QString fileTemplate2 = prefix + QString("XXXX") + suffix; QString fileTemplate3 = prefix + QString("XXXXXX") + suffix; QString fileTemplate4 = prefix + QString("XXXXXXXX") + suffix; - QTemporaryFile file1(fileTemplate1); - QTemporaryFile file2(fileTemplate2); - QTemporaryFile file3(fileTemplate3); - QTemporaryFile file4(fileTemplate4); - QTemporaryFile file5("test-XXXXXX/" + fileTemplate1); - QTemporaryFile file6("test-XXXXXX/" + fileTemplate3); + QTemporaryFile file1(setFileTemplate ? QString() : fileTemplate1); + QTemporaryFile file2(setFileTemplate ? QString() : fileTemplate2); + QTemporaryFile file3(setFileTemplate ? QString() : fileTemplate3); + QTemporaryFile file4(setFileTemplate ? QString() : fileTemplate4); + QTemporaryFile file5(setFileTemplate ? QString() : "test-XXXXXX/" + fileTemplate1); + QTemporaryFile file6(setFileTemplate ? QString() : "test-XXXXXX/" + fileTemplate3); + + if (setFileTemplate) { + file1.setFileTemplate(fileTemplate1); + file2.setFileTemplate(fileTemplate2); + file3.setFileTemplate(fileTemplate3); + file4.setFileTemplate(fileTemplate4); + file5.setFileTemplate("test-XXXXXX/" + fileTemplate1); + file6.setFileTemplate("test-XXXXXX/" + fileTemplate3); + } if (openResult) { QVERIFY2(file1.open(), qPrintable(file1.errorString())); @@ -709,11 +694,6 @@ void tst_QTemporaryFile::QTBUG_4796() } } } - - Q_FOREACH(QString const &tempName, cleaner.tempNames) - QVERIFY( !QFile::exists(tempName) ); - - cleaner.reset(); } QTEST_MAIN(tst_QTemporaryFile) -- cgit v0.12 From 81f0c44f6a4fd4cfa41af5d5b292008185bf3981 Mon Sep 17 00:00:00 2001 From: suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> Date: Fri, 12 Aug 2011 20:22:30 +0200 Subject: Replace 'i < len-1 && func(i+1)' by 'i+1 < len && func(i+1)' Merge-request: 1299 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> --- demos/gradients/gradients.cpp | 2 +- qmake/generators/makefiledeps.cpp | 2 +- src/corelib/io/qdir.cpp | 6 +++--- src/gui/painting/qpaintengine_raster.cpp | 4 ++-- src/gui/painting/qpaintengine_x11.cpp | 2 +- src/gui/painting/qtessellator.cpp | 2 +- src/gui/widgets/qtabbar.cpp | 2 +- src/qt3support/itemviews/q3listbox.cpp | 6 +++--- src/qt3support/sql/q3datatable.cpp | 2 +- src/qt3support/text/q3richtext.cpp | 2 +- src/scripttools/debugging/qscriptcompletiontask.cpp | 2 +- src/scripttools/debugging/qscriptdebuggercodeview.cpp | 2 +- src/sql/kernel/qsqlresult.cpp | 4 ++-- src/tools/moc/moc.cpp | 4 ++-- 14 files changed, 21 insertions(+), 21 deletions(-) diff --git a/demos/gradients/gradients.cpp b/demos/gradients/gradients.cpp index d8b739b..338d8eb 100644 --- a/demos/gradients/gradients.cpp +++ b/demos/gradients/gradients.cpp @@ -219,7 +219,7 @@ void GradientEditor::pointsUpdated() for (int i=0; i<points.size(); ++i) { qreal x = int(points.at(i).x()); - if (i < points.size() - 1 && x == points.at(i+1).x()) + if (i+1 < points.size() && x == points.at(i+1).x()) continue; QColor color((0x00ff0000 & m_red_shade->colorAt(int(x))) >> 16, (0x0000ff00 & m_green_shade->colorAt(int(x))) >> 8, diff --git a/qmake/generators/makefiledeps.cpp b/qmake/generators/makefiledeps.cpp index d6dab0b..f9cbed1 100644 --- a/qmake/generators/makefiledeps.cpp +++ b/qmake/generators/makefiledeps.cpp @@ -499,7 +499,7 @@ bool QMakeSourceFileInfo::findDeps(SourceFile *file) } else if(*(buffer+x) == '*') { //c style comment for(++x; x < buffer_len; ++x) { if(*(buffer+x) == '*') { - if(x < buffer_len-1 && *(buffer + (x+1)) == '/') { + if(x+1 < buffer_len && *(buffer + (x+1)) == '/') { ++x; break; } diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index f9196e0..3db3dfc 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -2004,7 +2004,7 @@ QString QDir::cleanPath(const QString &path) const QChar *p = name.unicode(); for (int i = 0, last = -1, iwrite = 0; i < len; ++i) { if (p[i] == QLatin1Char('/')) { - while (i < len-1 && p[i+1] == QLatin1Char('/')) { + while (i+1 < len && p[i+1] == QLatin1Char('/')) { #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) //allow unc paths if (!i) break; @@ -2012,9 +2012,9 @@ QString QDir::cleanPath(const QString &path) i++; } bool eaten = false; - if (i < len - 1 && p[i+1] == QLatin1Char('.')) { + if (i+1 < len && p[i+1] == QLatin1Char('.')) { int dotcount = 1; - if (i < len - 2 && p[i+2] == QLatin1Char('.')) + if (i+2 < len && p[i+2] == QLatin1Char('.')) dotcount++; if (i == len - dotcount - 1) { if (dotcount == 1) { diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 76d7316..b4b55de 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -3552,7 +3552,7 @@ void QRasterPaintEngine::drawBitmap(const QPointF &pos, const QImage &image, QSp spans[n].y = y; spans[n].coverage = 255; int len = 1; - while (src_x < w-1 && src[(src_x+1) >> 3] & (0x1 << ((src_x+1) & 7))) { + while (src_x+1 < w && src[(src_x+1) >> 3] & (0x1 << ((src_x+1) & 7))) { ++src_x; ++len; } @@ -3578,7 +3578,7 @@ void QRasterPaintEngine::drawBitmap(const QPointF &pos, const QImage &image, QSp spans[n].y = y; spans[n].coverage = 255; int len = 1; - while (src_x < w-1 && src[(src_x+1) >> 3] & (0x80 >> ((src_x+1) & 7))) { + while (src_x+1 < w && src[(src_x+1) >> 3] & (0x80 >> ((src_x+1) & 7))) { ++src_x; ++len; } diff --git a/src/gui/painting/qpaintengine_x11.cpp b/src/gui/painting/qpaintengine_x11.cpp index 147d2ec..17d141c 100644 --- a/src/gui/painting/qpaintengine_x11.cpp +++ b/src/gui/painting/qpaintengine_x11.cpp @@ -2333,7 +2333,7 @@ static QPainterPath path_for_glyphs(const QVarLengthArray<glyph_t> &glyphs, bool set = src[x >> 3] & (0x80 >> (x & 7)); if (set) { QRect r(xp + x, yp - h, 1, 1); - while (x < glyph->width-1 && src[(x+1) >> 3] & (0x80 >> ((x+1) & 7))) { + while (x+1 < glyph->width && src[(x+1) >> 3] & (0x80 >> ((x+1) & 7))) { ++x; r.setRight(r.right()+1); } diff --git a/src/gui/painting/qtessellator.cpp b/src/gui/painting/qtessellator.cpp index c469438..94a5128 100644 --- a/src/gui/painting/qtessellator.cpp +++ b/src/gui/painting/qtessellator.cpp @@ -893,7 +893,7 @@ void QTessellatorPrivate::processIntersections() QDEBUG() << " adding edge on left"; --min; } - while (max < scanline.size - 1 && scanline.edges[max + 1]->positionAt(y) <= xmax) { + while (max + 1 < scanline.size && scanline.edges[max + 1]->positionAt(y) <= xmax) { QDEBUG() << " adding edge on right"; ++max; } diff --git a/src/gui/widgets/qtabbar.cpp b/src/gui/widgets/qtabbar.cpp index 16e4aad..8faf156 100644 --- a/src/gui/widgets/qtabbar.cpp +++ b/src/gui/widgets/qtabbar.cpp @@ -171,7 +171,7 @@ void QTabBar::initStyleOption(QStyleOptionTab *option, int tabIndex) const if (tabIndex > 0 && tabIndex - 1 == d->currentIndex) option->selectedPosition = QStyleOptionTab::PreviousIsSelected; - else if (tabIndex < totalTabs - 1 && tabIndex + 1 == d->currentIndex) + else if (tabIndex + 1 < totalTabs && tabIndex + 1 == d->currentIndex) option->selectedPosition = QStyleOptionTab::NextIsSelected; else option->selectedPosition = QStyleOptionTab::NotAdjacent; diff --git a/src/qt3support/itemviews/q3listbox.cpp b/src/qt3support/itemviews/q3listbox.cpp index 796a3b8..f1574df 100644 --- a/src/qt3support/itemviews/q3listbox.cpp +++ b/src/qt3support/itemviews/q3listbox.cpp @@ -3531,9 +3531,9 @@ void Q3ListBox::refreshSlot() int col = columnAt(x); int row = rowAt(y); int top = row; - while(col < (int)d->columnPos.size()-1 && d->columnPos[col+1] < x) + while(col+1 < (int)d->columnPos.size() && d->columnPos[col+1] < x) col++; - while(top < (int)d->rowPos.size()-1 && d->rowPos[top+1] < y) + while(top+1 < (int)d->rowPos.size() && d->rowPos[top+1] < y) top++; Q3ListBoxItem * i = item(col * numRows() + row); @@ -3684,7 +3684,7 @@ int Q3ListBox::columnAt(int x) const return numColumns() - 1; int col = 0; - while(col < (int)d->columnPos.size()-1 && d->columnPos[col+1] < x) + while(col+1 < (int)d->columnPos.size() && d->columnPos[col+1] < x) col++; return col; } diff --git a/src/qt3support/sql/q3datatable.cpp b/src/qt3support/sql/q3datatable.cpp index 39ef1d9..35e9fda 100644 --- a/src/qt3support/sql/q3datatable.cpp +++ b/src/qt3support/sql/q3datatable.cpp @@ -710,7 +710,7 @@ bool Q3DataTable::eventFilter( QObject *o, QEvent *e ) return true; } if ( d->dat.mode() != QSql::None ) { - if ( (ke->key() == Qt::Key_Tab) && (c < numCols() - 1) && (!isColumnReadOnly( c+1 ) || d->dat.mode() == QSql::Insert) ) + if ( (ke->key() == Qt::Key_Tab) && (c+1 < numCols()) && (!isColumnReadOnly( c+1 ) || d->dat.mode() == QSql::Insert) ) d->continuousEdit = true; else if ( (ke->key() == Qt::Key_BackTab) && (c > 0) && (!isColumnReadOnly( c-1 ) || d->dat.mode() == QSql::Insert) ) d->continuousEdit = true; diff --git a/src/qt3support/text/q3richtext.cpp b/src/qt3support/text/q3richtext.cpp index dc1476c..c367c0c 100644 --- a/src/qt3support/text/q3richtext.cpp +++ b/src/qt3support/text/q3richtext.cpp @@ -121,7 +121,7 @@ static inline bool isBreakable(Q3TextString *string, int pos) { if (string->at(pos).nobreak) return false; - return (pos < string->length()-1 && string->at(pos+1).softBreak); + return (pos+1 < string->length() && string->at(pos+1).softBreak); } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/src/scripttools/debugging/qscriptcompletiontask.cpp b/src/scripttools/debugging/qscriptcompletiontask.cpp index fb250b7..3c94a21 100644 --- a/src/scripttools/debugging/qscriptcompletiontask.cpp +++ b/src/scripttools/debugging/qscriptcompletiontask.cpp @@ -172,7 +172,7 @@ void QScriptCompletionTaskPrivate::completeScriptExpression() while ((pos > 0) && isIdentChar(contents.at(pos-1))) --pos; int pos2 = cursorPosition - 1; - while ((pos2 < contents.size()-1) && isIdentChar(contents.at(pos2+1))) + while ((pos2+1 < contents.size()) && isIdentChar(contents.at(pos2+1))) ++pos2; QString ident = contents.mid(pos, pos2 - pos + 1); position = pos; diff --git a/src/scripttools/debugging/qscriptdebuggercodeview.cpp b/src/scripttools/debugging/qscriptdebuggercodeview.cpp index 7c99723..65fd366 100644 --- a/src/scripttools/debugging/qscriptdebuggercodeview.cpp +++ b/src/scripttools/debugging/qscriptdebuggercodeview.cpp @@ -233,7 +233,7 @@ bool QScriptDebuggerCodeView::event(QEvent *e) return false; } int pos2 = linePosition - 1; - while ((pos2 < contents.size()-1) && isIdentChar(contents.at(pos2+1))) + while ((pos2+1 < contents.size()) && isIdentChar(contents.at(pos2+1))) ++pos2; QString ident = contents.mid(pos, pos2 - pos + 1); diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index f2b2ccf..71a81c0 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -183,7 +183,7 @@ QString QSqlResultPrivate::namedToPositionalBinding() QChar ch = sql.at(i); if (ch == QLatin1Char(':') && !inQuote && (i == 0 || sql.at(i - 1) != QLatin1Char(':')) - && (i < n - 1 && qIsAlnum(sql.at(i + 1)))) { + && (i + 1 < n && qIsAlnum(sql.at(i + 1)))) { int pos = i + 2; while (pos < n && qIsAlnum(sql.at(pos))) ++pos; @@ -618,7 +618,7 @@ bool QSqlResult::prepare(const QString& query) QChar ch = query.at(i); if (ch == QLatin1Char(':') && !inQuote && (i == 0 || query.at(i - 1) != QLatin1Char(':')) - && (i < n - 1 && qIsAlnum(query.at(i + 1)))) { + && (i + 1 < n && qIsAlnum(query.at(i + 1)))) { int pos = i + 2; while (pos < n && qIsAlnum(query.at(pos))) ++pos; diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index 13f57f5..9309db1 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -216,8 +216,8 @@ Type Moc::parseType() QByteArray templ = lexemUntil(RANGLE); for (int i = 0; i < templ.size(); ++i) { type.name += templ.at(i); - if ((templ.at(i) == '<' && i < templ.size()-1 && templ.at(i+1) == ':') - || (templ.at(i) == '>' && i < templ.size()-1 && templ.at(i+1) == '>')) { + if ((templ.at(i) == '<' && i+1 < templ.size() && templ.at(i+1) == ':') + || (templ.at(i) == '>' && i+1 < templ.size() && templ.at(i+1) == '>')) { type.name += ' '; } } -- cgit v0.12 From 9db6959f8893a64146124db0cfafbcb154a9e105 Mon Sep 17 00:00:00 2001 From: Styopa Semenukha <semenukha@gmail.com> Date: Fri, 12 Aug 2011 21:19:26 +0200 Subject: Added missing no_include_pwd check Merge-request: 2619 Reviewed-by: ossi --- qmake/generators/makefile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 00f6b4a..eda489f 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -784,7 +784,7 @@ MakefileGenerator::init() (*it) = Option::fixPathToLocalOS((*it)); } - { //get the output_dir into the pwd + if(!project->isActiveConfig("no_include_pwd")) { //get the output_dir into the pwd if(Option::output_dir != qmake_getpwd()) project->values("INCLUDEPATH").append("."); } -- cgit v0.12 From 9e656ce0f7bda4bca4ae55a7aefe1617bc2805ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Thu, 18 Aug 2011 11:08:26 +0200 Subject: Leftovers from 401722ef9e6fe79bd41f9d5f79668f5c4997c8e6 This no longer necessary template specialization went unnoticed inside the Windows/Symbian #ifdef. It breaks compilation on those platforms, now that qstringbuilder.h is not included and QConcatenable is unknown to the compiler. --- src/corelib/io/qtemporaryfile.cpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index 375d07f..ea5f8a5 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -72,20 +72,6 @@ static inline Char Latin1Char(char ch) return ushort(uchar(ch)); } -template <> -struct QConcatenable<Char> -{ - typedef Char type; - typedef QString ConvertTo; - enum { ExactSize = true }; - static int size(const Char &) { return 1; } - - static inline void appendTo(const Char &u16, QChar *&out) - { - *out++ = QChar(u16); - } -}; - # ifdef Q_OS_WIN typedef HANDLE NativeFileHandle; # else // Q_OS_SYMBIAN -- cgit v0.12 From 1679b2d71f4f573699aad20aebf4eacc7605fdc8 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Thu, 18 Aug 2011 15:43:55 +0300 Subject: Exact word bubble doesn't disappear when screen is tapped Sync FEP-aware text editors state to native side. Thus, native side can then do various operations based on editor state - such as removing the user typed 'exact word bubble'. Task-number: QTBUG-20919 Reviewed-by: Miikka Heikkinen --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index d545f2e..8bdaa22 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -1077,6 +1077,10 @@ void QCoeFepInputContext::CancelFepInlineEdit() if (m_hasTempPreeditString) return; + // Sync with native side editor state. Native side can then do various operations + // based on editor state, such as removing 'exact word bubble'. + ReportAknEdStateEvent(MAknEdStateObserver::EAknSyncEdwinState); + QList<QInputMethodEvent::Attribute> attributes; QInputMethodEvent event(QLatin1String(""), attributes); event.setCommitString(QLatin1String(""), 0, 0); -- cgit v0.12 From 5ce63a6ba3f5605967b17adcf64f17ecdc875e09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= <tor.arne.vestbo@nokia.com> Date: Thu, 18 Aug 2011 15:55:58 +0200 Subject: Revert "Fix build with the Clang compiler" This reverts commit 182b10dbad23e9da310c0d600095f17c41dd0d3c. --- src/gui/image/qpnghandler.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp index 812c450..f7d07a5 100644 --- a/src/gui/image/qpnghandler.cpp +++ b/src/gui/image/qpnghandler.cpp @@ -420,7 +420,7 @@ bool Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngHeader() return false; } - if (setjmp((*png_set_longjmp_fn((png_ptr), (png_longjmp_ptr)longjmp, sizeof(jmp_buf))))) { + if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); png_ptr = 0; return false; @@ -449,7 +449,7 @@ bool Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngImage(QImage *outImage) } row_pointers = 0; - if (setjmp((*png_set_longjmp_fn((png_ptr), (png_longjmp_ptr)longjmp, sizeof(jmp_buf))))) { + if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); delete [] row_pointers; png_ptr = 0; @@ -723,7 +723,7 @@ bool Q_INTERNAL_WIN_NO_THROW QPNGImageWriter::writeImage(const QImage& image, in return false; } - if (setjmp((*png_set_longjmp_fn((png_ptr), (png_longjmp_ptr)longjmp, sizeof(jmp_buf))))) { + if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_write_struct(&png_ptr, &info_ptr); return false; } -- cgit v0.12 From 41f1d932911f9be52b2131c79e050dbc429d1f3e Mon Sep 17 00:00:00 2001 From: Ademar de Souza Reis Jr <ademar.reis@openbossa.org> Date: Thu, 18 Aug 2011 14:30:46 -0300 Subject: Updated WebKit to 4277f8277b1daf3ec33c996f5a760ccd1113af4b This time including webkit/include/ files generated on a Mac (thanks to Alexis Menard). --- src/3rdparty/webkit/.tag | 2 +- .../webkit/Source/JavaScriptCore/ChangeLog | 11 +++++ .../Source/JavaScriptCore/runtime/JSObject.h | 4 +- src/3rdparty/webkit/Source/WebCore/ChangeLog | 47 ++++++++++++++++++++++ .../WebCore/editing/ReplaceSelectionCommand.cpp | 8 ++-- .../Source/WebCore/editing/SelectionController.cpp | 4 +- .../Source/WebCore/html/parser/HTMLTreeBuilder.cpp | 18 ++++----- .../Source/WebCore/rendering/RenderBlock.cpp | 8 ++-- src/3rdparty/webkit/Source/WebKit.pri | 1 + src/3rdparty/webkit/VERSION | 2 +- .../webkit/include/JavaScriptCore/APICast.h | 1 + src/3rdparty/webkit/include/JavaScriptCore/Error.h | 1 + .../include/JavaScriptCore/FunctionPrototype.h | 1 + .../include/JavaScriptCore/InternalFunction.h | 1 + .../webkit/include/JavaScriptCore/JSBase.h | 1 + .../webkit/include/JavaScriptCore/JSContextRef.h | 1 + .../webkit/include/JavaScriptCore/JSGlobalObject.h | 1 + .../webkit/include/JavaScriptCore/JSLock.h | 1 + .../webkit/include/JavaScriptCore/JSObject.h | 1 + .../JavaScriptCore/JSObjectWithGlobalObject.h | 1 + .../webkit/include/JavaScriptCore/JSStringRef.h | 1 + .../webkit/include/JavaScriptCore/JSValueRef.h | 1 + .../webkit/include/JavaScriptCore/JavaScript.h | 1 + .../include/JavaScriptCore/ObjectPrototype.h | 1 + .../webkit/include/JavaScriptCore/SourceCode.h | 1 + .../webkit/include/JavaScriptCore/Strong.h | 1 + .../webkit/include/QtWebKit/QGraphicsWebView | 1 + src/3rdparty/webkit/include/QtWebKit/QWebDatabase | 1 + src/3rdparty/webkit/include/QtWebKit/QWebElement | 1 + .../webkit/include/QtWebKit/QWebElementCollection | 1 + src/3rdparty/webkit/include/QtWebKit/QWebFrame | 1 + src/3rdparty/webkit/include/QtWebKit/QWebHistory | 1 + .../webkit/include/QtWebKit/QWebHistoryInterface | 1 + .../webkit/include/QtWebKit/QWebHistoryItem | 1 + .../webkit/include/QtWebKit/QWebHitTestResult | 1 + src/3rdparty/webkit/include/QtWebKit/QWebInspector | 1 + src/3rdparty/webkit/include/QtWebKit/QWebPage | 1 + .../webkit/include/QtWebKit/QWebPluginFactory | 1 + .../webkit/include/QtWebKit/QWebSecurityOrigin | 1 + src/3rdparty/webkit/include/QtWebKit/QWebSettings | 1 + src/3rdparty/webkit/include/QtWebKit/QWebView | 1 + src/3rdparty/webkit/include/QtWebKit/QtWebKit | 19 +++++++++ .../webkit/include/QtWebKit/ViewportAttributes | 1 + .../webkit/include/QtWebKit/classheaders.pri | 1 + .../webkit/include/QtWebKit/qgraphicswebview.h | 1 + .../webkit/include/QtWebKit/qwebdatabase.h | 1 + src/3rdparty/webkit/include/QtWebKit/qwebelement.h | 1 + src/3rdparty/webkit/include/QtWebKit/qwebframe.h | 1 + src/3rdparty/webkit/include/QtWebKit/qwebhistory.h | 1 + .../webkit/include/QtWebKit/qwebhistoryinterface.h | 1 + .../webkit/include/QtWebKit/qwebinspector.h | 1 + .../webkit/include/QtWebKit/qwebkitglobal.h | 1 + .../include/QtWebKit/qwebkitplatformplugin.h | 1 + .../webkit/include/QtWebKit/qwebkitversion.h | 1 + src/3rdparty/webkit/include/QtWebKit/qwebpage.h | 1 + .../webkit/include/QtWebKit/qwebpluginfactory.h | 1 + .../webkit/include/QtWebKit/qwebsecurityorigin.h | 1 + .../webkit/include/QtWebKit/qwebsettings.h | 1 + src/3rdparty/webkit/include/QtWebKit/qwebview.h | 1 + .../webkit/include/WebCore/AXObjectCache.h | 1 + .../webkit/include/WebCore/AbstractDatabase.h | 1 + .../webkit/include/WebCore/AnimationController.h | 1 + .../webkit/include/WebCore/ApplicationCache.h | 1 + .../include/WebCore/ApplicationCacheStorage.h | 1 + .../webkit/include/WebCore/ArchiveResource.h | 1 + .../webkit/include/WebCore/AuthenticationClient.h | 1 + .../webkit/include/WebCore/BackForwardController.h | 1 + .../webkit/include/WebCore/BackForwardList.h | 1 + src/3rdparty/webkit/include/WebCore/BitmapImage.h | 1 + .../include/WebCore/CSSComputedStyleDeclaration.h | 1 + src/3rdparty/webkit/include/WebCore/Chrome.h | 1 + src/3rdparty/webkit/include/WebCore/ChromeClient.h | 1 + src/3rdparty/webkit/include/WebCore/Color.h | 1 + src/3rdparty/webkit/include/WebCore/ContextMenu.h | 1 + .../webkit/include/WebCore/ContextMenuClient.h | 1 + .../webkit/include/WebCore/ContextMenuController.h | 1 + .../webkit/include/WebCore/ContextMenuItem.h | 1 + src/3rdparty/webkit/include/WebCore/CookieJar.h | 1 + .../webkit/include/WebCore/CookieStorage.h | 1 + .../webkit/include/WebCore/CookiesStrategy.h | 1 + src/3rdparty/webkit/include/WebCore/Credential.h | 1 + .../WebCore/CrossOriginPreflightResultCache.h | 1 + src/3rdparty/webkit/include/WebCore/Cursor.h | 1 + .../webkit/include/WebCore/DOMImplementation.h | 1 + .../webkit/include/WebCore/DOMWrapperWorld.h | 1 + .../webkit/include/WebCore/DatabaseDetails.h | 1 + .../webkit/include/WebCore/DatabaseTracker.h | 1 + .../webkit/include/WebCore/DatabaseTrackerClient.h | 1 + src/3rdparty/webkit/include/WebCore/Document.h | 1 + .../webkit/include/WebCore/DocumentFragment.h | 1 + .../webkit/include/WebCore/DocumentLoader.h | 1 + .../include/WebCore/DocumentMarkerController.h | 1 + src/3rdparty/webkit/include/WebCore/DragActions.h | 1 + src/3rdparty/webkit/include/WebCore/DragClient.h | 1 + .../webkit/include/WebCore/DragController.h | 1 + src/3rdparty/webkit/include/WebCore/DragData.h | 1 + src/3rdparty/webkit/include/WebCore/EditAction.h | 1 + src/3rdparty/webkit/include/WebCore/EditCommand.h | 1 + src/3rdparty/webkit/include/WebCore/Editor.h | 1 + src/3rdparty/webkit/include/WebCore/EditorClient.h | 1 + .../webkit/include/WebCore/EditorInsertAction.h | 1 + src/3rdparty/webkit/include/WebCore/Element.h | 1 + .../include/WebCore/EmptyProtocolDefinitions.h | 1 + src/3rdparty/webkit/include/WebCore/Event.h | 1 + src/3rdparty/webkit/include/WebCore/EventHandler.h | 1 + src/3rdparty/webkit/include/WebCore/FileChooser.h | 1 + src/3rdparty/webkit/include/WebCore/FileSystem.h | 1 + src/3rdparty/webkit/include/WebCore/FloatPoint.h | 1 + src/3rdparty/webkit/include/WebCore/FloatRect.h | 1 + src/3rdparty/webkit/include/WebCore/FloatSize.h | 1 + .../webkit/include/WebCore/FocusController.h | 1 + .../webkit/include/WebCore/FocusDirection.h | 1 + src/3rdparty/webkit/include/WebCore/Font.h | 1 + .../webkit/include/WebCore/FontRenderingMode.h | 1 + src/3rdparty/webkit/include/WebCore/FormState.h | 1 + src/3rdparty/webkit/include/WebCore/Frame.h | 1 + .../webkit/include/WebCore/FrameLoadRequest.h | 1 + src/3rdparty/webkit/include/WebCore/FrameLoader.h | 1 + .../webkit/include/WebCore/FrameLoaderClient.h | 1 + .../webkit/include/WebCore/FrameLoaderTypes.h | 1 + .../include/WebCore/FrameNetworkingContext.h | 1 + src/3rdparty/webkit/include/WebCore/FrameView.h | 1 + src/3rdparty/webkit/include/WebCore/GCController.h | 1 + src/3rdparty/webkit/include/WebCore/Geolocation.h | 1 + .../webkit/include/WebCore/GeolocationClient.h | 1 + .../webkit/include/WebCore/GeolocationController.h | 1 + .../webkit/include/WebCore/GeolocationError.h | 1 + .../webkit/include/WebCore/GeolocationPosition.h | 1 + src/3rdparty/webkit/include/WebCore/Gradient.h | 1 + .../webkit/include/WebCore/GraphicsContext.h | 1 + .../webkit/include/WebCore/GraphicsContextCG.h | 1 + .../webkit/include/WebCore/GraphicsLayer.h | 1 + .../webkit/include/WebCore/GraphicsLayerCA.h | 1 + .../webkit/include/WebCore/GraphicsLayerClient.h | 1 + .../webkit/include/WebCore/HTMLAppletElement.h | 1 + .../webkit/include/WebCore/HTMLFormElement.h | 1 + .../webkit/include/WebCore/HTMLFrameElement.h | 1 + .../webkit/include/WebCore/HTMLFrameOwnerElement.h | 1 + .../webkit/include/WebCore/HTMLIFrameElement.h | 1 + .../webkit/include/WebCore/HTMLInputElement.h | 1 + .../webkit/include/WebCore/HTMLMediaElement.h | 1 + .../webkit/include/WebCore/HTMLPlugInElement.h | 1 + .../include/WebCore/HTMLPlugInImageElement.h | 1 + .../webkit/include/WebCore/HTMLTableCellElement.h | 1 + .../webkit/include/WebCore/HTMLTextAreaElement.h | 1 + .../webkit/include/WebCore/HTTPHeaderMap.h | 1 + src/3rdparty/webkit/include/WebCore/HistoryItem.h | 1 + .../webkit/include/WebCore/HitTestRequest.h | 1 + .../webkit/include/WebCore/HitTestResult.h | 1 + src/3rdparty/webkit/include/WebCore/HostWindow.h | 1 + src/3rdparty/webkit/include/WebCore/Icon.h | 1 + src/3rdparty/webkit/include/WebCore/IconDatabase.h | 1 + .../webkit/include/WebCore/IconDatabaseBase.h | 1 + .../webkit/include/WebCore/IconDatabaseClient.h | 1 + .../webkit/include/WebCore/IdentifierRep.h | 1 + src/3rdparty/webkit/include/WebCore/Image.h | 1 + .../webkit/include/WebCore/InspectorClient.h | 1 + .../webkit/include/WebCore/InspectorController.h | 1 + .../include/WebCore/InspectorFrontendClientLocal.h | 1 + src/3rdparty/webkit/include/WebCore/IntPoint.h | 1 + src/3rdparty/webkit/include/WebCore/IntRect.h | 1 + src/3rdparty/webkit/include/WebCore/IntRectHash.h | 1 + src/3rdparty/webkit/include/WebCore/IntSize.h | 1 + .../webkit/include/WebCore/JSCSSStyleDeclaration.h | 1 + .../include/WebCore/JSPluginElementFunctions.h | 1 + src/3rdparty/webkit/include/WebCore/KURL.h | 1 + .../webkit/include/WebCore/KeyboardEvent.h | 1 + src/3rdparty/webkit/include/WebCore/Language.h | 1 + src/3rdparty/webkit/include/WebCore/LinkHash.h | 1 + .../webkit/include/WebCore/LocalizedStrings.h | 1 + src/3rdparty/webkit/include/WebCore/Logging.h | 1 + .../webkit/include/WebCore/MIMETypeRegistry.h | 1 + .../webkit/include/WebCore/MediaCanStartListener.h | 1 + src/3rdparty/webkit/include/WebCore/MemoryCache.h | 1 + src/3rdparty/webkit/include/WebCore/MouseEvent.h | 1 + .../webkit/include/WebCore/NavigationAction.h | 1 + .../include/WebCore/NetscapePlugInStreamLoader.h | 1 + .../webkit/include/WebCore/NetworkingContext.h | 1 + src/3rdparty/webkit/include/WebCore/Node.h | 1 + .../webkit/include/WebCore/NotImplemented.h | 1 + src/3rdparty/webkit/include/WebCore/Page.h | 1 + src/3rdparty/webkit/include/WebCore/PageCache.h | 1 + src/3rdparty/webkit/include/WebCore/PageGroup.h | 1 + src/3rdparty/webkit/include/WebCore/Path.h | 1 + .../webkit/include/WebCore/PlatformCALayer.h | 1 + .../webkit/include/WebCore/PlatformContextCairo.h | 1 + .../webkit/include/WebCore/PlatformGestureEvent.h | 1 + .../webkit/include/WebCore/PlatformKeyboardEvent.h | 1 + .../webkit/include/WebCore/PlatformMouseEvent.h | 1 + .../webkit/include/WebCore/PlatformStrategies.h | 1 + .../webkit/include/WebCore/PlatformTouchEvent.h | 1 + .../webkit/include/WebCore/PlatformTouchPoint.h | 1 + .../webkit/include/WebCore/PlatformWheelEvent.h | 1 + src/3rdparty/webkit/include/WebCore/PluginData.h | 1 + .../webkit/include/WebCore/PluginStrategy.h | 1 + .../webkit/include/WebCore/PluginViewBase.h | 1 + .../webkit/include/WebCore/PolicyChecker.h | 1 + src/3rdparty/webkit/include/WebCore/PopupMenu.h | 1 + .../webkit/include/WebCore/PopupMenuClient.h | 1 + .../webkit/include/WebCore/PopupMenuStyle.h | 1 + src/3rdparty/webkit/include/WebCore/PrintContext.h | 1 + .../webkit/include/WebCore/ProgressTracker.h | 1 + .../webkit/include/WebCore/ProtectionSpace.h | 1 + src/3rdparty/webkit/include/WebCore/ProxyServer.h | 1 + src/3rdparty/webkit/include/WebCore/Range.h | 1 + .../webkit/include/WebCore/RenderEmbeddedObject.h | 1 + src/3rdparty/webkit/include/WebCore/RenderLayer.h | 1 + src/3rdparty/webkit/include/WebCore/RenderTheme.h | 1 + .../webkit/include/WebCore/RenderTreeAsText.h | 1 + src/3rdparty/webkit/include/WebCore/RenderView.h | 1 + .../include/WebCore/ReplaceSelectionCommand.h | 1 + .../webkit/include/WebCore/ResourceHandle.h | 1 + .../webkit/include/WebCore/ResourceLoadScheduler.h | 1 + .../include/WebCore/RuntimeEnabledFeatures.h | 1 + .../webkit/include/WebCore/SchemeRegistry.h | 1 + .../webkit/include/WebCore/ScriptController.h | 1 + src/3rdparty/webkit/include/WebCore/ScriptValue.h | 1 + src/3rdparty/webkit/include/WebCore/ScrollTypes.h | 1 + src/3rdparty/webkit/include/WebCore/ScrollView.h | 1 + .../webkit/include/WebCore/ScrollableArea.h | 1 + src/3rdparty/webkit/include/WebCore/Scrollbar.h | 1 + .../webkit/include/WebCore/ScrollbarTheme.h | 1 + .../webkit/include/WebCore/SearchPopupMenu.h | 1 + .../webkit/include/WebCore/SecurityOrigin.h | 1 + .../webkit/include/WebCore/SecurityOriginHash.h | 1 + .../webkit/include/WebCore/SerializedScriptValue.h | 1 + src/3rdparty/webkit/include/WebCore/Settings.h | 1 + src/3rdparty/webkit/include/WebCore/ShadowRoot.h | 1 + src/3rdparty/webkit/include/WebCore/SharedBuffer.h | 1 + .../webkit/include/WebCore/SimpleFontData.h | 1 + src/3rdparty/webkit/include/WebCore/SoftLinking.h | 1 + .../include/WebCore/SpellingCorrectionController.h | 1 + .../webkit/include/WebCore/StorageTracker.h | 1 + .../webkit/include/WebCore/SubstituteData.h | 1 + src/3rdparty/webkit/include/WebCore/TextAffinity.h | 1 + .../webkit/include/WebCore/TextCheckerClient.h | 1 + .../webkit/include/WebCore/TextDirection.h | 1 + src/3rdparty/webkit/include/WebCore/TextIterator.h | 1 + .../webkit/include/WebCore/TextResourceDecoder.h | 1 + src/3rdparty/webkit/include/WebCore/TextRun.h | 1 + src/3rdparty/webkit/include/WebCore/Timer.h | 1 + .../webkit/include/WebCore/UIEventWithKeyState.h | 1 + .../webkit/include/WebCore/UserContentTypes.h | 1 + .../webkit/include/WebCore/UserContentURLPattern.h | 1 + .../webkit/include/WebCore/UserGestureIndicator.h | 1 + .../webkit/include/WebCore/UserScriptTypes.h | 1 + .../include/WebCore/UserTypingGestureIndicator.h | 1 + .../webkit/include/WebCore/ViewportArguments.h | 1 + .../webkit/include/WebCore/VisiblePosition.h | 1 + .../webkit/include/WebCore/VisitedLinkStrategy.h | 1 + .../webkit/include/WebCore/WebCoreKeyboardUIMode.h | 1 + src/3rdparty/webkit/include/WebCore/Widget.h | 1 + .../webkit/include/WebCore/WindowFeatures.h | 1 + src/3rdparty/webkit/include/WebCore/markup.h | 1 + src/3rdparty/webkit/include/WebCore/npapi.h | 1 + src/3rdparty/webkit/include/WebCore/npfunctions.h | 1 + src/3rdparty/webkit/include/WebCore/npruntime.h | 1 + .../webkit/include/WebCore/npruntime_internal.h | 1 + src/3rdparty/webkit/include/WebKit2/RunLoop.h | 1 + src/3rdparty/webkit/include/WebKit2/WKArray.h | 1 + .../webkit/include/WebKit2/WKBackForwardList.h | 1 + .../webkit/include/WebKit2/WKBackForwardListItem.h | 1 + src/3rdparty/webkit/include/WebKit2/WKBase.h | 1 + src/3rdparty/webkit/include/WebKit2/WKContext.h | 1 + .../include/WebKit2/WKContextMenuItemTypes.h | 1 + .../webkit/include/WebKit2/WKCookieManager.h | 1 + .../webkit/include/WebKit2/WKCredentialTypes.h | 1 + src/3rdparty/webkit/include/WebKit2/WKData.h | 1 + src/3rdparty/webkit/include/WebKit2/WKDictionary.h | 1 + src/3rdparty/webkit/include/WebKit2/WKError.h | 1 + src/3rdparty/webkit/include/WebKit2/WKEvent.h | 1 + .../webkit/include/WebKit2/WKFindOptions.h | 1 + .../include/WebKit2/WKFormSubmissionListener.h | 1 + src/3rdparty/webkit/include/WebKit2/WKFrame.h | 1 + .../webkit/include/WebKit2/WKFramePolicyListener.h | 1 + .../webkit/include/WebKit2/WKGeolocationManager.h | 1 + .../WebKit2/WKGeolocationPermissionRequest.h | 1 + .../webkit/include/WebKit2/WKGeolocationPosition.h | 1 + src/3rdparty/webkit/include/WebKit2/WKGeometry.h | 1 + .../webkit/include/WebKit2/WKGraphicsContext.h | 1 + src/3rdparty/webkit/include/WebKit2/WKImage.h | 1 + .../webkit/include/WebKit2/WKMutableArray.h | 1 + .../webkit/include/WebKit2/WKMutableDictionary.h | 1 + .../webkit/include/WebKit2/WKNativeEvent.h | 1 + .../webkit/include/WebKit2/WKNavigationData.h | 1 + src/3rdparty/webkit/include/WebKit2/WKNumber.h | 1 + .../webkit/include/WebKit2/WKOpenPanelParameters.h | 1 + .../include/WebKit2/WKOpenPanelResultListener.h | 1 + src/3rdparty/webkit/include/WebKit2/WKPage.h | 1 + src/3rdparty/webkit/include/WebKit2/WKPageGroup.h | 1 + .../webkit/include/WebKit2/WKPageLoadTypes.h | 1 + .../webkit/include/WebKit2/WKPreferences.h | 1 + .../include/WebKit2/WKProtectionSpaceTypes.h | 1 + src/3rdparty/webkit/include/WebKit2/WKRetainPtr.h | 1 + src/3rdparty/webkit/include/WebKit2/WKString.h | 1 + src/3rdparty/webkit/include/WebKit2/WKType.h | 1 + src/3rdparty/webkit/include/WebKit2/WKURL.h | 1 + src/3rdparty/webkit/include/WebKit2/WKURLRequest.h | 1 + .../webkit/include/WebKit2/WKURLResponse.h | 1 + src/3rdparty/webkit/include/WebKit2/WKView.h | 1 + src/3rdparty/webkit/include/WebKit2/WebProcess.h | 1 + 301 files changed, 392 insertions(+), 22 deletions(-) create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/APICast.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/Error.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/FunctionPrototype.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/InternalFunction.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/JSBase.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/JSContextRef.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/JSGlobalObject.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/JSLock.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/JSObject.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/JSObjectWithGlobalObject.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/JSStringRef.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/JSValueRef.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/JavaScript.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/ObjectPrototype.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/SourceCode.h create mode 100644 src/3rdparty/webkit/include/JavaScriptCore/Strong.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/QGraphicsWebView create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebDatabase create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebElement create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebElementCollection create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebFrame create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebHistory create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebHistoryInterface create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebHistoryItem create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebHitTestResult create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebInspector create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebPage create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebPluginFactory create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebSecurityOrigin create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebSettings create mode 100644 src/3rdparty/webkit/include/QtWebKit/QWebView create mode 100644 src/3rdparty/webkit/include/QtWebKit/QtWebKit create mode 100644 src/3rdparty/webkit/include/QtWebKit/ViewportAttributes create mode 100644 src/3rdparty/webkit/include/QtWebKit/classheaders.pri create mode 100644 src/3rdparty/webkit/include/QtWebKit/qgraphicswebview.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebdatabase.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebelement.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebframe.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebhistory.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebhistoryinterface.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebinspector.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebkitglobal.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebkitplatformplugin.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebkitversion.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebpage.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebpluginfactory.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebsecurityorigin.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebsettings.h create mode 100644 src/3rdparty/webkit/include/QtWebKit/qwebview.h create mode 100644 src/3rdparty/webkit/include/WebCore/AXObjectCache.h create mode 100644 src/3rdparty/webkit/include/WebCore/AbstractDatabase.h create mode 100644 src/3rdparty/webkit/include/WebCore/AnimationController.h create mode 100644 src/3rdparty/webkit/include/WebCore/ApplicationCache.h create mode 100644 src/3rdparty/webkit/include/WebCore/ApplicationCacheStorage.h create mode 100644 src/3rdparty/webkit/include/WebCore/ArchiveResource.h create mode 100644 src/3rdparty/webkit/include/WebCore/AuthenticationClient.h create mode 100644 src/3rdparty/webkit/include/WebCore/BackForwardController.h create mode 100644 src/3rdparty/webkit/include/WebCore/BackForwardList.h create mode 100644 src/3rdparty/webkit/include/WebCore/BitmapImage.h create mode 100644 src/3rdparty/webkit/include/WebCore/CSSComputedStyleDeclaration.h create mode 100644 src/3rdparty/webkit/include/WebCore/Chrome.h create mode 100644 src/3rdparty/webkit/include/WebCore/ChromeClient.h create mode 100644 src/3rdparty/webkit/include/WebCore/Color.h create mode 100644 src/3rdparty/webkit/include/WebCore/ContextMenu.h create mode 100644 src/3rdparty/webkit/include/WebCore/ContextMenuClient.h create mode 100644 src/3rdparty/webkit/include/WebCore/ContextMenuController.h create mode 100644 src/3rdparty/webkit/include/WebCore/ContextMenuItem.h create mode 100644 src/3rdparty/webkit/include/WebCore/CookieJar.h create mode 100644 src/3rdparty/webkit/include/WebCore/CookieStorage.h create mode 100644 src/3rdparty/webkit/include/WebCore/CookiesStrategy.h create mode 100644 src/3rdparty/webkit/include/WebCore/Credential.h create mode 100644 src/3rdparty/webkit/include/WebCore/CrossOriginPreflightResultCache.h create mode 100644 src/3rdparty/webkit/include/WebCore/Cursor.h create mode 100644 src/3rdparty/webkit/include/WebCore/DOMImplementation.h create mode 100644 src/3rdparty/webkit/include/WebCore/DOMWrapperWorld.h create mode 100644 src/3rdparty/webkit/include/WebCore/DatabaseDetails.h create mode 100644 src/3rdparty/webkit/include/WebCore/DatabaseTracker.h create mode 100644 src/3rdparty/webkit/include/WebCore/DatabaseTrackerClient.h create mode 100644 src/3rdparty/webkit/include/WebCore/Document.h create mode 100644 src/3rdparty/webkit/include/WebCore/DocumentFragment.h create mode 100644 src/3rdparty/webkit/include/WebCore/DocumentLoader.h create mode 100644 src/3rdparty/webkit/include/WebCore/DocumentMarkerController.h create mode 100644 src/3rdparty/webkit/include/WebCore/DragActions.h create mode 100644 src/3rdparty/webkit/include/WebCore/DragClient.h create mode 100644 src/3rdparty/webkit/include/WebCore/DragController.h create mode 100644 src/3rdparty/webkit/include/WebCore/DragData.h create mode 100644 src/3rdparty/webkit/include/WebCore/EditAction.h create mode 100644 src/3rdparty/webkit/include/WebCore/EditCommand.h create mode 100644 src/3rdparty/webkit/include/WebCore/Editor.h create mode 100644 src/3rdparty/webkit/include/WebCore/EditorClient.h create mode 100644 src/3rdparty/webkit/include/WebCore/EditorInsertAction.h create mode 100644 src/3rdparty/webkit/include/WebCore/Element.h create mode 100644 src/3rdparty/webkit/include/WebCore/EmptyProtocolDefinitions.h create mode 100644 src/3rdparty/webkit/include/WebCore/Event.h create mode 100644 src/3rdparty/webkit/include/WebCore/EventHandler.h create mode 100644 src/3rdparty/webkit/include/WebCore/FileChooser.h create mode 100644 src/3rdparty/webkit/include/WebCore/FileSystem.h create mode 100644 src/3rdparty/webkit/include/WebCore/FloatPoint.h create mode 100644 src/3rdparty/webkit/include/WebCore/FloatRect.h create mode 100644 src/3rdparty/webkit/include/WebCore/FloatSize.h create mode 100644 src/3rdparty/webkit/include/WebCore/FocusController.h create mode 100644 src/3rdparty/webkit/include/WebCore/FocusDirection.h create mode 100644 src/3rdparty/webkit/include/WebCore/Font.h create mode 100644 src/3rdparty/webkit/include/WebCore/FontRenderingMode.h create mode 100644 src/3rdparty/webkit/include/WebCore/FormState.h create mode 100644 src/3rdparty/webkit/include/WebCore/Frame.h create mode 100644 src/3rdparty/webkit/include/WebCore/FrameLoadRequest.h create mode 100644 src/3rdparty/webkit/include/WebCore/FrameLoader.h create mode 100644 src/3rdparty/webkit/include/WebCore/FrameLoaderClient.h create mode 100644 src/3rdparty/webkit/include/WebCore/FrameLoaderTypes.h create mode 100644 src/3rdparty/webkit/include/WebCore/FrameNetworkingContext.h create mode 100644 src/3rdparty/webkit/include/WebCore/FrameView.h create mode 100644 src/3rdparty/webkit/include/WebCore/GCController.h create mode 100644 src/3rdparty/webkit/include/WebCore/Geolocation.h create mode 100644 src/3rdparty/webkit/include/WebCore/GeolocationClient.h create mode 100644 src/3rdparty/webkit/include/WebCore/GeolocationController.h create mode 100644 src/3rdparty/webkit/include/WebCore/GeolocationError.h create mode 100644 src/3rdparty/webkit/include/WebCore/GeolocationPosition.h create mode 100644 src/3rdparty/webkit/include/WebCore/Gradient.h create mode 100644 src/3rdparty/webkit/include/WebCore/GraphicsContext.h create mode 100644 src/3rdparty/webkit/include/WebCore/GraphicsContextCG.h create mode 100644 src/3rdparty/webkit/include/WebCore/GraphicsLayer.h create mode 100644 src/3rdparty/webkit/include/WebCore/GraphicsLayerCA.h create mode 100644 src/3rdparty/webkit/include/WebCore/GraphicsLayerClient.h create mode 100644 src/3rdparty/webkit/include/WebCore/HTMLAppletElement.h create mode 100644 src/3rdparty/webkit/include/WebCore/HTMLFormElement.h create mode 100644 src/3rdparty/webkit/include/WebCore/HTMLFrameElement.h create mode 100644 src/3rdparty/webkit/include/WebCore/HTMLFrameOwnerElement.h create mode 100644 src/3rdparty/webkit/include/WebCore/HTMLIFrameElement.h create mode 100644 src/3rdparty/webkit/include/WebCore/HTMLInputElement.h create mode 100644 src/3rdparty/webkit/include/WebCore/HTMLMediaElement.h create mode 100644 src/3rdparty/webkit/include/WebCore/HTMLPlugInElement.h create mode 100644 src/3rdparty/webkit/include/WebCore/HTMLPlugInImageElement.h create mode 100644 src/3rdparty/webkit/include/WebCore/HTMLTableCellElement.h create mode 100644 src/3rdparty/webkit/include/WebCore/HTMLTextAreaElement.h create mode 100644 src/3rdparty/webkit/include/WebCore/HTTPHeaderMap.h create mode 100644 src/3rdparty/webkit/include/WebCore/HistoryItem.h create mode 100644 src/3rdparty/webkit/include/WebCore/HitTestRequest.h create mode 100644 src/3rdparty/webkit/include/WebCore/HitTestResult.h create mode 100644 src/3rdparty/webkit/include/WebCore/HostWindow.h create mode 100644 src/3rdparty/webkit/include/WebCore/Icon.h create mode 100644 src/3rdparty/webkit/include/WebCore/IconDatabase.h create mode 100644 src/3rdparty/webkit/include/WebCore/IconDatabaseBase.h create mode 100644 src/3rdparty/webkit/include/WebCore/IconDatabaseClient.h create mode 100644 src/3rdparty/webkit/include/WebCore/IdentifierRep.h create mode 100644 src/3rdparty/webkit/include/WebCore/Image.h create mode 100644 src/3rdparty/webkit/include/WebCore/InspectorClient.h create mode 100644 src/3rdparty/webkit/include/WebCore/InspectorController.h create mode 100644 src/3rdparty/webkit/include/WebCore/InspectorFrontendClientLocal.h create mode 100644 src/3rdparty/webkit/include/WebCore/IntPoint.h create mode 100644 src/3rdparty/webkit/include/WebCore/IntRect.h create mode 100644 src/3rdparty/webkit/include/WebCore/IntRectHash.h create mode 100644 src/3rdparty/webkit/include/WebCore/IntSize.h create mode 100644 src/3rdparty/webkit/include/WebCore/JSCSSStyleDeclaration.h create mode 100644 src/3rdparty/webkit/include/WebCore/JSPluginElementFunctions.h create mode 100644 src/3rdparty/webkit/include/WebCore/KURL.h create mode 100644 src/3rdparty/webkit/include/WebCore/KeyboardEvent.h create mode 100644 src/3rdparty/webkit/include/WebCore/Language.h create mode 100644 src/3rdparty/webkit/include/WebCore/LinkHash.h create mode 100644 src/3rdparty/webkit/include/WebCore/LocalizedStrings.h create mode 100644 src/3rdparty/webkit/include/WebCore/Logging.h create mode 100644 src/3rdparty/webkit/include/WebCore/MIMETypeRegistry.h create mode 100644 src/3rdparty/webkit/include/WebCore/MediaCanStartListener.h create mode 100644 src/3rdparty/webkit/include/WebCore/MemoryCache.h create mode 100644 src/3rdparty/webkit/include/WebCore/MouseEvent.h create mode 100644 src/3rdparty/webkit/include/WebCore/NavigationAction.h create mode 100644 src/3rdparty/webkit/include/WebCore/NetscapePlugInStreamLoader.h create mode 100644 src/3rdparty/webkit/include/WebCore/NetworkingContext.h create mode 100644 src/3rdparty/webkit/include/WebCore/Node.h create mode 100644 src/3rdparty/webkit/include/WebCore/NotImplemented.h create mode 100644 src/3rdparty/webkit/include/WebCore/Page.h create mode 100644 src/3rdparty/webkit/include/WebCore/PageCache.h create mode 100644 src/3rdparty/webkit/include/WebCore/PageGroup.h create mode 100644 src/3rdparty/webkit/include/WebCore/Path.h create mode 100644 src/3rdparty/webkit/include/WebCore/PlatformCALayer.h create mode 100644 src/3rdparty/webkit/include/WebCore/PlatformContextCairo.h create mode 100644 src/3rdparty/webkit/include/WebCore/PlatformGestureEvent.h create mode 100644 src/3rdparty/webkit/include/WebCore/PlatformKeyboardEvent.h create mode 100644 src/3rdparty/webkit/include/WebCore/PlatformMouseEvent.h create mode 100644 src/3rdparty/webkit/include/WebCore/PlatformStrategies.h create mode 100644 src/3rdparty/webkit/include/WebCore/PlatformTouchEvent.h create mode 100644 src/3rdparty/webkit/include/WebCore/PlatformTouchPoint.h create mode 100644 src/3rdparty/webkit/include/WebCore/PlatformWheelEvent.h create mode 100644 src/3rdparty/webkit/include/WebCore/PluginData.h create mode 100644 src/3rdparty/webkit/include/WebCore/PluginStrategy.h create mode 100644 src/3rdparty/webkit/include/WebCore/PluginViewBase.h create mode 100644 src/3rdparty/webkit/include/WebCore/PolicyChecker.h create mode 100644 src/3rdparty/webkit/include/WebCore/PopupMenu.h create mode 100644 src/3rdparty/webkit/include/WebCore/PopupMenuClient.h create mode 100644 src/3rdparty/webkit/include/WebCore/PopupMenuStyle.h create mode 100644 src/3rdparty/webkit/include/WebCore/PrintContext.h create mode 100644 src/3rdparty/webkit/include/WebCore/ProgressTracker.h create mode 100644 src/3rdparty/webkit/include/WebCore/ProtectionSpace.h create mode 100644 src/3rdparty/webkit/include/WebCore/ProxyServer.h create mode 100644 src/3rdparty/webkit/include/WebCore/Range.h create mode 100644 src/3rdparty/webkit/include/WebCore/RenderEmbeddedObject.h create mode 100644 src/3rdparty/webkit/include/WebCore/RenderLayer.h create mode 100644 src/3rdparty/webkit/include/WebCore/RenderTheme.h create mode 100644 src/3rdparty/webkit/include/WebCore/RenderTreeAsText.h create mode 100644 src/3rdparty/webkit/include/WebCore/RenderView.h create mode 100644 src/3rdparty/webkit/include/WebCore/ReplaceSelectionCommand.h create mode 100644 src/3rdparty/webkit/include/WebCore/ResourceHandle.h create mode 100644 src/3rdparty/webkit/include/WebCore/ResourceLoadScheduler.h create mode 100644 src/3rdparty/webkit/include/WebCore/RuntimeEnabledFeatures.h create mode 100644 src/3rdparty/webkit/include/WebCore/SchemeRegistry.h create mode 100644 src/3rdparty/webkit/include/WebCore/ScriptController.h create mode 100644 src/3rdparty/webkit/include/WebCore/ScriptValue.h create mode 100644 src/3rdparty/webkit/include/WebCore/ScrollTypes.h create mode 100644 src/3rdparty/webkit/include/WebCore/ScrollView.h create mode 100644 src/3rdparty/webkit/include/WebCore/ScrollableArea.h create mode 100644 src/3rdparty/webkit/include/WebCore/Scrollbar.h create mode 100644 src/3rdparty/webkit/include/WebCore/ScrollbarTheme.h create mode 100644 src/3rdparty/webkit/include/WebCore/SearchPopupMenu.h create mode 100644 src/3rdparty/webkit/include/WebCore/SecurityOrigin.h create mode 100644 src/3rdparty/webkit/include/WebCore/SecurityOriginHash.h create mode 100644 src/3rdparty/webkit/include/WebCore/SerializedScriptValue.h create mode 100644 src/3rdparty/webkit/include/WebCore/Settings.h create mode 100644 src/3rdparty/webkit/include/WebCore/ShadowRoot.h create mode 100644 src/3rdparty/webkit/include/WebCore/SharedBuffer.h create mode 100644 src/3rdparty/webkit/include/WebCore/SimpleFontData.h create mode 100644 src/3rdparty/webkit/include/WebCore/SoftLinking.h create mode 100644 src/3rdparty/webkit/include/WebCore/SpellingCorrectionController.h create mode 100644 src/3rdparty/webkit/include/WebCore/StorageTracker.h create mode 100644 src/3rdparty/webkit/include/WebCore/SubstituteData.h create mode 100644 src/3rdparty/webkit/include/WebCore/TextAffinity.h create mode 100644 src/3rdparty/webkit/include/WebCore/TextCheckerClient.h create mode 100644 src/3rdparty/webkit/include/WebCore/TextDirection.h create mode 100644 src/3rdparty/webkit/include/WebCore/TextIterator.h create mode 100644 src/3rdparty/webkit/include/WebCore/TextResourceDecoder.h create mode 100644 src/3rdparty/webkit/include/WebCore/TextRun.h create mode 100644 src/3rdparty/webkit/include/WebCore/Timer.h create mode 100644 src/3rdparty/webkit/include/WebCore/UIEventWithKeyState.h create mode 100644 src/3rdparty/webkit/include/WebCore/UserContentTypes.h create mode 100644 src/3rdparty/webkit/include/WebCore/UserContentURLPattern.h create mode 100644 src/3rdparty/webkit/include/WebCore/UserGestureIndicator.h create mode 100644 src/3rdparty/webkit/include/WebCore/UserScriptTypes.h create mode 100644 src/3rdparty/webkit/include/WebCore/UserTypingGestureIndicator.h create mode 100644 src/3rdparty/webkit/include/WebCore/ViewportArguments.h create mode 100644 src/3rdparty/webkit/include/WebCore/VisiblePosition.h create mode 100644 src/3rdparty/webkit/include/WebCore/VisitedLinkStrategy.h create mode 100644 src/3rdparty/webkit/include/WebCore/WebCoreKeyboardUIMode.h create mode 100644 src/3rdparty/webkit/include/WebCore/Widget.h create mode 100644 src/3rdparty/webkit/include/WebCore/WindowFeatures.h create mode 100644 src/3rdparty/webkit/include/WebCore/markup.h create mode 100644 src/3rdparty/webkit/include/WebCore/npapi.h create mode 100644 src/3rdparty/webkit/include/WebCore/npfunctions.h create mode 100644 src/3rdparty/webkit/include/WebCore/npruntime.h create mode 100644 src/3rdparty/webkit/include/WebCore/npruntime_internal.h create mode 100644 src/3rdparty/webkit/include/WebKit2/RunLoop.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKArray.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKBackForwardList.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKBackForwardListItem.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKBase.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKContext.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKContextMenuItemTypes.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKCookieManager.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKCredentialTypes.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKData.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKDictionary.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKError.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKEvent.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKFindOptions.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKFormSubmissionListener.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKFrame.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKFramePolicyListener.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKGeolocationManager.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKGeolocationPermissionRequest.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKGeolocationPosition.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKGeometry.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKGraphicsContext.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKImage.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKMutableArray.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKMutableDictionary.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKNativeEvent.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKNavigationData.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKNumber.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKOpenPanelParameters.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKOpenPanelResultListener.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKPage.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKPageGroup.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKPageLoadTypes.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKPreferences.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKProtectionSpaceTypes.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKRetainPtr.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKString.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKType.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKURL.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKURLRequest.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKURLResponse.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WKView.h create mode 100644 src/3rdparty/webkit/include/WebKit2/WebProcess.h diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 5d17f94..b3cdc28 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -8ed79cb10ca72b5d240beae674a7932963cbd007 +4277f8277b1daf3ec33c996f5a760ccd1113af4b diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog index 3cc612a..0c8c131 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog +++ b/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog @@ -1,3 +1,14 @@ +2011-08-15 Gavin Barraclough <barraclough@apple.com> + + Crash accessing static property on sealed object + https://bugs.webkit.org/show_bug.cgi?id=66242 + + Reviewed by Sam Weinig. + + * runtime/JSObject.h: + (JSC::JSObject::putDirectInternal): + - should only check isExtensible if checkReadOnly. + 2011-08-06 Aron Rosenberg <arosenberg@logitech.com> Reviewed by Benjamin Poulain. diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/runtime/JSObject.h b/src/3rdparty/webkit/Source/JavaScriptCore/runtime/JSObject.h index 768c457..1d7d2f7 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/runtime/JSObject.h +++ b/src/3rdparty/webkit/Source/JavaScriptCore/runtime/JSObject.h @@ -587,7 +587,7 @@ inline bool JSObject::putDirectInternal(JSGlobalData& globalData, const Identifi return true; } - if (!isExtensible()) + if (checkReadOnly && !isExtensible()) return false; size_t currentCapacity = m_structure->propertyStorageCapacity(); @@ -651,7 +651,7 @@ inline bool JSObject::putDirectInternal(JSGlobalData& globalData, const Identifi return true; } - if (!isExtensible()) + if (checkReadOnly && !isExtensible()) return false; Structure* structure = Structure::addPropertyTransition(globalData, m_structure.get(), propertyName, attributes, specificFunction, offset); diff --git a/src/3rdparty/webkit/Source/WebCore/ChangeLog b/src/3rdparty/webkit/Source/WebCore/ChangeLog index a8fb182..97db9dd 100644 --- a/src/3rdparty/webkit/Source/WebCore/ChangeLog +++ b/src/3rdparty/webkit/Source/WebCore/ChangeLog @@ -1,3 +1,50 @@ +2011-08-12 Abhishek Arya <inferno@chromium.org> + + Crash in WebCore::editingIgnoresContent + https://bugs.webkit.org/show_bug.cgi?id=66125 + + Reviewed by Ryosuke Niwa. + + RefPtr a few nodes in case they get blown away in + dispatchEvent calls. + + Test: editing/selection/select-start-remove-root-crash.html + + * editing/FrameSelection.cpp: + (WebCore::FrameSelection::selectAll): + * editing/ReplaceSelectionCommand.cpp: + (WebCore::ReplacementFragment::ReplacementFragment): + +2011-08-13 Abhishek Arya <inferno@chromium.org> + + Crash in HTMLTreeBuilder::processAnyOtherEndTagForInBody + https://bugs.webkit.org/show_bug.cgi?id=66187 + + Reviewed by Adam Barth. + + RefPtr a few ContainerNodes to prevent premature deletion. + + Test: fast/html/process-end-tag-for-inbody-crash.html + + * html/parser/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag): + (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody): + (WebCore::HTMLTreeBuilder::callTheAdoptionAgency): + +2011-08-10 Abhishek Arya <inferno@chromium.org> + + Check that we do not need layout before trying to dirty + m_originatingLine for our floats. + https://bugs.webkit.org/show_bug.cgi?id=65938 + + Reviewed by Dave Hyatt. + + Test: fast/block/float/float-originating-line-deleted-crash.html + + * rendering/RenderBlock.cpp: + (WebCore::RenderBlock::removeFloatingObject): + (WebCore::RenderBlock::clearFloats): + 2011-08-11 Alexis Menard <alexis.menard@openbossa.org> Unreviewed build fix for Qt. diff --git a/src/3rdparty/webkit/Source/WebCore/editing/ReplaceSelectionCommand.cpp b/src/3rdparty/webkit/Source/WebCore/editing/ReplaceSelectionCommand.cpp index a256bd1..d1aa6da 100644 --- a/src/3rdparty/webkit/Source/WebCore/editing/ReplaceSelectionCommand.cpp +++ b/src/3rdparty/webkit/Source/WebCore/editing/ReplaceSelectionCommand.cpp @@ -138,7 +138,7 @@ ReplacementFragment::ReplacementFragment(Document* document, DocumentFragment* f if (!m_fragment->firstChild()) return; - Element* editableRoot = selection.rootEditableElement(); + RefPtr<Element> editableRoot = selection.rootEditableElement(); ASSERT(editableRoot); if (!editableRoot) return; @@ -153,8 +153,8 @@ ReplacementFragment::ReplacementFragment(Document* document, DocumentFragment* f return; } - Node* styleNode = selection.base().deprecatedNode(); - RefPtr<StyledElement> holder = insertFragmentForTestRendering(styleNode); + RefPtr<Node> styleNode = selection.base().deprecatedNode(); + RefPtr<StyledElement> holder = insertFragmentForTestRendering(styleNode.get()); if (!holder) { removeInterchangeNodes(m_fragment.get()); return; @@ -174,7 +174,7 @@ ReplacementFragment::ReplacementFragment(Document* document, DocumentFragment* f m_fragment = createFragmentFromText(selection.toNormalizedRange().get(), evt->text()); if (!m_fragment->firstChild()) return; - holder = insertFragmentForTestRendering(styleNode); + holder = insertFragmentForTestRendering(styleNode.get()); } removeInterchangeNodes(holder.get()); diff --git a/src/3rdparty/webkit/Source/WebCore/editing/SelectionController.cpp b/src/3rdparty/webkit/Source/WebCore/editing/SelectionController.cpp index 879cb82..ba95ede 100644 --- a/src/3rdparty/webkit/Source/WebCore/editing/SelectionController.cpp +++ b/src/3rdparty/webkit/Source/WebCore/editing/SelectionController.cpp @@ -1401,7 +1401,7 @@ void SelectionController::selectAll() return; } - Node* root = 0; + RefPtr<Node> root = 0; if (isContentEditable()) root = highestEditableRoot(m_selection.start()); else { @@ -1411,7 +1411,7 @@ void SelectionController::selectAll() } if (!root) return; - VisibleSelection newSelection(VisibleSelection::selectionFromContentsOfNode(root)); + VisibleSelection newSelection(VisibleSelection::selectionFromContentsOfNode(root.get())); if (shouldChangeSelection(newSelection)) setSelection(newSelection); selectFrameElementInParentIfFullySelected(); diff --git a/src/3rdparty/webkit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp b/src/3rdparty/webkit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp index 054f766..4492dd2 100644 --- a/src/3rdparty/webkit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp +++ b/src/3rdparty/webkit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp @@ -603,13 +603,13 @@ void HTMLTreeBuilder::processCloseWhenNestedTag(AtomicHTMLToken& token) m_framesetOk = false; HTMLElementStack::ElementRecord* nodeRecord = m_tree.openElements()->topRecord(); while (1) { - ContainerNode* node = nodeRecord->node(); - if (shouldClose(node)) { + RefPtr<ContainerNode> node = nodeRecord->node(); + if (shouldClose(node.get())) { ASSERT(node->isElementNode()); - processFakeEndTag(toElement(node)->tagQName()); + processFakeEndTag(toElement(node.get())->tagQName()); break; } - if (isSpecialNode(node) && !node->hasTagName(addressTag) && !node->hasTagName(divTag) && !node->hasTagName(pTag)) + if (isSpecialNode(node.get()) && !node->hasTagName(addressTag) && !node->hasTagName(divTag) && !node->hasTagName(pTag)) break; nodeRecord = nodeRecord->next(); } @@ -1554,7 +1554,7 @@ void HTMLTreeBuilder::processAnyOtherEndTagForInBody(AtomicHTMLToken& token) ASSERT(token.type() == HTMLToken::EndTag); HTMLElementStack::ElementRecord* record = m_tree.openElements()->topRecord(); while (1) { - ContainerNode* node = record->node(); + RefPtr<ContainerNode> node = record->node(); if (node->hasLocalName(token.name())) { m_tree.generateImpliedEndTags(); // FIXME: The ElementRecord pointed to by record might be deleted by @@ -1568,13 +1568,13 @@ void HTMLTreeBuilder::processAnyOtherEndTagForInBody(AtomicHTMLToken& token) // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10080 // We might have already popped the node for the token in // generateImpliedEndTags, just abort. - if (!m_tree.openElements()->contains(toElement(node))) + if (!m_tree.openElements()->contains(toElement(node.get()))) return; } - m_tree.openElements()->popUntilPopped(toElement(node)); + m_tree.openElements()->popUntilPopped(toElement(node.get())); return; } - if (isSpecialNode(node)) { + if (isSpecialNode(node.get())) { parseError(token); return; } @@ -1631,7 +1631,7 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token) } // 4. ASSERT(furthestBlock->isAbove(formattingElementRecord)); - ContainerNode* commonAncestor = formattingElementRecord->next()->node(); + RefPtr<ContainerNode> commonAncestor = formattingElementRecord->next()->node(); // 5. HTMLFormattingElementList::Bookmark bookmark = m_tree.activeFormattingElements()->bookmarkFor(formattingElement); // 6. diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlock.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlock.cpp index a4d666e..39c0469 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlock.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlock.cpp @@ -3204,8 +3204,10 @@ void RenderBlock::removeFloatingObject(RenderBox* o) logicalBottom = max(logicalBottom, logicalTop + 1); } if (r->m_originatingLine) { - ASSERT(r->m_originatingLine->renderer() == this); - r->m_originatingLine->markDirty(); + if (!selfNeedsLayout()) { + ASSERT(r->m_originatingLine->renderer() == this); + r->m_originatingLine->markDirty(); + } #if !ASSERT_DISABLED r->m_originatingLine = 0; #endif @@ -3668,7 +3670,7 @@ void RenderBlock::clearFloats() } floatMap.remove(f->m_renderer); - if (oldFloatingObject->m_originatingLine) { + if (oldFloatingObject->m_originatingLine && !selfNeedsLayout()) { ASSERT(oldFloatingObject->m_originatingLine->renderer() == this); oldFloatingObject->m_originatingLine->markDirty(); } diff --git a/src/3rdparty/webkit/Source/WebKit.pri b/src/3rdparty/webkit/Source/WebKit.pri index 00d0db1..5bd9577 100644 --- a/src/3rdparty/webkit/Source/WebKit.pri +++ b/src/3rdparty/webkit/Source/WebKit.pri @@ -71,6 +71,7 @@ CONFIG(release, debug|release) { INCLUDEPATH += \ $$PWD \ + $$PWD/../include \ $$OUTPUT_DIR/include/QtWebKit \ $$OUTPUT_DIR/include \ $$QT.script.includes diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index 515f393..a90dc4e 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - 8ed79cb10ca72b5d240beae674a7932963cbd007 + 4277f8277b1daf3ec33c996f5a760ccd1113af4b diff --git a/src/3rdparty/webkit/include/JavaScriptCore/APICast.h b/src/3rdparty/webkit/include/JavaScriptCore/APICast.h new file mode 100644 index 0000000..237bfc8 --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/APICast.h @@ -0,0 +1 @@ +#include "JavaScriptCore/API/APICast.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/Error.h b/src/3rdparty/webkit/include/JavaScriptCore/Error.h new file mode 100644 index 0000000..4635063 --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/Error.h @@ -0,0 +1 @@ +#include "JavaScriptCore/runtime/Error.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/FunctionPrototype.h b/src/3rdparty/webkit/include/JavaScriptCore/FunctionPrototype.h new file mode 100644 index 0000000..a2829fb --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/FunctionPrototype.h @@ -0,0 +1 @@ +#include "JavaScriptCore/runtime/FunctionPrototype.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/InternalFunction.h b/src/3rdparty/webkit/include/JavaScriptCore/InternalFunction.h new file mode 100644 index 0000000..7c549e0 --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/InternalFunction.h @@ -0,0 +1 @@ +#include "JavaScriptCore/runtime/InternalFunction.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/JSBase.h b/src/3rdparty/webkit/include/JavaScriptCore/JSBase.h new file mode 100644 index 0000000..9c3826e --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/JSBase.h @@ -0,0 +1 @@ +#include "JavaScriptCore/API/JSBase.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/JSContextRef.h b/src/3rdparty/webkit/include/JavaScriptCore/JSContextRef.h new file mode 100644 index 0000000..f2f0c47 --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/JSContextRef.h @@ -0,0 +1 @@ +#include "JavaScriptCore/API/JSContextRef.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/JSGlobalObject.h b/src/3rdparty/webkit/include/JavaScriptCore/JSGlobalObject.h new file mode 100644 index 0000000..ebbffb4 --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/JSGlobalObject.h @@ -0,0 +1 @@ +#include "JavaScriptCore/runtime/JSGlobalObject.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/JSLock.h b/src/3rdparty/webkit/include/JavaScriptCore/JSLock.h new file mode 100644 index 0000000..7934695 --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/JSLock.h @@ -0,0 +1 @@ +#include "JavaScriptCore/runtime/JSLock.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/JSObject.h b/src/3rdparty/webkit/include/JavaScriptCore/JSObject.h new file mode 100644 index 0000000..e6767cf --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/JSObject.h @@ -0,0 +1 @@ +#include "JavaScriptCore/runtime/JSObject.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/JSObjectWithGlobalObject.h b/src/3rdparty/webkit/include/JavaScriptCore/JSObjectWithGlobalObject.h new file mode 100644 index 0000000..2125f2d --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/JSObjectWithGlobalObject.h @@ -0,0 +1 @@ +#include "JavaScriptCore/runtime/JSObjectWithGlobalObject.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/JSStringRef.h b/src/3rdparty/webkit/include/JavaScriptCore/JSStringRef.h new file mode 100644 index 0000000..6141f13 --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/JSStringRef.h @@ -0,0 +1 @@ +#include "JavaScriptCore/API/JSStringRef.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/JSValueRef.h b/src/3rdparty/webkit/include/JavaScriptCore/JSValueRef.h new file mode 100644 index 0000000..a038672 --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/JSValueRef.h @@ -0,0 +1 @@ +#include "JavaScriptCore/API/JSValueRef.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/JavaScript.h b/src/3rdparty/webkit/include/JavaScriptCore/JavaScript.h new file mode 100644 index 0000000..d5e2b25 --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/JavaScript.h @@ -0,0 +1 @@ +#include "JavaScriptCore/API/JavaScript.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/ObjectPrototype.h b/src/3rdparty/webkit/include/JavaScriptCore/ObjectPrototype.h new file mode 100644 index 0000000..d66b76c --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/ObjectPrototype.h @@ -0,0 +1 @@ +#include "JavaScriptCore/runtime/ObjectPrototype.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/SourceCode.h b/src/3rdparty/webkit/include/JavaScriptCore/SourceCode.h new file mode 100644 index 0000000..148829a --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/SourceCode.h @@ -0,0 +1 @@ +#include "JavaScriptCore/parser/SourceCode.h" diff --git a/src/3rdparty/webkit/include/JavaScriptCore/Strong.h b/src/3rdparty/webkit/include/JavaScriptCore/Strong.h new file mode 100644 index 0000000..bb611f9 --- /dev/null +++ b/src/3rdparty/webkit/include/JavaScriptCore/Strong.h @@ -0,0 +1 @@ +#include "JavaScriptCore/heap/Strong.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QGraphicsWebView b/src/3rdparty/webkit/include/QtWebKit/QGraphicsWebView new file mode 100644 index 0000000..508a397 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QGraphicsWebView @@ -0,0 +1 @@ +#include "qgraphicswebview.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebDatabase b/src/3rdparty/webkit/include/QtWebKit/QWebDatabase new file mode 100644 index 0000000..ec02742 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebDatabase @@ -0,0 +1 @@ +#include "qwebdatabase.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebElement b/src/3rdparty/webkit/include/QtWebKit/QWebElement new file mode 100644 index 0000000..32a17d0 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebElement @@ -0,0 +1 @@ +#include "qwebelement.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebElementCollection b/src/3rdparty/webkit/include/QtWebKit/QWebElementCollection new file mode 100644 index 0000000..32a17d0 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebElementCollection @@ -0,0 +1 @@ +#include "qwebelement.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebFrame b/src/3rdparty/webkit/include/QtWebKit/QWebFrame new file mode 100644 index 0000000..0748fde --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebFrame @@ -0,0 +1 @@ +#include "qwebframe.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebHistory b/src/3rdparty/webkit/include/QtWebKit/QWebHistory new file mode 100644 index 0000000..35e9da5 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebHistory @@ -0,0 +1 @@ +#include "qwebhistory.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebHistoryInterface b/src/3rdparty/webkit/include/QtWebKit/QWebHistoryInterface new file mode 100644 index 0000000..7352319 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebHistoryInterface @@ -0,0 +1 @@ +#include "qwebhistoryinterface.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebHistoryItem b/src/3rdparty/webkit/include/QtWebKit/QWebHistoryItem new file mode 100644 index 0000000..35e9da5 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebHistoryItem @@ -0,0 +1 @@ +#include "qwebhistory.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebHitTestResult b/src/3rdparty/webkit/include/QtWebKit/QWebHitTestResult new file mode 100644 index 0000000..0748fde --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebHitTestResult @@ -0,0 +1 @@ +#include "qwebframe.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebInspector b/src/3rdparty/webkit/include/QtWebKit/QWebInspector new file mode 100644 index 0000000..0923bb7 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebInspector @@ -0,0 +1 @@ +#include "qwebinspector.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebPage b/src/3rdparty/webkit/include/QtWebKit/QWebPage new file mode 100644 index 0000000..e8e8c10 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebPage @@ -0,0 +1 @@ +#include "qwebpage.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebPluginFactory b/src/3rdparty/webkit/include/QtWebKit/QWebPluginFactory new file mode 100644 index 0000000..3e4ee81 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebPluginFactory @@ -0,0 +1 @@ +#include "qwebpluginfactory.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebSecurityOrigin b/src/3rdparty/webkit/include/QtWebKit/QWebSecurityOrigin new file mode 100644 index 0000000..6427a3b --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebSecurityOrigin @@ -0,0 +1 @@ +#include "qwebsecurityorigin.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebSettings b/src/3rdparty/webkit/include/QtWebKit/QWebSettings new file mode 100644 index 0000000..f50c1a2 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebSettings @@ -0,0 +1 @@ +#include "qwebsettings.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QWebView b/src/3rdparty/webkit/include/QtWebKit/QWebView new file mode 100644 index 0000000..3ec1eb9 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QWebView @@ -0,0 +1 @@ +#include "qwebview.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/QtWebKit b/src/3rdparty/webkit/include/QtWebKit/QtWebKit new file mode 100644 index 0000000..155a551 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/QtWebKit @@ -0,0 +1,19 @@ +#ifndef QT_QTWEBKIT_MODULE_H +#define QT_QTWEBKIT_MODULE_H +#include <QtNetwork/QtNetwork> +#include "qwebframe.h" +#include "qgraphicswebview.h" +#include "qwebkitglobal.h" +#include "qwebkitplatformplugin.h" +#include "qwebpage.h" +#include "qwebview.h" +#include "qwebsettings.h" +#include "qwebhistoryinterface.h" +#include "qwebdatabase.h" +#include "qwebsecurityorigin.h" +#include "qwebelement.h" +#include "qwebpluginfactory.h" +#include "qwebhistory.h" +#include "qwebinspector.h" +#include "qwebkitversion.h" +#endif // QT_QTWEBKIT_MODULE_H diff --git a/src/3rdparty/webkit/include/QtWebKit/ViewportAttributes b/src/3rdparty/webkit/include/QtWebKit/ViewportAttributes new file mode 100644 index 0000000..e8e8c10 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/ViewportAttributes @@ -0,0 +1 @@ +#include "qwebpage.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/classheaders.pri b/src/3rdparty/webkit/include/QtWebKit/classheaders.pri new file mode 100644 index 0000000..0e13e75 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/classheaders.pri @@ -0,0 +1 @@ +WEBKIT_CLASS_HEADERS = $$PWD/QtWebKit $$PWD/QWebHitTestResult $$PWD/QWebFrame $$PWD/QGraphicsWebView $$PWD/QWebPage $$PWD/ViewportAttributes $$PWD/QWebView $$PWD/QWebSettings $$PWD/QWebHistoryInterface $$PWD/QWebDatabase $$PWD/QWebSecurityOrigin $$PWD/QWebElement $$PWD/QWebElementCollection $$PWD/QWebPluginFactory $$PWD/QWebHistoryItem $$PWD/QWebHistory $$PWD/QWebInspector diff --git a/src/3rdparty/webkit/include/QtWebKit/qgraphicswebview.h b/src/3rdparty/webkit/include/QtWebKit/qgraphicswebview.h new file mode 100644 index 0000000..0584f1d --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qgraphicswebview.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qgraphicswebview.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebdatabase.h b/src/3rdparty/webkit/include/QtWebKit/qwebdatabase.h new file mode 100644 index 0000000..f23fed4 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebdatabase.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebdatabase.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebelement.h b/src/3rdparty/webkit/include/QtWebKit/qwebelement.h new file mode 100644 index 0000000..e11a84b --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebelement.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebelement.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebframe.h b/src/3rdparty/webkit/include/QtWebKit/qwebframe.h new file mode 100644 index 0000000..d1393c5 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebframe.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebframe.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebhistory.h b/src/3rdparty/webkit/include/QtWebKit/qwebhistory.h new file mode 100644 index 0000000..edf6f81 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebhistory.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebhistory.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebhistoryinterface.h b/src/3rdparty/webkit/include/QtWebKit/qwebhistoryinterface.h new file mode 100644 index 0000000..da1a6a9 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebhistoryinterface.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebhistoryinterface.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebinspector.h b/src/3rdparty/webkit/include/QtWebKit/qwebinspector.h new file mode 100644 index 0000000..4742105 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebinspector.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebinspector.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebkitglobal.h b/src/3rdparty/webkit/include/QtWebKit/qwebkitglobal.h new file mode 100644 index 0000000..b9b2650 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebkitglobal.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebkitglobal.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebkitplatformplugin.h b/src/3rdparty/webkit/include/QtWebKit/qwebkitplatformplugin.h new file mode 100644 index 0000000..db4e554 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebkitplatformplugin.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebkitplatformplugin.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebkitversion.h b/src/3rdparty/webkit/include/QtWebKit/qwebkitversion.h new file mode 100644 index 0000000..af7be3b --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebkitversion.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebkitversion.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebpage.h b/src/3rdparty/webkit/include/QtWebKit/qwebpage.h new file mode 100644 index 0000000..2053ccb --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebpage.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebpage.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebpluginfactory.h b/src/3rdparty/webkit/include/QtWebKit/qwebpluginfactory.h new file mode 100644 index 0000000..db095b7 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebpluginfactory.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebpluginfactory.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebsecurityorigin.h b/src/3rdparty/webkit/include/QtWebKit/qwebsecurityorigin.h new file mode 100644 index 0000000..1ce553c --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebsecurityorigin.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebsecurityorigin.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebsettings.h b/src/3rdparty/webkit/include/QtWebKit/qwebsettings.h new file mode 100644 index 0000000..cdedc07 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebsettings.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebsettings.h" diff --git a/src/3rdparty/webkit/include/QtWebKit/qwebview.h b/src/3rdparty/webkit/include/QtWebKit/qwebview.h new file mode 100644 index 0000000..3490665 --- /dev/null +++ b/src/3rdparty/webkit/include/QtWebKit/qwebview.h @@ -0,0 +1 @@ +#include "../../WebKit/qt/Api/qwebview.h" diff --git a/src/3rdparty/webkit/include/WebCore/AXObjectCache.h b/src/3rdparty/webkit/include/WebCore/AXObjectCache.h new file mode 100644 index 0000000..19e50c5 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/AXObjectCache.h @@ -0,0 +1 @@ +#include "WebCore/accessibility/AXObjectCache.h" diff --git a/src/3rdparty/webkit/include/WebCore/AbstractDatabase.h b/src/3rdparty/webkit/include/WebCore/AbstractDatabase.h new file mode 100644 index 0000000..e845a89 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/AbstractDatabase.h @@ -0,0 +1 @@ +#include "WebCore/storage/AbstractDatabase.h" diff --git a/src/3rdparty/webkit/include/WebCore/AnimationController.h b/src/3rdparty/webkit/include/WebCore/AnimationController.h new file mode 100644 index 0000000..5a0fc36 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/AnimationController.h @@ -0,0 +1 @@ +#include "WebCore/page/animation/AnimationController.h" diff --git a/src/3rdparty/webkit/include/WebCore/ApplicationCache.h b/src/3rdparty/webkit/include/WebCore/ApplicationCache.h new file mode 100644 index 0000000..1c73afe --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ApplicationCache.h @@ -0,0 +1 @@ +#include "WebCore/loader/appcache/ApplicationCache.h" diff --git a/src/3rdparty/webkit/include/WebCore/ApplicationCacheStorage.h b/src/3rdparty/webkit/include/WebCore/ApplicationCacheStorage.h new file mode 100644 index 0000000..f5bf232 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ApplicationCacheStorage.h @@ -0,0 +1 @@ +#include "WebCore/loader/appcache/ApplicationCacheStorage.h" diff --git a/src/3rdparty/webkit/include/WebCore/ArchiveResource.h b/src/3rdparty/webkit/include/WebCore/ArchiveResource.h new file mode 100644 index 0000000..aa854cb --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ArchiveResource.h @@ -0,0 +1 @@ +#include "WebCore/loader/archive/ArchiveResource.h" diff --git a/src/3rdparty/webkit/include/WebCore/AuthenticationClient.h b/src/3rdparty/webkit/include/WebCore/AuthenticationClient.h new file mode 100644 index 0000000..6dc6438 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/AuthenticationClient.h @@ -0,0 +1 @@ +#include "WebCore/platform/network/AuthenticationClient.h" diff --git a/src/3rdparty/webkit/include/WebCore/BackForwardController.h b/src/3rdparty/webkit/include/WebCore/BackForwardController.h new file mode 100644 index 0000000..f352699 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/BackForwardController.h @@ -0,0 +1 @@ +#include "WebCore/history/BackForwardController.h" diff --git a/src/3rdparty/webkit/include/WebCore/BackForwardList.h b/src/3rdparty/webkit/include/WebCore/BackForwardList.h new file mode 100644 index 0000000..211f9a3 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/BackForwardList.h @@ -0,0 +1 @@ +#include "WebCore/history/BackForwardList.h" diff --git a/src/3rdparty/webkit/include/WebCore/BitmapImage.h b/src/3rdparty/webkit/include/WebCore/BitmapImage.h new file mode 100644 index 0000000..fd77e4e --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/BitmapImage.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/BitmapImage.h" diff --git a/src/3rdparty/webkit/include/WebCore/CSSComputedStyleDeclaration.h b/src/3rdparty/webkit/include/WebCore/CSSComputedStyleDeclaration.h new file mode 100644 index 0000000..89eef12 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/CSSComputedStyleDeclaration.h @@ -0,0 +1 @@ +#include "WebCore/css/CSSComputedStyleDeclaration.h" diff --git a/src/3rdparty/webkit/include/WebCore/Chrome.h b/src/3rdparty/webkit/include/WebCore/Chrome.h new file mode 100644 index 0000000..0d9d432 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Chrome.h @@ -0,0 +1 @@ +#include "WebCore/page/Chrome.h" diff --git a/src/3rdparty/webkit/include/WebCore/ChromeClient.h b/src/3rdparty/webkit/include/WebCore/ChromeClient.h new file mode 100644 index 0000000..6c49eb7 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ChromeClient.h @@ -0,0 +1 @@ +#include "WebCore/page/ChromeClient.h" diff --git a/src/3rdparty/webkit/include/WebCore/Color.h b/src/3rdparty/webkit/include/WebCore/Color.h new file mode 100644 index 0000000..0b177c5 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Color.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/Color.h" diff --git a/src/3rdparty/webkit/include/WebCore/ContextMenu.h b/src/3rdparty/webkit/include/WebCore/ContextMenu.h new file mode 100644 index 0000000..5eb190d --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ContextMenu.h @@ -0,0 +1 @@ +#include "WebCore/platform/ContextMenu.h" diff --git a/src/3rdparty/webkit/include/WebCore/ContextMenuClient.h b/src/3rdparty/webkit/include/WebCore/ContextMenuClient.h new file mode 100644 index 0000000..5471ea8 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ContextMenuClient.h @@ -0,0 +1 @@ +#include "WebCore/page/ContextMenuClient.h" diff --git a/src/3rdparty/webkit/include/WebCore/ContextMenuController.h b/src/3rdparty/webkit/include/WebCore/ContextMenuController.h new file mode 100644 index 0000000..463f01a --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ContextMenuController.h @@ -0,0 +1 @@ +#include "WebCore/page/ContextMenuController.h" diff --git a/src/3rdparty/webkit/include/WebCore/ContextMenuItem.h b/src/3rdparty/webkit/include/WebCore/ContextMenuItem.h new file mode 100644 index 0000000..0ee8088 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ContextMenuItem.h @@ -0,0 +1 @@ +#include "WebCore/platform/ContextMenuItem.h" diff --git a/src/3rdparty/webkit/include/WebCore/CookieJar.h b/src/3rdparty/webkit/include/WebCore/CookieJar.h new file mode 100644 index 0000000..4da688b --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/CookieJar.h @@ -0,0 +1 @@ +#include "WebCore/platform/CookieJar.h" diff --git a/src/3rdparty/webkit/include/WebCore/CookieStorage.h b/src/3rdparty/webkit/include/WebCore/CookieStorage.h new file mode 100644 index 0000000..a087fc5 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/CookieStorage.h @@ -0,0 +1 @@ +#include "WebCore/platform/network/CookieStorage.h" diff --git a/src/3rdparty/webkit/include/WebCore/CookiesStrategy.h b/src/3rdparty/webkit/include/WebCore/CookiesStrategy.h new file mode 100644 index 0000000..ee0f80b --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/CookiesStrategy.h @@ -0,0 +1 @@ +#include "WebCore/platform/CookiesStrategy.h" diff --git a/src/3rdparty/webkit/include/WebCore/Credential.h b/src/3rdparty/webkit/include/WebCore/Credential.h new file mode 100644 index 0000000..358cc97 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Credential.h @@ -0,0 +1 @@ +#include "WebCore/platform/network/Credential.h" diff --git a/src/3rdparty/webkit/include/WebCore/CrossOriginPreflightResultCache.h b/src/3rdparty/webkit/include/WebCore/CrossOriginPreflightResultCache.h new file mode 100644 index 0000000..511572c --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/CrossOriginPreflightResultCache.h @@ -0,0 +1 @@ +#include "WebCore/loader/CrossOriginPreflightResultCache.h" diff --git a/src/3rdparty/webkit/include/WebCore/Cursor.h b/src/3rdparty/webkit/include/WebCore/Cursor.h new file mode 100644 index 0000000..416929f --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Cursor.h @@ -0,0 +1 @@ +#include "WebCore/platform/Cursor.h" diff --git a/src/3rdparty/webkit/include/WebCore/DOMImplementation.h b/src/3rdparty/webkit/include/WebCore/DOMImplementation.h new file mode 100644 index 0000000..9e37ed5 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/DOMImplementation.h @@ -0,0 +1 @@ +#include "WebCore/dom/DOMImplementation.h" diff --git a/src/3rdparty/webkit/include/WebCore/DOMWrapperWorld.h b/src/3rdparty/webkit/include/WebCore/DOMWrapperWorld.h new file mode 100644 index 0000000..15450f6 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/DOMWrapperWorld.h @@ -0,0 +1 @@ +#include "WebCore/bindings/js/DOMWrapperWorld.h" diff --git a/src/3rdparty/webkit/include/WebCore/DatabaseDetails.h b/src/3rdparty/webkit/include/WebCore/DatabaseDetails.h new file mode 100644 index 0000000..1759bd3 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/DatabaseDetails.h @@ -0,0 +1 @@ +#include "WebCore/storage/DatabaseDetails.h" diff --git a/src/3rdparty/webkit/include/WebCore/DatabaseTracker.h b/src/3rdparty/webkit/include/WebCore/DatabaseTracker.h new file mode 100644 index 0000000..e4e9f82 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/DatabaseTracker.h @@ -0,0 +1 @@ +#include "WebCore/storage/DatabaseTracker.h" diff --git a/src/3rdparty/webkit/include/WebCore/DatabaseTrackerClient.h b/src/3rdparty/webkit/include/WebCore/DatabaseTrackerClient.h new file mode 100644 index 0000000..d020ce1 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/DatabaseTrackerClient.h @@ -0,0 +1 @@ +#include "WebCore/storage/DatabaseTrackerClient.h" diff --git a/src/3rdparty/webkit/include/WebCore/Document.h b/src/3rdparty/webkit/include/WebCore/Document.h new file mode 100644 index 0000000..064119d --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Document.h @@ -0,0 +1 @@ +#include "WebCore/dom/Document.h" diff --git a/src/3rdparty/webkit/include/WebCore/DocumentFragment.h b/src/3rdparty/webkit/include/WebCore/DocumentFragment.h new file mode 100644 index 0000000..4ff6d72 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/DocumentFragment.h @@ -0,0 +1 @@ +#include "WebCore/dom/DocumentFragment.h" diff --git a/src/3rdparty/webkit/include/WebCore/DocumentLoader.h b/src/3rdparty/webkit/include/WebCore/DocumentLoader.h new file mode 100644 index 0000000..b93cbb0 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/DocumentLoader.h @@ -0,0 +1 @@ +#include "WebCore/loader/DocumentLoader.h" diff --git a/src/3rdparty/webkit/include/WebCore/DocumentMarkerController.h b/src/3rdparty/webkit/include/WebCore/DocumentMarkerController.h new file mode 100644 index 0000000..74f9fc4 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/DocumentMarkerController.h @@ -0,0 +1 @@ +#include "WebCore/dom/DocumentMarkerController.h" diff --git a/src/3rdparty/webkit/include/WebCore/DragActions.h b/src/3rdparty/webkit/include/WebCore/DragActions.h new file mode 100644 index 0000000..8e4d0b3 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/DragActions.h @@ -0,0 +1 @@ +#include "WebCore/page/DragActions.h" diff --git a/src/3rdparty/webkit/include/WebCore/DragClient.h b/src/3rdparty/webkit/include/WebCore/DragClient.h new file mode 100644 index 0000000..e9a96a5 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/DragClient.h @@ -0,0 +1 @@ +#include "WebCore/page/DragClient.h" diff --git a/src/3rdparty/webkit/include/WebCore/DragController.h b/src/3rdparty/webkit/include/WebCore/DragController.h new file mode 100644 index 0000000..30de072 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/DragController.h @@ -0,0 +1 @@ +#include "WebCore/page/DragController.h" diff --git a/src/3rdparty/webkit/include/WebCore/DragData.h b/src/3rdparty/webkit/include/WebCore/DragData.h new file mode 100644 index 0000000..d66db38 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/DragData.h @@ -0,0 +1 @@ +#include "WebCore/platform/DragData.h" diff --git a/src/3rdparty/webkit/include/WebCore/EditAction.h b/src/3rdparty/webkit/include/WebCore/EditAction.h new file mode 100644 index 0000000..75200b2 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/EditAction.h @@ -0,0 +1 @@ +#include "WebCore/editing/EditAction.h" diff --git a/src/3rdparty/webkit/include/WebCore/EditCommand.h b/src/3rdparty/webkit/include/WebCore/EditCommand.h new file mode 100644 index 0000000..06d9145 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/EditCommand.h @@ -0,0 +1 @@ +#include "WebCore/editing/EditCommand.h" diff --git a/src/3rdparty/webkit/include/WebCore/Editor.h b/src/3rdparty/webkit/include/WebCore/Editor.h new file mode 100644 index 0000000..1d2a300 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Editor.h @@ -0,0 +1 @@ +#include "WebCore/editing/Editor.h" diff --git a/src/3rdparty/webkit/include/WebCore/EditorClient.h b/src/3rdparty/webkit/include/WebCore/EditorClient.h new file mode 100644 index 0000000..027fb4e --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/EditorClient.h @@ -0,0 +1 @@ +#include "WebCore/page/EditorClient.h" diff --git a/src/3rdparty/webkit/include/WebCore/EditorInsertAction.h b/src/3rdparty/webkit/include/WebCore/EditorInsertAction.h new file mode 100644 index 0000000..7fc8a54 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/EditorInsertAction.h @@ -0,0 +1 @@ +#include "WebCore/editing/EditorInsertAction.h" diff --git a/src/3rdparty/webkit/include/WebCore/Element.h b/src/3rdparty/webkit/include/WebCore/Element.h new file mode 100644 index 0000000..ead3556 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Element.h @@ -0,0 +1 @@ +#include "WebCore/dom/Element.h" diff --git a/src/3rdparty/webkit/include/WebCore/EmptyProtocolDefinitions.h b/src/3rdparty/webkit/include/WebCore/EmptyProtocolDefinitions.h new file mode 100644 index 0000000..c75e216 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/EmptyProtocolDefinitions.h @@ -0,0 +1 @@ +#include "WebCore/platform/mac/EmptyProtocolDefinitions.h" diff --git a/src/3rdparty/webkit/include/WebCore/Event.h b/src/3rdparty/webkit/include/WebCore/Event.h new file mode 100644 index 0000000..3a79434 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Event.h @@ -0,0 +1 @@ +#include "WebCore/dom/Event.h" diff --git a/src/3rdparty/webkit/include/WebCore/EventHandler.h b/src/3rdparty/webkit/include/WebCore/EventHandler.h new file mode 100644 index 0000000..afb7092 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/EventHandler.h @@ -0,0 +1 @@ +#include "WebCore/page/EventHandler.h" diff --git a/src/3rdparty/webkit/include/WebCore/FileChooser.h b/src/3rdparty/webkit/include/WebCore/FileChooser.h new file mode 100644 index 0000000..e968b5c --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FileChooser.h @@ -0,0 +1 @@ +#include "WebCore/platform/FileChooser.h" diff --git a/src/3rdparty/webkit/include/WebCore/FileSystem.h b/src/3rdparty/webkit/include/WebCore/FileSystem.h new file mode 100644 index 0000000..27195b9 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FileSystem.h @@ -0,0 +1 @@ +#include "WebCore/platform/FileSystem.h" diff --git a/src/3rdparty/webkit/include/WebCore/FloatPoint.h b/src/3rdparty/webkit/include/WebCore/FloatPoint.h new file mode 100644 index 0000000..9246f21 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FloatPoint.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/FloatPoint.h" diff --git a/src/3rdparty/webkit/include/WebCore/FloatRect.h b/src/3rdparty/webkit/include/WebCore/FloatRect.h new file mode 100644 index 0000000..b18898f --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FloatRect.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/FloatRect.h" diff --git a/src/3rdparty/webkit/include/WebCore/FloatSize.h b/src/3rdparty/webkit/include/WebCore/FloatSize.h new file mode 100644 index 0000000..0178b44 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FloatSize.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/FloatSize.h" diff --git a/src/3rdparty/webkit/include/WebCore/FocusController.h b/src/3rdparty/webkit/include/WebCore/FocusController.h new file mode 100644 index 0000000..4fb9ab7 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FocusController.h @@ -0,0 +1 @@ +#include "WebCore/page/FocusController.h" diff --git a/src/3rdparty/webkit/include/WebCore/FocusDirection.h b/src/3rdparty/webkit/include/WebCore/FocusDirection.h new file mode 100644 index 0000000..1c76ae5 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FocusDirection.h @@ -0,0 +1 @@ +#include "WebCore/page/FocusDirection.h" diff --git a/src/3rdparty/webkit/include/WebCore/Font.h b/src/3rdparty/webkit/include/WebCore/Font.h new file mode 100644 index 0000000..84ae5e6 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Font.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/Font.h" diff --git a/src/3rdparty/webkit/include/WebCore/FontRenderingMode.h b/src/3rdparty/webkit/include/WebCore/FontRenderingMode.h new file mode 100644 index 0000000..3f2925c --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FontRenderingMode.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/FontRenderingMode.h" diff --git a/src/3rdparty/webkit/include/WebCore/FormState.h b/src/3rdparty/webkit/include/WebCore/FormState.h new file mode 100644 index 0000000..2be503d --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FormState.h @@ -0,0 +1 @@ +#include "WebCore/loader/FormState.h" diff --git a/src/3rdparty/webkit/include/WebCore/Frame.h b/src/3rdparty/webkit/include/WebCore/Frame.h new file mode 100644 index 0000000..447a563 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Frame.h @@ -0,0 +1 @@ +#include "WebCore/page/Frame.h" diff --git a/src/3rdparty/webkit/include/WebCore/FrameLoadRequest.h b/src/3rdparty/webkit/include/WebCore/FrameLoadRequest.h new file mode 100644 index 0000000..3744166 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FrameLoadRequest.h @@ -0,0 +1 @@ +#include "WebCore/page/FrameLoadRequest.h" diff --git a/src/3rdparty/webkit/include/WebCore/FrameLoader.h b/src/3rdparty/webkit/include/WebCore/FrameLoader.h new file mode 100644 index 0000000..d5f7c97 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FrameLoader.h @@ -0,0 +1 @@ +#include "WebCore/loader/FrameLoader.h" diff --git a/src/3rdparty/webkit/include/WebCore/FrameLoaderClient.h b/src/3rdparty/webkit/include/WebCore/FrameLoaderClient.h new file mode 100644 index 0000000..140b7a1 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FrameLoaderClient.h @@ -0,0 +1 @@ +#include "WebCore/loader/FrameLoaderClient.h" diff --git a/src/3rdparty/webkit/include/WebCore/FrameLoaderTypes.h b/src/3rdparty/webkit/include/WebCore/FrameLoaderTypes.h new file mode 100644 index 0000000..5b12e86 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FrameLoaderTypes.h @@ -0,0 +1 @@ +#include "WebCore/loader/FrameLoaderTypes.h" diff --git a/src/3rdparty/webkit/include/WebCore/FrameNetworkingContext.h b/src/3rdparty/webkit/include/WebCore/FrameNetworkingContext.h new file mode 100644 index 0000000..1e37ea8 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FrameNetworkingContext.h @@ -0,0 +1 @@ +#include "WebCore/loader/FrameNetworkingContext.h" diff --git a/src/3rdparty/webkit/include/WebCore/FrameView.h b/src/3rdparty/webkit/include/WebCore/FrameView.h new file mode 100644 index 0000000..0e85324 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/FrameView.h @@ -0,0 +1 @@ +#include "WebCore/page/FrameView.h" diff --git a/src/3rdparty/webkit/include/WebCore/GCController.h b/src/3rdparty/webkit/include/WebCore/GCController.h new file mode 100644 index 0000000..c528ce0 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/GCController.h @@ -0,0 +1 @@ +#include "WebCore/bindings/js/GCController.h" diff --git a/src/3rdparty/webkit/include/WebCore/Geolocation.h b/src/3rdparty/webkit/include/WebCore/Geolocation.h new file mode 100644 index 0000000..3fe78ca --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Geolocation.h @@ -0,0 +1 @@ +#include "WebCore/page/Geolocation.h" diff --git a/src/3rdparty/webkit/include/WebCore/GeolocationClient.h b/src/3rdparty/webkit/include/WebCore/GeolocationClient.h new file mode 100644 index 0000000..f77eb42 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/GeolocationClient.h @@ -0,0 +1 @@ +#include "WebCore/page/GeolocationClient.h" diff --git a/src/3rdparty/webkit/include/WebCore/GeolocationController.h b/src/3rdparty/webkit/include/WebCore/GeolocationController.h new file mode 100644 index 0000000..e929b83 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/GeolocationController.h @@ -0,0 +1 @@ +#include "WebCore/page/GeolocationController.h" diff --git a/src/3rdparty/webkit/include/WebCore/GeolocationError.h b/src/3rdparty/webkit/include/WebCore/GeolocationError.h new file mode 100644 index 0000000..657e27c --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/GeolocationError.h @@ -0,0 +1 @@ +#include "WebCore/page/GeolocationError.h" diff --git a/src/3rdparty/webkit/include/WebCore/GeolocationPosition.h b/src/3rdparty/webkit/include/WebCore/GeolocationPosition.h new file mode 100644 index 0000000..19f09cc --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/GeolocationPosition.h @@ -0,0 +1 @@ +#include "WebCore/page/GeolocationPosition.h" diff --git a/src/3rdparty/webkit/include/WebCore/Gradient.h b/src/3rdparty/webkit/include/WebCore/Gradient.h new file mode 100644 index 0000000..33ab685 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Gradient.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/Gradient.h" diff --git a/src/3rdparty/webkit/include/WebCore/GraphicsContext.h b/src/3rdparty/webkit/include/WebCore/GraphicsContext.h new file mode 100644 index 0000000..e82ec75 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/GraphicsContext.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/GraphicsContext.h" diff --git a/src/3rdparty/webkit/include/WebCore/GraphicsContextCG.h b/src/3rdparty/webkit/include/WebCore/GraphicsContextCG.h new file mode 100644 index 0000000..c71753f --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/GraphicsContextCG.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/cg/GraphicsContextCG.h" diff --git a/src/3rdparty/webkit/include/WebCore/GraphicsLayer.h b/src/3rdparty/webkit/include/WebCore/GraphicsLayer.h new file mode 100644 index 0000000..3387101 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/GraphicsLayer.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/GraphicsLayer.h" diff --git a/src/3rdparty/webkit/include/WebCore/GraphicsLayerCA.h b/src/3rdparty/webkit/include/WebCore/GraphicsLayerCA.h new file mode 100644 index 0000000..314d55c --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/GraphicsLayerCA.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/ca/GraphicsLayerCA.h" diff --git a/src/3rdparty/webkit/include/WebCore/GraphicsLayerClient.h b/src/3rdparty/webkit/include/WebCore/GraphicsLayerClient.h new file mode 100644 index 0000000..10e9e60 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/GraphicsLayerClient.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/GraphicsLayerClient.h" diff --git a/src/3rdparty/webkit/include/WebCore/HTMLAppletElement.h b/src/3rdparty/webkit/include/WebCore/HTMLAppletElement.h new file mode 100644 index 0000000..c0bacf1 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HTMLAppletElement.h @@ -0,0 +1 @@ +#include "WebCore/html/HTMLAppletElement.h" diff --git a/src/3rdparty/webkit/include/WebCore/HTMLFormElement.h b/src/3rdparty/webkit/include/WebCore/HTMLFormElement.h new file mode 100644 index 0000000..83db912 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HTMLFormElement.h @@ -0,0 +1 @@ +#include "WebCore/html/HTMLFormElement.h" diff --git a/src/3rdparty/webkit/include/WebCore/HTMLFrameElement.h b/src/3rdparty/webkit/include/WebCore/HTMLFrameElement.h new file mode 100644 index 0000000..2a59d8c --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HTMLFrameElement.h @@ -0,0 +1 @@ +#include "WebCore/html/HTMLFrameElement.h" diff --git a/src/3rdparty/webkit/include/WebCore/HTMLFrameOwnerElement.h b/src/3rdparty/webkit/include/WebCore/HTMLFrameOwnerElement.h new file mode 100644 index 0000000..1219a12 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HTMLFrameOwnerElement.h @@ -0,0 +1 @@ +#include "WebCore/html/HTMLFrameOwnerElement.h" diff --git a/src/3rdparty/webkit/include/WebCore/HTMLIFrameElement.h b/src/3rdparty/webkit/include/WebCore/HTMLIFrameElement.h new file mode 100644 index 0000000..fe96ccf --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HTMLIFrameElement.h @@ -0,0 +1 @@ +#include "WebCore/html/HTMLIFrameElement.h" diff --git a/src/3rdparty/webkit/include/WebCore/HTMLInputElement.h b/src/3rdparty/webkit/include/WebCore/HTMLInputElement.h new file mode 100644 index 0000000..60100aa --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HTMLInputElement.h @@ -0,0 +1 @@ +#include "WebCore/html/HTMLInputElement.h" diff --git a/src/3rdparty/webkit/include/WebCore/HTMLMediaElement.h b/src/3rdparty/webkit/include/WebCore/HTMLMediaElement.h new file mode 100644 index 0000000..d332c0a --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HTMLMediaElement.h @@ -0,0 +1 @@ +#include "WebCore/html/HTMLMediaElement.h" diff --git a/src/3rdparty/webkit/include/WebCore/HTMLPlugInElement.h b/src/3rdparty/webkit/include/WebCore/HTMLPlugInElement.h new file mode 100644 index 0000000..c3eb10f --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HTMLPlugInElement.h @@ -0,0 +1 @@ +#include "WebCore/html/HTMLPlugInElement.h" diff --git a/src/3rdparty/webkit/include/WebCore/HTMLPlugInImageElement.h b/src/3rdparty/webkit/include/WebCore/HTMLPlugInImageElement.h new file mode 100644 index 0000000..38c638c --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HTMLPlugInImageElement.h @@ -0,0 +1 @@ +#include "WebCore/html/HTMLPlugInImageElement.h" diff --git a/src/3rdparty/webkit/include/WebCore/HTMLTableCellElement.h b/src/3rdparty/webkit/include/WebCore/HTMLTableCellElement.h new file mode 100644 index 0000000..2e3e09d --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HTMLTableCellElement.h @@ -0,0 +1 @@ +#include "WebCore/html/HTMLTableCellElement.h" diff --git a/src/3rdparty/webkit/include/WebCore/HTMLTextAreaElement.h b/src/3rdparty/webkit/include/WebCore/HTMLTextAreaElement.h new file mode 100644 index 0000000..6613ae6 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HTMLTextAreaElement.h @@ -0,0 +1 @@ +#include "WebCore/html/HTMLTextAreaElement.h" diff --git a/src/3rdparty/webkit/include/WebCore/HTTPHeaderMap.h b/src/3rdparty/webkit/include/WebCore/HTTPHeaderMap.h new file mode 100644 index 0000000..a48b2ce --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HTTPHeaderMap.h @@ -0,0 +1 @@ +#include "WebCore/platform/network/HTTPHeaderMap.h" diff --git a/src/3rdparty/webkit/include/WebCore/HistoryItem.h b/src/3rdparty/webkit/include/WebCore/HistoryItem.h new file mode 100644 index 0000000..284e4b9 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HistoryItem.h @@ -0,0 +1 @@ +#include "WebCore/history/HistoryItem.h" diff --git a/src/3rdparty/webkit/include/WebCore/HitTestRequest.h b/src/3rdparty/webkit/include/WebCore/HitTestRequest.h new file mode 100644 index 0000000..6f1f0d8 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HitTestRequest.h @@ -0,0 +1 @@ +#include "WebCore/rendering/HitTestRequest.h" diff --git a/src/3rdparty/webkit/include/WebCore/HitTestResult.h b/src/3rdparty/webkit/include/WebCore/HitTestResult.h new file mode 100644 index 0000000..50e3246 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HitTestResult.h @@ -0,0 +1 @@ +#include "WebCore/rendering/HitTestResult.h" diff --git a/src/3rdparty/webkit/include/WebCore/HostWindow.h b/src/3rdparty/webkit/include/WebCore/HostWindow.h new file mode 100644 index 0000000..82bd27f --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/HostWindow.h @@ -0,0 +1 @@ +#include "WebCore/platform/HostWindow.h" diff --git a/src/3rdparty/webkit/include/WebCore/Icon.h b/src/3rdparty/webkit/include/WebCore/Icon.h new file mode 100644 index 0000000..3b027fc --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Icon.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/Icon.h" diff --git a/src/3rdparty/webkit/include/WebCore/IconDatabase.h b/src/3rdparty/webkit/include/WebCore/IconDatabase.h new file mode 100644 index 0000000..ba2985a --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/IconDatabase.h @@ -0,0 +1 @@ +#include "WebCore/loader/icon/IconDatabase.h" diff --git a/src/3rdparty/webkit/include/WebCore/IconDatabaseBase.h b/src/3rdparty/webkit/include/WebCore/IconDatabaseBase.h new file mode 100644 index 0000000..9cc3e82 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/IconDatabaseBase.h @@ -0,0 +1 @@ +#include "WebCore/loader/icon/IconDatabaseBase.h" diff --git a/src/3rdparty/webkit/include/WebCore/IconDatabaseClient.h b/src/3rdparty/webkit/include/WebCore/IconDatabaseClient.h new file mode 100644 index 0000000..f70b84e --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/IconDatabaseClient.h @@ -0,0 +1 @@ +#include "WebCore/loader/icon/IconDatabaseClient.h" diff --git a/src/3rdparty/webkit/include/WebCore/IdentifierRep.h b/src/3rdparty/webkit/include/WebCore/IdentifierRep.h new file mode 100644 index 0000000..51a75d6 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/IdentifierRep.h @@ -0,0 +1 @@ +#include "WebCore/bridge/IdentifierRep.h" diff --git a/src/3rdparty/webkit/include/WebCore/Image.h b/src/3rdparty/webkit/include/WebCore/Image.h new file mode 100644 index 0000000..9e713f4 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Image.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/Image.h" diff --git a/src/3rdparty/webkit/include/WebCore/InspectorClient.h b/src/3rdparty/webkit/include/WebCore/InspectorClient.h new file mode 100644 index 0000000..7cc8863 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/InspectorClient.h @@ -0,0 +1 @@ +#include "WebCore/inspector/InspectorClient.h" diff --git a/src/3rdparty/webkit/include/WebCore/InspectorController.h b/src/3rdparty/webkit/include/WebCore/InspectorController.h new file mode 100644 index 0000000..f3bf6a7 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/InspectorController.h @@ -0,0 +1 @@ +#include "WebCore/inspector/InspectorController.h" diff --git a/src/3rdparty/webkit/include/WebCore/InspectorFrontendClientLocal.h b/src/3rdparty/webkit/include/WebCore/InspectorFrontendClientLocal.h new file mode 100644 index 0000000..de2f131 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/InspectorFrontendClientLocal.h @@ -0,0 +1 @@ +#include "WebCore/inspector/InspectorFrontendClientLocal.h" diff --git a/src/3rdparty/webkit/include/WebCore/IntPoint.h b/src/3rdparty/webkit/include/WebCore/IntPoint.h new file mode 100644 index 0000000..6738be4 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/IntPoint.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/IntPoint.h" diff --git a/src/3rdparty/webkit/include/WebCore/IntRect.h b/src/3rdparty/webkit/include/WebCore/IntRect.h new file mode 100644 index 0000000..9ff65c1 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/IntRect.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/IntRect.h" diff --git a/src/3rdparty/webkit/include/WebCore/IntRectHash.h b/src/3rdparty/webkit/include/WebCore/IntRectHash.h new file mode 100644 index 0000000..f21fc99 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/IntRectHash.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/IntRectHash.h" diff --git a/src/3rdparty/webkit/include/WebCore/IntSize.h b/src/3rdparty/webkit/include/WebCore/IntSize.h new file mode 100644 index 0000000..1ed1253 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/IntSize.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/IntSize.h" diff --git a/src/3rdparty/webkit/include/WebCore/JSCSSStyleDeclaration.h b/src/3rdparty/webkit/include/WebCore/JSCSSStyleDeclaration.h new file mode 100644 index 0000000..9b6643c --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/JSCSSStyleDeclaration.h @@ -0,0 +1 @@ +#include "WebCore/generated/JSCSSStyleDeclaration.h" diff --git a/src/3rdparty/webkit/include/WebCore/JSPluginElementFunctions.h b/src/3rdparty/webkit/include/WebCore/JSPluginElementFunctions.h new file mode 100644 index 0000000..be5c4e6 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/JSPluginElementFunctions.h @@ -0,0 +1 @@ +#include "WebCore/bindings/js/JSPluginElementFunctions.h" diff --git a/src/3rdparty/webkit/include/WebCore/KURL.h b/src/3rdparty/webkit/include/WebCore/KURL.h new file mode 100644 index 0000000..66540b2 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/KURL.h @@ -0,0 +1 @@ +#include "WebCore/platform/KURL.h" diff --git a/src/3rdparty/webkit/include/WebCore/KeyboardEvent.h b/src/3rdparty/webkit/include/WebCore/KeyboardEvent.h new file mode 100644 index 0000000..10fe215 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/KeyboardEvent.h @@ -0,0 +1 @@ +#include "WebCore/dom/KeyboardEvent.h" diff --git a/src/3rdparty/webkit/include/WebCore/Language.h b/src/3rdparty/webkit/include/WebCore/Language.h new file mode 100644 index 0000000..fb27338 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Language.h @@ -0,0 +1 @@ +#include "WebCore/platform/Language.h" diff --git a/src/3rdparty/webkit/include/WebCore/LinkHash.h b/src/3rdparty/webkit/include/WebCore/LinkHash.h new file mode 100644 index 0000000..c5c7438 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/LinkHash.h @@ -0,0 +1 @@ +#include "WebCore/platform/LinkHash.h" diff --git a/src/3rdparty/webkit/include/WebCore/LocalizedStrings.h b/src/3rdparty/webkit/include/WebCore/LocalizedStrings.h new file mode 100644 index 0000000..1a0a77a --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/LocalizedStrings.h @@ -0,0 +1 @@ +#include "WebCore/platform/LocalizedStrings.h" diff --git a/src/3rdparty/webkit/include/WebCore/Logging.h b/src/3rdparty/webkit/include/WebCore/Logging.h new file mode 100644 index 0000000..b85d7b8 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Logging.h @@ -0,0 +1 @@ +#include "WebCore/platform/Logging.h" diff --git a/src/3rdparty/webkit/include/WebCore/MIMETypeRegistry.h b/src/3rdparty/webkit/include/WebCore/MIMETypeRegistry.h new file mode 100644 index 0000000..0c39b17 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/MIMETypeRegistry.h @@ -0,0 +1 @@ +#include "WebCore/platform/MIMETypeRegistry.h" diff --git a/src/3rdparty/webkit/include/WebCore/MediaCanStartListener.h b/src/3rdparty/webkit/include/WebCore/MediaCanStartListener.h new file mode 100644 index 0000000..7c78efc --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/MediaCanStartListener.h @@ -0,0 +1 @@ +#include "WebCore/page/MediaCanStartListener.h" diff --git a/src/3rdparty/webkit/include/WebCore/MemoryCache.h b/src/3rdparty/webkit/include/WebCore/MemoryCache.h new file mode 100644 index 0000000..c903f1d --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/MemoryCache.h @@ -0,0 +1 @@ +#include "WebCore/loader/cache/MemoryCache.h" diff --git a/src/3rdparty/webkit/include/WebCore/MouseEvent.h b/src/3rdparty/webkit/include/WebCore/MouseEvent.h new file mode 100644 index 0000000..5f43397 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/MouseEvent.h @@ -0,0 +1 @@ +#include "WebCore/dom/MouseEvent.h" diff --git a/src/3rdparty/webkit/include/WebCore/NavigationAction.h b/src/3rdparty/webkit/include/WebCore/NavigationAction.h new file mode 100644 index 0000000..ca0f93c --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/NavigationAction.h @@ -0,0 +1 @@ +#include "WebCore/loader/NavigationAction.h" diff --git a/src/3rdparty/webkit/include/WebCore/NetscapePlugInStreamLoader.h b/src/3rdparty/webkit/include/WebCore/NetscapePlugInStreamLoader.h new file mode 100644 index 0000000..8047c20 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/NetscapePlugInStreamLoader.h @@ -0,0 +1 @@ +#include "WebCore/loader/NetscapePlugInStreamLoader.h" diff --git a/src/3rdparty/webkit/include/WebCore/NetworkingContext.h b/src/3rdparty/webkit/include/WebCore/NetworkingContext.h new file mode 100644 index 0000000..7a2e974 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/NetworkingContext.h @@ -0,0 +1 @@ +#include "WebCore/platform/network/NetworkingContext.h" diff --git a/src/3rdparty/webkit/include/WebCore/Node.h b/src/3rdparty/webkit/include/WebCore/Node.h new file mode 100644 index 0000000..eca5439 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Node.h @@ -0,0 +1 @@ +#include "WebCore/dom/Node.h" diff --git a/src/3rdparty/webkit/include/WebCore/NotImplemented.h b/src/3rdparty/webkit/include/WebCore/NotImplemented.h new file mode 100644 index 0000000..d9198fc --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/NotImplemented.h @@ -0,0 +1 @@ +#include "WebCore/platform/NotImplemented.h" diff --git a/src/3rdparty/webkit/include/WebCore/Page.h b/src/3rdparty/webkit/include/WebCore/Page.h new file mode 100644 index 0000000..ea3c5b3 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Page.h @@ -0,0 +1 @@ +#include "WebCore/page/Page.h" diff --git a/src/3rdparty/webkit/include/WebCore/PageCache.h b/src/3rdparty/webkit/include/WebCore/PageCache.h new file mode 100644 index 0000000..3210b0e --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PageCache.h @@ -0,0 +1 @@ +#include "WebCore/history/PageCache.h" diff --git a/src/3rdparty/webkit/include/WebCore/PageGroup.h b/src/3rdparty/webkit/include/WebCore/PageGroup.h new file mode 100644 index 0000000..2dd1abd --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PageGroup.h @@ -0,0 +1 @@ +#include "WebCore/page/PageGroup.h" diff --git a/src/3rdparty/webkit/include/WebCore/Path.h b/src/3rdparty/webkit/include/WebCore/Path.h new file mode 100644 index 0000000..add6db3 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Path.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/Path.h" diff --git a/src/3rdparty/webkit/include/WebCore/PlatformCALayer.h b/src/3rdparty/webkit/include/WebCore/PlatformCALayer.h new file mode 100644 index 0000000..bfa9258 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PlatformCALayer.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/ca/PlatformCALayer.h" diff --git a/src/3rdparty/webkit/include/WebCore/PlatformContextCairo.h b/src/3rdparty/webkit/include/WebCore/PlatformContextCairo.h new file mode 100644 index 0000000..ccd6a92 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PlatformContextCairo.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/cairo/PlatformContextCairo.h" diff --git a/src/3rdparty/webkit/include/WebCore/PlatformGestureEvent.h b/src/3rdparty/webkit/include/WebCore/PlatformGestureEvent.h new file mode 100644 index 0000000..377e5cb --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PlatformGestureEvent.h @@ -0,0 +1 @@ +#include "WebCore/platform/PlatformGestureEvent.h" diff --git a/src/3rdparty/webkit/include/WebCore/PlatformKeyboardEvent.h b/src/3rdparty/webkit/include/WebCore/PlatformKeyboardEvent.h new file mode 100644 index 0000000..19d8251 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PlatformKeyboardEvent.h @@ -0,0 +1 @@ +#include "WebCore/platform/PlatformKeyboardEvent.h" diff --git a/src/3rdparty/webkit/include/WebCore/PlatformMouseEvent.h b/src/3rdparty/webkit/include/WebCore/PlatformMouseEvent.h new file mode 100644 index 0000000..9d0abba --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PlatformMouseEvent.h @@ -0,0 +1 @@ +#include "WebCore/platform/PlatformMouseEvent.h" diff --git a/src/3rdparty/webkit/include/WebCore/PlatformStrategies.h b/src/3rdparty/webkit/include/WebCore/PlatformStrategies.h new file mode 100644 index 0000000..641c5d2 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PlatformStrategies.h @@ -0,0 +1 @@ +#include "WebCore/platform/PlatformStrategies.h" diff --git a/src/3rdparty/webkit/include/WebCore/PlatformTouchEvent.h b/src/3rdparty/webkit/include/WebCore/PlatformTouchEvent.h new file mode 100644 index 0000000..7628c0a --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PlatformTouchEvent.h @@ -0,0 +1 @@ +#include "WebCore/platform/PlatformTouchEvent.h" diff --git a/src/3rdparty/webkit/include/WebCore/PlatformTouchPoint.h b/src/3rdparty/webkit/include/WebCore/PlatformTouchPoint.h new file mode 100644 index 0000000..ef0c316 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PlatformTouchPoint.h @@ -0,0 +1 @@ +#include "WebCore/platform/PlatformTouchPoint.h" diff --git a/src/3rdparty/webkit/include/WebCore/PlatformWheelEvent.h b/src/3rdparty/webkit/include/WebCore/PlatformWheelEvent.h new file mode 100644 index 0000000..23a8af9 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PlatformWheelEvent.h @@ -0,0 +1 @@ +#include "WebCore/platform/PlatformWheelEvent.h" diff --git a/src/3rdparty/webkit/include/WebCore/PluginData.h b/src/3rdparty/webkit/include/WebCore/PluginData.h new file mode 100644 index 0000000..26ad15a --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PluginData.h @@ -0,0 +1 @@ +#include "WebCore/plugins/PluginData.h" diff --git a/src/3rdparty/webkit/include/WebCore/PluginStrategy.h b/src/3rdparty/webkit/include/WebCore/PluginStrategy.h new file mode 100644 index 0000000..4c84db0 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PluginStrategy.h @@ -0,0 +1 @@ +#include "WebCore/plugins/PluginStrategy.h" diff --git a/src/3rdparty/webkit/include/WebCore/PluginViewBase.h b/src/3rdparty/webkit/include/WebCore/PluginViewBase.h new file mode 100644 index 0000000..c5d0535 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PluginViewBase.h @@ -0,0 +1 @@ +#include "WebCore/plugins/PluginViewBase.h" diff --git a/src/3rdparty/webkit/include/WebCore/PolicyChecker.h b/src/3rdparty/webkit/include/WebCore/PolicyChecker.h new file mode 100644 index 0000000..98c0626 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PolicyChecker.h @@ -0,0 +1 @@ +#include "WebCore/loader/PolicyChecker.h" diff --git a/src/3rdparty/webkit/include/WebCore/PopupMenu.h b/src/3rdparty/webkit/include/WebCore/PopupMenu.h new file mode 100644 index 0000000..e4764a8 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PopupMenu.h @@ -0,0 +1 @@ +#include "WebCore/platform/PopupMenu.h" diff --git a/src/3rdparty/webkit/include/WebCore/PopupMenuClient.h b/src/3rdparty/webkit/include/WebCore/PopupMenuClient.h new file mode 100644 index 0000000..dba5017 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PopupMenuClient.h @@ -0,0 +1 @@ +#include "WebCore/platform/PopupMenuClient.h" diff --git a/src/3rdparty/webkit/include/WebCore/PopupMenuStyle.h b/src/3rdparty/webkit/include/WebCore/PopupMenuStyle.h new file mode 100644 index 0000000..e51de9b --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PopupMenuStyle.h @@ -0,0 +1 @@ +#include "WebCore/platform/PopupMenuStyle.h" diff --git a/src/3rdparty/webkit/include/WebCore/PrintContext.h b/src/3rdparty/webkit/include/WebCore/PrintContext.h new file mode 100644 index 0000000..f234cb6 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/PrintContext.h @@ -0,0 +1 @@ +#include "WebCore/page/PrintContext.h" diff --git a/src/3rdparty/webkit/include/WebCore/ProgressTracker.h b/src/3rdparty/webkit/include/WebCore/ProgressTracker.h new file mode 100644 index 0000000..3fff316 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ProgressTracker.h @@ -0,0 +1 @@ +#include "WebCore/loader/ProgressTracker.h" diff --git a/src/3rdparty/webkit/include/WebCore/ProtectionSpace.h b/src/3rdparty/webkit/include/WebCore/ProtectionSpace.h new file mode 100644 index 0000000..be6afe5 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ProtectionSpace.h @@ -0,0 +1 @@ +#include "WebCore/platform/network/ProtectionSpace.h" diff --git a/src/3rdparty/webkit/include/WebCore/ProxyServer.h b/src/3rdparty/webkit/include/WebCore/ProxyServer.h new file mode 100644 index 0000000..a933b78 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ProxyServer.h @@ -0,0 +1 @@ +#include "WebCore/platform/network/ProxyServer.h" diff --git a/src/3rdparty/webkit/include/WebCore/Range.h b/src/3rdparty/webkit/include/WebCore/Range.h new file mode 100644 index 0000000..21ebad8 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Range.h @@ -0,0 +1 @@ +#include "WebCore/dom/Range.h" diff --git a/src/3rdparty/webkit/include/WebCore/RenderEmbeddedObject.h b/src/3rdparty/webkit/include/WebCore/RenderEmbeddedObject.h new file mode 100644 index 0000000..31be6c9 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/RenderEmbeddedObject.h @@ -0,0 +1 @@ +#include "WebCore/rendering/RenderEmbeddedObject.h" diff --git a/src/3rdparty/webkit/include/WebCore/RenderLayer.h b/src/3rdparty/webkit/include/WebCore/RenderLayer.h new file mode 100644 index 0000000..aefe178 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/RenderLayer.h @@ -0,0 +1 @@ +#include "WebCore/rendering/RenderLayer.h" diff --git a/src/3rdparty/webkit/include/WebCore/RenderTheme.h b/src/3rdparty/webkit/include/WebCore/RenderTheme.h new file mode 100644 index 0000000..324d109 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/RenderTheme.h @@ -0,0 +1 @@ +#include "WebCore/rendering/RenderTheme.h" diff --git a/src/3rdparty/webkit/include/WebCore/RenderTreeAsText.h b/src/3rdparty/webkit/include/WebCore/RenderTreeAsText.h new file mode 100644 index 0000000..7ae5171 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/RenderTreeAsText.h @@ -0,0 +1 @@ +#include "WebCore/rendering/RenderTreeAsText.h" diff --git a/src/3rdparty/webkit/include/WebCore/RenderView.h b/src/3rdparty/webkit/include/WebCore/RenderView.h new file mode 100644 index 0000000..3402a57 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/RenderView.h @@ -0,0 +1 @@ +#include "WebCore/rendering/RenderView.h" diff --git a/src/3rdparty/webkit/include/WebCore/ReplaceSelectionCommand.h b/src/3rdparty/webkit/include/WebCore/ReplaceSelectionCommand.h new file mode 100644 index 0000000..e320498 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ReplaceSelectionCommand.h @@ -0,0 +1 @@ +#include "WebCore/editing/ReplaceSelectionCommand.h" diff --git a/src/3rdparty/webkit/include/WebCore/ResourceHandle.h b/src/3rdparty/webkit/include/WebCore/ResourceHandle.h new file mode 100644 index 0000000..42a0e20 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ResourceHandle.h @@ -0,0 +1 @@ +#include "WebCore/platform/network/ResourceHandle.h" diff --git a/src/3rdparty/webkit/include/WebCore/ResourceLoadScheduler.h b/src/3rdparty/webkit/include/WebCore/ResourceLoadScheduler.h new file mode 100644 index 0000000..5cf5d4b --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ResourceLoadScheduler.h @@ -0,0 +1 @@ +#include "WebCore/loader/ResourceLoadScheduler.h" diff --git a/src/3rdparty/webkit/include/WebCore/RuntimeEnabledFeatures.h b/src/3rdparty/webkit/include/WebCore/RuntimeEnabledFeatures.h new file mode 100644 index 0000000..a8e879b --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/RuntimeEnabledFeatures.h @@ -0,0 +1 @@ +#include "WebCore/bindings/generic/RuntimeEnabledFeatures.h" diff --git a/src/3rdparty/webkit/include/WebCore/SchemeRegistry.h b/src/3rdparty/webkit/include/WebCore/SchemeRegistry.h new file mode 100644 index 0000000..6c89b6a --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/SchemeRegistry.h @@ -0,0 +1 @@ +#include "WebCore/platform/SchemeRegistry.h" diff --git a/src/3rdparty/webkit/include/WebCore/ScriptController.h b/src/3rdparty/webkit/include/WebCore/ScriptController.h new file mode 100644 index 0000000..5bd55f4 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ScriptController.h @@ -0,0 +1 @@ +#include "WebCore/bindings/js/ScriptController.h" diff --git a/src/3rdparty/webkit/include/WebCore/ScriptValue.h b/src/3rdparty/webkit/include/WebCore/ScriptValue.h new file mode 100644 index 0000000..4afbad7 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ScriptValue.h @@ -0,0 +1 @@ +#include "WebCore/bindings/js/ScriptValue.h" diff --git a/src/3rdparty/webkit/include/WebCore/ScrollTypes.h b/src/3rdparty/webkit/include/WebCore/ScrollTypes.h new file mode 100644 index 0000000..c35b2f3 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ScrollTypes.h @@ -0,0 +1 @@ +#include "WebCore/platform/ScrollTypes.h" diff --git a/src/3rdparty/webkit/include/WebCore/ScrollView.h b/src/3rdparty/webkit/include/WebCore/ScrollView.h new file mode 100644 index 0000000..6b4f7f6 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ScrollView.h @@ -0,0 +1 @@ +#include "WebCore/platform/ScrollView.h" diff --git a/src/3rdparty/webkit/include/WebCore/ScrollableArea.h b/src/3rdparty/webkit/include/WebCore/ScrollableArea.h new file mode 100644 index 0000000..11afb5f --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ScrollableArea.h @@ -0,0 +1 @@ +#include "WebCore/platform/ScrollableArea.h" diff --git a/src/3rdparty/webkit/include/WebCore/Scrollbar.h b/src/3rdparty/webkit/include/WebCore/Scrollbar.h new file mode 100644 index 0000000..9fe1514 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Scrollbar.h @@ -0,0 +1 @@ +#include "WebCore/platform/Scrollbar.h" diff --git a/src/3rdparty/webkit/include/WebCore/ScrollbarTheme.h b/src/3rdparty/webkit/include/WebCore/ScrollbarTheme.h new file mode 100644 index 0000000..fc4e762 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ScrollbarTheme.h @@ -0,0 +1 @@ +#include "WebCore/platform/ScrollbarTheme.h" diff --git a/src/3rdparty/webkit/include/WebCore/SearchPopupMenu.h b/src/3rdparty/webkit/include/WebCore/SearchPopupMenu.h new file mode 100644 index 0000000..637ad39 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/SearchPopupMenu.h @@ -0,0 +1 @@ +#include "WebCore/platform/SearchPopupMenu.h" diff --git a/src/3rdparty/webkit/include/WebCore/SecurityOrigin.h b/src/3rdparty/webkit/include/WebCore/SecurityOrigin.h new file mode 100644 index 0000000..5b00657 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/SecurityOrigin.h @@ -0,0 +1 @@ +#include "WebCore/page/SecurityOrigin.h" diff --git a/src/3rdparty/webkit/include/WebCore/SecurityOriginHash.h b/src/3rdparty/webkit/include/WebCore/SecurityOriginHash.h new file mode 100644 index 0000000..dac6640 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/SecurityOriginHash.h @@ -0,0 +1 @@ +#include "WebCore/page/SecurityOriginHash.h" diff --git a/src/3rdparty/webkit/include/WebCore/SerializedScriptValue.h b/src/3rdparty/webkit/include/WebCore/SerializedScriptValue.h new file mode 100644 index 0000000..2186c56 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/SerializedScriptValue.h @@ -0,0 +1 @@ +#include "WebCore/bindings/js/SerializedScriptValue.h" diff --git a/src/3rdparty/webkit/include/WebCore/Settings.h b/src/3rdparty/webkit/include/WebCore/Settings.h new file mode 100644 index 0000000..3a29adc --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Settings.h @@ -0,0 +1 @@ +#include "WebCore/page/Settings.h" diff --git a/src/3rdparty/webkit/include/WebCore/ShadowRoot.h b/src/3rdparty/webkit/include/WebCore/ShadowRoot.h new file mode 100644 index 0000000..1a832bb --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ShadowRoot.h @@ -0,0 +1 @@ +#include "WebCore/dom/ShadowRoot.h" diff --git a/src/3rdparty/webkit/include/WebCore/SharedBuffer.h b/src/3rdparty/webkit/include/WebCore/SharedBuffer.h new file mode 100644 index 0000000..95eedd0 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/SharedBuffer.h @@ -0,0 +1 @@ +#include "WebCore/platform/SharedBuffer.h" diff --git a/src/3rdparty/webkit/include/WebCore/SimpleFontData.h b/src/3rdparty/webkit/include/WebCore/SimpleFontData.h new file mode 100644 index 0000000..3d90d29 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/SimpleFontData.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/SimpleFontData.h" diff --git a/src/3rdparty/webkit/include/WebCore/SoftLinking.h b/src/3rdparty/webkit/include/WebCore/SoftLinking.h new file mode 100644 index 0000000..3ceb0c0 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/SoftLinking.h @@ -0,0 +1 @@ +#include "WebCore/platform/mac/SoftLinking.h" diff --git a/src/3rdparty/webkit/include/WebCore/SpellingCorrectionController.h b/src/3rdparty/webkit/include/WebCore/SpellingCorrectionController.h new file mode 100644 index 0000000..d7c0571 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/SpellingCorrectionController.h @@ -0,0 +1 @@ +#include "WebCore/editing/SpellingCorrectionController.h" diff --git a/src/3rdparty/webkit/include/WebCore/StorageTracker.h b/src/3rdparty/webkit/include/WebCore/StorageTracker.h new file mode 100644 index 0000000..55d240a --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/StorageTracker.h @@ -0,0 +1 @@ +#include "WebCore/storage/StorageTracker.h" diff --git a/src/3rdparty/webkit/include/WebCore/SubstituteData.h b/src/3rdparty/webkit/include/WebCore/SubstituteData.h new file mode 100644 index 0000000..47db253 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/SubstituteData.h @@ -0,0 +1 @@ +#include "WebCore/loader/SubstituteData.h" diff --git a/src/3rdparty/webkit/include/WebCore/TextAffinity.h b/src/3rdparty/webkit/include/WebCore/TextAffinity.h new file mode 100644 index 0000000..e97160c --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/TextAffinity.h @@ -0,0 +1 @@ +#include "WebCore/editing/TextAffinity.h" diff --git a/src/3rdparty/webkit/include/WebCore/TextCheckerClient.h b/src/3rdparty/webkit/include/WebCore/TextCheckerClient.h new file mode 100644 index 0000000..860e675 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/TextCheckerClient.h @@ -0,0 +1 @@ +#include "WebCore/platform/text/TextCheckerClient.h" diff --git a/src/3rdparty/webkit/include/WebCore/TextDirection.h b/src/3rdparty/webkit/include/WebCore/TextDirection.h new file mode 100644 index 0000000..de842d6 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/TextDirection.h @@ -0,0 +1 @@ +#include "WebCore/platform/text/TextDirection.h" diff --git a/src/3rdparty/webkit/include/WebCore/TextIterator.h b/src/3rdparty/webkit/include/WebCore/TextIterator.h new file mode 100644 index 0000000..193bbd8 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/TextIterator.h @@ -0,0 +1 @@ +#include "WebCore/editing/TextIterator.h" diff --git a/src/3rdparty/webkit/include/WebCore/TextResourceDecoder.h b/src/3rdparty/webkit/include/WebCore/TextResourceDecoder.h new file mode 100644 index 0000000..75eae5c --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/TextResourceDecoder.h @@ -0,0 +1 @@ +#include "WebCore/loader/TextResourceDecoder.h" diff --git a/src/3rdparty/webkit/include/WebCore/TextRun.h b/src/3rdparty/webkit/include/WebCore/TextRun.h new file mode 100644 index 0000000..8e2a041 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/TextRun.h @@ -0,0 +1 @@ +#include "WebCore/platform/graphics/TextRun.h" diff --git a/src/3rdparty/webkit/include/WebCore/Timer.h b/src/3rdparty/webkit/include/WebCore/Timer.h new file mode 100644 index 0000000..62727b1 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Timer.h @@ -0,0 +1 @@ +#include "WebCore/platform/Timer.h" diff --git a/src/3rdparty/webkit/include/WebCore/UIEventWithKeyState.h b/src/3rdparty/webkit/include/WebCore/UIEventWithKeyState.h new file mode 100644 index 0000000..c0ac9aa --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/UIEventWithKeyState.h @@ -0,0 +1 @@ +#include "WebCore/dom/UIEventWithKeyState.h" diff --git a/src/3rdparty/webkit/include/WebCore/UserContentTypes.h b/src/3rdparty/webkit/include/WebCore/UserContentTypes.h new file mode 100644 index 0000000..cf75a72 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/UserContentTypes.h @@ -0,0 +1 @@ +#include "WebCore/page/UserContentTypes.h" diff --git a/src/3rdparty/webkit/include/WebCore/UserContentURLPattern.h b/src/3rdparty/webkit/include/WebCore/UserContentURLPattern.h new file mode 100644 index 0000000..877c9cb --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/UserContentURLPattern.h @@ -0,0 +1 @@ +#include "WebCore/page/UserContentURLPattern.h" diff --git a/src/3rdparty/webkit/include/WebCore/UserGestureIndicator.h b/src/3rdparty/webkit/include/WebCore/UserGestureIndicator.h new file mode 100644 index 0000000..384902e --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/UserGestureIndicator.h @@ -0,0 +1 @@ +#include "WebCore/dom/UserGestureIndicator.h" diff --git a/src/3rdparty/webkit/include/WebCore/UserScriptTypes.h b/src/3rdparty/webkit/include/WebCore/UserScriptTypes.h new file mode 100644 index 0000000..bdd9ec8 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/UserScriptTypes.h @@ -0,0 +1 @@ +#include "WebCore/page/UserScriptTypes.h" diff --git a/src/3rdparty/webkit/include/WebCore/UserTypingGestureIndicator.h b/src/3rdparty/webkit/include/WebCore/UserTypingGestureIndicator.h new file mode 100644 index 0000000..b7a34a4 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/UserTypingGestureIndicator.h @@ -0,0 +1 @@ +#include "WebCore/dom/UserTypingGestureIndicator.h" diff --git a/src/3rdparty/webkit/include/WebCore/ViewportArguments.h b/src/3rdparty/webkit/include/WebCore/ViewportArguments.h new file mode 100644 index 0000000..dd0911d --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/ViewportArguments.h @@ -0,0 +1 @@ +#include "WebCore/dom/ViewportArguments.h" diff --git a/src/3rdparty/webkit/include/WebCore/VisiblePosition.h b/src/3rdparty/webkit/include/WebCore/VisiblePosition.h new file mode 100644 index 0000000..5575815 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/VisiblePosition.h @@ -0,0 +1 @@ +#include "WebCore/editing/VisiblePosition.h" diff --git a/src/3rdparty/webkit/include/WebCore/VisitedLinkStrategy.h b/src/3rdparty/webkit/include/WebCore/VisitedLinkStrategy.h new file mode 100644 index 0000000..f5b8a57 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/VisitedLinkStrategy.h @@ -0,0 +1 @@ +#include "WebCore/platform/VisitedLinkStrategy.h" diff --git a/src/3rdparty/webkit/include/WebCore/WebCoreKeyboardUIMode.h b/src/3rdparty/webkit/include/WebCore/WebCoreKeyboardUIMode.h new file mode 100644 index 0000000..8b748d3 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/WebCoreKeyboardUIMode.h @@ -0,0 +1 @@ +#include "WebCore/page/WebCoreKeyboardUIMode.h" diff --git a/src/3rdparty/webkit/include/WebCore/Widget.h b/src/3rdparty/webkit/include/WebCore/Widget.h new file mode 100644 index 0000000..d4e2687 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/Widget.h @@ -0,0 +1 @@ +#include "WebCore/platform/Widget.h" diff --git a/src/3rdparty/webkit/include/WebCore/WindowFeatures.h b/src/3rdparty/webkit/include/WebCore/WindowFeatures.h new file mode 100644 index 0000000..bb349fd --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/WindowFeatures.h @@ -0,0 +1 @@ +#include "WebCore/page/WindowFeatures.h" diff --git a/src/3rdparty/webkit/include/WebCore/markup.h b/src/3rdparty/webkit/include/WebCore/markup.h new file mode 100644 index 0000000..05cdeea --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/markup.h @@ -0,0 +1 @@ +#include "WebCore/editing/markup.h" diff --git a/src/3rdparty/webkit/include/WebCore/npapi.h b/src/3rdparty/webkit/include/WebCore/npapi.h new file mode 100644 index 0000000..ec1c3b0 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/npapi.h @@ -0,0 +1 @@ +#include "WebCore/bridge/npapi.h" diff --git a/src/3rdparty/webkit/include/WebCore/npfunctions.h b/src/3rdparty/webkit/include/WebCore/npfunctions.h new file mode 100644 index 0000000..151ef69 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/npfunctions.h @@ -0,0 +1 @@ +#include "WebCore/plugins/npfunctions.h" diff --git a/src/3rdparty/webkit/include/WebCore/npruntime.h b/src/3rdparty/webkit/include/WebCore/npruntime.h new file mode 100644 index 0000000..271e548 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/npruntime.h @@ -0,0 +1 @@ +#include "WebCore/bridge/npruntime.h" diff --git a/src/3rdparty/webkit/include/WebCore/npruntime_internal.h b/src/3rdparty/webkit/include/WebCore/npruntime_internal.h new file mode 100644 index 0000000..255abc3 --- /dev/null +++ b/src/3rdparty/webkit/include/WebCore/npruntime_internal.h @@ -0,0 +1 @@ +#include "WebCore/bridge/npruntime_internal.h" diff --git a/src/3rdparty/webkit/include/WebKit2/RunLoop.h b/src/3rdparty/webkit/include/WebKit2/RunLoop.h new file mode 100644 index 0000000..d6f6d5f --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/RunLoop.h @@ -0,0 +1 @@ +#include "WebKit2/Platform/RunLoop.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKArray.h b/src/3rdparty/webkit/include/WebKit2/WKArray.h new file mode 100644 index 0000000..b3841b0 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKArray.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKArray.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKBackForwardList.h b/src/3rdparty/webkit/include/WebKit2/WKBackForwardList.h new file mode 100644 index 0000000..26f2e74 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKBackForwardList.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKBackForwardList.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKBackForwardListItem.h b/src/3rdparty/webkit/include/WebKit2/WKBackForwardListItem.h new file mode 100644 index 0000000..e609686 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKBackForwardListItem.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKBackForwardListItem.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKBase.h b/src/3rdparty/webkit/include/WebKit2/WKBase.h new file mode 100644 index 0000000..c859bf9 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKBase.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKBase.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKContext.h b/src/3rdparty/webkit/include/WebKit2/WKContext.h new file mode 100644 index 0000000..c884b67 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKContext.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKContext.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKContextMenuItemTypes.h b/src/3rdparty/webkit/include/WebKit2/WKContextMenuItemTypes.h new file mode 100644 index 0000000..62e0aa9 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKContextMenuItemTypes.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKContextMenuItemTypes.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKCookieManager.h b/src/3rdparty/webkit/include/WebKit2/WKCookieManager.h new file mode 100644 index 0000000..3ff208f --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKCookieManager.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKCookieManager.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKCredentialTypes.h b/src/3rdparty/webkit/include/WebKit2/WKCredentialTypes.h new file mode 100644 index 0000000..6221bc7 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKCredentialTypes.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKCredentialTypes.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKData.h b/src/3rdparty/webkit/include/WebKit2/WKData.h new file mode 100644 index 0000000..794eedf --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKData.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKData.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKDictionary.h b/src/3rdparty/webkit/include/WebKit2/WKDictionary.h new file mode 100644 index 0000000..570f234 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKDictionary.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKDictionary.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKError.h b/src/3rdparty/webkit/include/WebKit2/WKError.h new file mode 100644 index 0000000..4cf78d6 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKError.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKError.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKEvent.h b/src/3rdparty/webkit/include/WebKit2/WKEvent.h new file mode 100644 index 0000000..e58bc1c --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKEvent.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKEvent.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKFindOptions.h b/src/3rdparty/webkit/include/WebKit2/WKFindOptions.h new file mode 100644 index 0000000..1e4ef92 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKFindOptions.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKFindOptions.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKFormSubmissionListener.h b/src/3rdparty/webkit/include/WebKit2/WKFormSubmissionListener.h new file mode 100644 index 0000000..b4cceb7 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKFormSubmissionListener.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKFormSubmissionListener.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKFrame.h b/src/3rdparty/webkit/include/WebKit2/WKFrame.h new file mode 100644 index 0000000..3ac6529 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKFrame.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKFrame.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKFramePolicyListener.h b/src/3rdparty/webkit/include/WebKit2/WKFramePolicyListener.h new file mode 100644 index 0000000..7916c38 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKFramePolicyListener.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKFramePolicyListener.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKGeolocationManager.h b/src/3rdparty/webkit/include/WebKit2/WKGeolocationManager.h new file mode 100644 index 0000000..3e503e6 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKGeolocationManager.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKGeolocationManager.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKGeolocationPermissionRequest.h b/src/3rdparty/webkit/include/WebKit2/WKGeolocationPermissionRequest.h new file mode 100644 index 0000000..5205a0e --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKGeolocationPermissionRequest.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKGeolocationPermissionRequest.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKGeolocationPosition.h b/src/3rdparty/webkit/include/WebKit2/WKGeolocationPosition.h new file mode 100644 index 0000000..cff7f23 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKGeolocationPosition.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKGeolocationPosition.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKGeometry.h b/src/3rdparty/webkit/include/WebKit2/WKGeometry.h new file mode 100644 index 0000000..b84460c --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKGeometry.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKGeometry.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKGraphicsContext.h b/src/3rdparty/webkit/include/WebKit2/WKGraphicsContext.h new file mode 100644 index 0000000..fbccdc9 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKGraphicsContext.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKGraphicsContext.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKImage.h b/src/3rdparty/webkit/include/WebKit2/WKImage.h new file mode 100644 index 0000000..a02314d --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKImage.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKImage.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKMutableArray.h b/src/3rdparty/webkit/include/WebKit2/WKMutableArray.h new file mode 100644 index 0000000..a47af3b --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKMutableArray.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKMutableArray.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKMutableDictionary.h b/src/3rdparty/webkit/include/WebKit2/WKMutableDictionary.h new file mode 100644 index 0000000..0c345f5 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKMutableDictionary.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKMutableDictionary.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKNativeEvent.h b/src/3rdparty/webkit/include/WebKit2/WKNativeEvent.h new file mode 100644 index 0000000..deeb2a5 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKNativeEvent.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKNativeEvent.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKNavigationData.h b/src/3rdparty/webkit/include/WebKit2/WKNavigationData.h new file mode 100644 index 0000000..9607b97 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKNavigationData.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKNavigationData.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKNumber.h b/src/3rdparty/webkit/include/WebKit2/WKNumber.h new file mode 100644 index 0000000..7924588 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKNumber.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKNumber.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKOpenPanelParameters.h b/src/3rdparty/webkit/include/WebKit2/WKOpenPanelParameters.h new file mode 100644 index 0000000..b0c4134 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKOpenPanelParameters.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKOpenPanelParameters.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKOpenPanelResultListener.h b/src/3rdparty/webkit/include/WebKit2/WKOpenPanelResultListener.h new file mode 100644 index 0000000..a3b015d --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKOpenPanelResultListener.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKOpenPanelResultListener.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKPage.h b/src/3rdparty/webkit/include/WebKit2/WKPage.h new file mode 100644 index 0000000..75d785c --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKPage.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKPage.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKPageGroup.h b/src/3rdparty/webkit/include/WebKit2/WKPageGroup.h new file mode 100644 index 0000000..eefeb25 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKPageGroup.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKPageGroup.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKPageLoadTypes.h b/src/3rdparty/webkit/include/WebKit2/WKPageLoadTypes.h new file mode 100644 index 0000000..cd39b9d --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKPageLoadTypes.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKPageLoadTypes.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKPreferences.h b/src/3rdparty/webkit/include/WebKit2/WKPreferences.h new file mode 100644 index 0000000..5777a3a --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKPreferences.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKPreferences.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKProtectionSpaceTypes.h b/src/3rdparty/webkit/include/WebKit2/WKProtectionSpaceTypes.h new file mode 100644 index 0000000..025ce94 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKProtectionSpaceTypes.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/C/WKProtectionSpaceTypes.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKRetainPtr.h b/src/3rdparty/webkit/include/WebKit2/WKRetainPtr.h new file mode 100644 index 0000000..5e58f97 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKRetainPtr.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/cpp/WKRetainPtr.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKString.h b/src/3rdparty/webkit/include/WebKit2/WKString.h new file mode 100644 index 0000000..381b3c6 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKString.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKString.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKType.h b/src/3rdparty/webkit/include/WebKit2/WKType.h new file mode 100644 index 0000000..addabdd --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKType.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKType.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKURL.h b/src/3rdparty/webkit/include/WebKit2/WKURL.h new file mode 100644 index 0000000..d7f765b --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKURL.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKURL.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKURLRequest.h b/src/3rdparty/webkit/include/WebKit2/WKURLRequest.h new file mode 100644 index 0000000..21d3b70 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKURLRequest.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKURLRequest.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKURLResponse.h b/src/3rdparty/webkit/include/WebKit2/WKURLResponse.h new file mode 100644 index 0000000..f62c0f5 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKURLResponse.h @@ -0,0 +1 @@ +#include "WebKit2/Shared/API/c/WKURLResponse.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WKView.h b/src/3rdparty/webkit/include/WebKit2/WKView.h new file mode 100644 index 0000000..4247dc6 --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WKView.h @@ -0,0 +1 @@ +#include "WebKit2/UIProcess/API/mac/WKView.h" diff --git a/src/3rdparty/webkit/include/WebKit2/WebProcess.h b/src/3rdparty/webkit/include/WebKit2/WebProcess.h new file mode 100644 index 0000000..9b8eb4a --- /dev/null +++ b/src/3rdparty/webkit/include/WebKit2/WebProcess.h @@ -0,0 +1 @@ +#include "WebKit2/WebProcess/WebProcess.h" -- cgit v0.12 From 867f3a9860382380adca117a1f0e83f3d319f9f4 Mon Sep 17 00:00:00 2001 From: Casper van Donderen <casper.vandonderen@nokia.com> Date: Fri, 19 Aug 2011 10:02:17 +0200 Subject: Fix a typo in qt-conf docs. Fixes: QTWEBSITE-272 Reviewed-By: Trust Me --- doc/src/deployment/qt-conf.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/deployment/qt-conf.qdoc b/doc/src/deployment/qt-conf.qdoc index 2f68f3d..5204cc6 100644 --- a/doc/src/deployment/qt-conf.qdoc +++ b/doc/src/deployment/qt-conf.qdoc @@ -48,7 +48,7 @@ \o \c :/qt/etc/qt.conf using the resource system - \o on Mac OS X, in the Resource directory inside the appliction + \o on Mac OS X, in the Resource directory inside the application bundle, for example \c assistant.app/Contents/Resources/qt.conf \o in the directory containing the application executable, i.e. -- cgit v0.12 From 3a3b4a0aca8ca31bb135b456eb58763733cf047f Mon Sep 17 00:00:00 2001 From: Timo Turunen <timo.p.turunen@nokia.com> Date: Fri, 19 Aug 2011 13:19:01 +0300 Subject: Update 4.7.4 changes Reviewed-by: Trust Me --- dist/changes-4.7.4 | 304 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 304 insertions(+) diff --git a/dist/changes-4.7.4 b/dist/changes-4.7.4 index a37e66a..9a08d15 100644 --- a/dist/changes-4.7.4 +++ b/dist/changes-4.7.4 @@ -19,13 +19,317 @@ Merge Request: http://qt.gitorious.org * Library * **************************************************************************** +QtGui +----- + + - [QTBUG-20214] QRentBook: LSK and RSK of booking page will change + somethimes + - [QTBUG-19656] Spectrum: the Mode menu disappears after the device is + changed from portrait to landscape. + - [QTBUG-19260] Cursor cannot be placed between letters f and i - "fi" + is interpreted as one character + - [QTBUG-19157] Crash in QGLContextPrivate::bindTexture() when using + QPainter::fillRect() with a brush having a size > max_texture_size + - [QTBUG-19089] TextInput positionToRectangle doesn't return correct + coordinates for the cursor in pre-edit mode + - [QTBUG-19067] Font glyphs get clipped on the top + - [QTBUG-18500] QTextBlock crash + - [QTBUG-18303] Arabic multiline text is clipped on the right + - [QTBUG-18185] QStaticText: Wrong kerning and baselines when rotating a + QGraphicsView + - [QTBUG-17443] Feedreadercrash: when opening feed with unicode characters + - [QTBUG-17244] QGraphicsLayout Layouting should be done in one go. Ugly + layouting visible otherwise + - [QTBUG-17209] Bug-231 introduces an off-by-one error + - [QTBUG-17117] Arabic reordering problem when 2 fonts are used + - [QTBUG-11131] QAbstractScrollArea::setViewport() causes crash when used + from within event handler method + - [QTBUG-16422] Big coordinate values cause segfault on ARM when calling + QGraphicsEllipseItem::contains + - [QTBUG-18017] Regression: Text selection with shift-click stopped working + - [QTBUG-18192] Crash when invoking blockBoundingRect over a QTextDocument + documentLayout + - [QTBUG-17505] Inflexible focus handling in QGraphicsScene + - [QTBUG-17020] QPainter::drawText() fails to draw correct text in some + circumstances. Related to QTBUG-12950 + - [QTBUG-16401] QGraphicsScene returns focus incorrectly when QGraphicsView + is focused + - [QTBUG-17812] regression: qsortfilterproxymodel::reset doesn't invalidate + the model (Windows) + - [QTBUG-17230] QPlainTextEdit corruption/crash after scrolling + - [QTBUG-17536] qguistatemachine::cloneEvent doesn't clone + GraphicsSceneWheel Events correctly + - [QTBUG-17254] XPM files crash QImage (write) + - [QTBUG-16292] QTreeView crash in indexRowSizeHint/itemHeight + - [QTBUG-17390] Child widgets don't inherit their parent's input contexts + - [QTBUG-15910] setstylesheet on a QComboBox causes a segmentation fault + - [QTBUG-16652] Compilation of "4.7" branch fails: + private/qdrawhelper_arm_simd_p.h: No such file or directory + +QtNetwork +--------- + + - [QTBUG-17464] SIGBUS in fetchAndAddOrdered from + QlcdEngine::connectionStateSignalsSlot + - [QTBUG-16022] QHttpNetworkConnectionChannel::expand discards data if + gzip-stream has missing end-of-stream marker + - [QTBUG-17199] ICD Bearer management: Causes the main thread to hang + when ran on a different thread. + +QtCore +------ + + - [QTBUG-15421] QDirIterator returns hidden directories when it should only + return files and returns hidden files when it should only return + directories + +QtScript +-------- + + - [QTBUG-17815] Missing APIShims in obsoleted QScriptValue constructor + - [QTBUG-17788] Crash when calling collectGarbage() after requesting + arguments object of native context + +QtDBus +------ + + - [QTBUG-14228] Ensure Qt 4.7 doesn't crash when a D-Bus message with file + descriptors is received + +QtSql +----- + + - [QTBUG-14831] Dynamic sorting of a QSortFilterProxyModel on a + QSqlTableModel with OnManualSubmit is broken (4.7 regression) + +Declarative +----------- + + - [QTBUG-20159] No effect of setting color on a QStaticText or a + QML element + - [QTBUG-18428] Colored and underlined styled text are not underlined or + completely coloured on device + - [QTBUG-18362] wigglytext.qml does not behave correctly in qmlscene + - [QTBUG-18266] More than one XmlListModel - Lists randomly show data from + wrong model + - [QTBUG-15983] Cannot pass enum value as signal parameter from C++ to QML + - [QTBUG-14974] ListView and GridView + contentY performance + - [QTBUG-18412] Crash in sendPostedEvents() - QObject::isWidgetType() + (issue with QDeclarativePixmapReply) + - [QTBUG-15356] PathView doesn't update if preferredHighlightBegin and + preferredHighlightEnd changed + - [QTBUG-17562] TextInput text in echo mode PasswordEchoOnEdit revealed + on refocus + - [QTBUG-17775] Crash when using FolderListModel with a repeater + - [QTBUG-17361] Nested pressDelays crashes application + - [QTBUG-15705] QDeclarativeTextInput::mousePressEvent() doesn't call + QInputContext::mouseHandler() + - [QTBUG-17501] Focus: Tap any of the Rounded-cornered rectangle, the + context menu doesn't disappear. + - [QTBUG-17008] ListView + XmlListModel freeze application when change + language key combination + - [QTBUG-17324] incorrect 'version is not installed' error when importing + QML module + - [QTBUG-16999] QML TextInput doesn't scroll if writing preedit at the end + of the line + - [QTBUG-13451] Support property versioning in QML + - [QTBUG-16959] Crash when using Grid.TopToBottom flow with Repeater + inside Grid + - [QTBUG-16522] QML ListView Should Support Dynamic Headers and Footers + - [QTBUG-17114] QtQuick 1.1 alignment regression + - [QTBUG-16283] TextEdit and TextInput need text selection modes + - [QTBUG-16284] Disable drag and drop in TextEdit and TextInput + +OpenVG +------ + - [QTBUG-18682] QImage convertToFormat does not work with certain image + formats when default (OpenVG) rendering engine used. + +OpenGL +------ + - [QTBUG-14217] Unresolved symbol QGLWindowSurface::staticMetaObject when + building for Windows Mobile 5.0 with OpenGL ES 1.1 support + - [QTBUG-18184] mingw gcc 4 static build failed in tools/qml because of the + symbol export in libQtOpenGL + - [QTBUG-17256] Change QGLPixmapData load functions to use the + 'convertInPlace' versions of QImage to save memory + +3rdParty +-------- + + - Image formats + * [QTBUG-20425] Update bundled libpng to 1.5.4 (security) + **************************************************************************** * Platform Specific Changes * **************************************************************************** +Qt for Linux/X11 +---------------- + + - Declarative + * [QTBUG-19914] Segfault in QDeclarativeBinding::createBinding triggered + by QMultimediaKit + - gui + * [QTBUG-16175] REG: Qt 4.7/Linux Qt Designer / Qt Creator show multiple + warnings: "Application asked to unregister timer 0x17000002 which is + not registered in this thread. Fix application." + +Qt for Windows +-------------- + + - gui + * [QTBUG-19878] QImage constructor crash when opening some tiff images + - corelib + * [QTBUG-17014] Qt event delivery is unreliable on windows platforms + - declarative + * [QTBUG-19198] ListView lose items + * [QTBUG-18587] Roles are not removed in listmodel + - qmake + * [QTBUG-18537] Compiling Qt on Windows XP x64 using MinGW-w64 fails + +Qt for Mac OS X +--------------- + + - gui + * [QTBUG-20496] Qt does not compile under OSX Lion or llvm-gcc + * [QTBUG-18547] Buffer overrun in QMacPixmapData::macCreatePixels + (QPixmap_mac.cpp) + * [QTBUG-15474] Mac: Qt:Sheet dialog permanently loses focus after + moving the parent window + * [QTBUG-15897] QMainWindow crash in destructor when having a + QDockWidget of type Qt::Drawer containing a QTreeWidget + - corelib + * [QTBUG-11481] Floating Dock Widget behavior on Mac [REGRESSION] + - network + * [QTBUG-14520] SSL Isn't working with osx 10.5 + * [QTBUG-5645] SSL Memory leaks on Mac. + +Qt for Symbian +-------------- + + - general + * [QTBUG-20216] Update QtOpenGL section in Symbian platform notes + - examples + * [QTBUG-15176] Default heap/stack size might not be enough for symbian + - qmake & mkspecs + * [QTBUG-20669] Symbian: DEBUGGABLE_UDEBONLY keyword needed in + generated mmp files + * [QTBUG-20192] Qt sis can't be created on symbian^1 5.0 and + symbian^3 PS2 environments + * [QTBUG-18207] QMAKE_CLEAN items with wildcards in symbian-abld + builds will halt the build without obvious reason. + * [QTBUG-17927] Simplified Chinese language is not supported + in Qt 4.7.2 + - openvg + * [QTBUG-20339] when camera application is opened and closed, the qml + application in the background is getting closed + * [QTBUG-18027] Lazy conversion in fromSymbianCFbsBitmap for openVG + - opengl + * [QTBUG-19183] Enable multisampling if there's hw support for it + on Symbian + * [QTBUG-19180] Simplify texture pooling in GL graphics system + * [QTBUG-18850] Fix orientation change. Current behaviour results to + black screen + * [QTBUG-15254] Implement QPixmap::fromSymbianRSgImage() in the + OpenGL graphics system + * [QTBUG-18209] Native image handle provider support in QGLPixmapData + * [QTBUG-18270] Use destroyed swap behaviour in GL graphics system + on Symbian + * [QTBUG-15252] Implement CFbsBitmap backend for QPixmap in OpenGL + graphics system on Symbian + * [QTBUG-17850] Implement GL graphics system releaseCachedResources() + * [QTBUG-15253] Verify that applications using the OpenGL graphics + system on Symbian consume zero graphics memory when they are + not visible + * [QTBUG-16977] Symbian: Implement QPixmap::fromSymbianCFbsBitmap() in + the OpenGL graphics system + * [QTBUG-16949] Symbian: Recreate EGL surface on native window resize + - gui + * [QTBUG-20255] Regression: Some QMenus are shown completely transparent + in Symbian + * [QTBUG-20240] Regression: QS60Style - All standardIcons are drawn as + "small icons" + * [QTBUG-20813] Disabled splitscreen translation still moves screen + * [QTBUG-20034] Splitview - Auto-translation should translate as + little as possible to ensure visibility of the cursor + * [QTBUG-20007] Symbian: Do not add linked fonts to the QFontDatabase + * [QTBUG-19911] Orientation change causes unnecessary resizes to top + level window on Symbian + * [QTBUG-19880] Drawing a QPixmap to QImage causes a deep copy on + Symbian + * [QTBUG-19864] Predicted word is duplicated when doing an orientation + switch + * [QTBUG-19856] Doing an orientation change while in splitview mode + and closing VKB causes QGraphicsView to be incorrectly resized + * [QTBUG-19782] UI of the QWidget based applications those uses + QGroupBoxs are mess up in latest Symbian RND release + * [QTBUG-19734] KERN-EXEC 3 panic in + QCoeFepInputContext::translateInputWidget() method + * [QTBUG-19689] Textinput: last word inputted was duplicated after + press "Password" button + * [QTBUG-19578] Fix BCM2727 detection function on Symbian + * [QTBUG-19528] Opening symbol menu while typing with prediction on + causes issues + * [QTBUG-19471] Using QFileDialog crashes in Symbian + * [QTBUG-19104] while setting a softkey action in a qt application + on symbian, the icon specified only is shown partially + * [QTBUG-19043] Fullscreen main window with softkeys initially layouts + using full screen dimensions instead of client area dimensions + * [QTBUG-18863] QS60Style: compiling simulated style crashes due to + missing placeHolderTexture implementation + * [QTBUG-18493] Qt reserves graphics resources when launching application + directly to background + * [QTBUG-18486] Control pane (RSK Cancel) of the test note is covered by + "Options, Exit" when re-launching the application from Open applications + list + * [QTBUG-18409] If fullscreen application without softkeys opens a + fullscreen child dialog with softkeys, once the child dialog closes, + softkeys remain visible on applicaiton main screen. + * [QTBUG-17874] autotest failure between Qt 4.6.3 and Qt 4.7.2 in + QLinearGradient::setStops method on Symbian^3 platform + * [QTBUG-17844] Different point size for the font created using QFont + class and returned by QFontDialog + * [QTBUG-16857] Black corners around popup menu in Symbian^3 + * [QTBUG-16785] QML app: After layout switch the focused text input field + is not visible on Split view + * [QTBUG-15031] Predictive text is not committed when writing in a QLineEdit + * [QTBUG-14058] Wrong availableGeometry detected in Symbian + * [QTBUG-17576] GraphicsViews: Focused widget is not visible after + orientation change + * [QTBUG-17930] Regression: Theme background in style is incorrect + * [QTBUG-18024] Don't use EGL surfaces for translucency with 32MB GPU chip + * [QTBUG-17984] QML application: focused text input field is not visible + when split view is opened + - declarative + * [QTBUG-20218] Symbian 5.3: QML text edit components are sending + software input panel requests + * [QTBUG-19821] Flickr: There is gridding on picture + * [QTBUG-19669] All events that QDeclarativeDebugTrace shows on + Symbian are of duration '0' + * [QTBUG-18869] Compilation breakage for Symbian (qmltooling) + * [QTBUG-18549] Animation timer seems to take too long time to expire + during scrolling a qml list in Symbian device. + * [QTBUG-17592] qml.pri causes havoc on Symbian 3.2 and 5.0 + - network + * [QTBUG-18795] QNetworkConfigurationManager::allConfigurations + (QNetworkConfiguration::Active) not returning any active configuration + when instantiated and called from Secondary thread + * [QTBUG-18722] QDesktopServices::openUrl() doesn't handle URL encodings + correctly + * [QTBUG-18572] Crash with KERN-EXEC 0 when + QNetworkConfigurationManagerPrivate fails to connect + - corelib + * [QTBUG-17776] Qmlviewer: qmlviewer will crash after closing the + application "flickr demo" + **************************************************************************** * Tools * **************************************************************************** + - [QTBUG-18595] Enable remote debugging for qmlviewer + - [QTBUG-18063] qdoc3 depends on private header files from QML + - [QTBUG-16462] qdoc3 segfaults due to a uninitialized member variable + when using the WebXML output. -- cgit v0.12 From aaf94776ce1034ec2b2402b9ca0e5cf7c7848b12 Mon Sep 17 00:00:00 2001 From: Andy Shaw <andy.shaw@digia.com> Date: Fri, 19 Aug 2011 13:46:51 +0200 Subject: Fix QPixmap::grabWindow() on Mac OS X Lion The old approach was not the recommended one and although it worked on Mac OS X 10.6 it did not work on 10.7. The new approach works correctly on 10.6 and 10.7, so the fix is applied for both versions. Task-number: QTBUG-19824 Merge-request: 1332 Reviewed-by: sroedal --- src/gui/image/qpixmap_mac.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/gui/image/qpixmap_mac.cpp b/src/gui/image/qpixmap_mac.cpp index 6872cfa..45f00a0 100644 --- a/src/gui/image/qpixmap_mac.cpp +++ b/src/gui/image/qpixmap_mac.cpp @@ -841,6 +841,31 @@ static void qt_mac_grabDisplayRect(CGDirectDisplayID display, const QRect &displ } // Returns a pixmap containing the screen contents at rect. +static QPixmap qt_mac_grabScreenRect_10_6(const QRect &rect) +{ + const int maxDisplays = 128; // 128 displays should be enough for everyone. + CGDirectDisplayID displays[maxDisplays]; + CGDisplayCount displayCount; + const CGRect cgRect = CGRectMake(rect.x(), rect.y(), rect.width(), rect.height()); + const CGDisplayErr err = CGGetDisplaysWithRect(cgRect, maxDisplays, displays, &displayCount); + + if (err && displayCount == 0) + return QPixmap(); + QPixmap windowPixmap(rect.size()); + for (uint i = 0; i < displayCount; ++i) { + const CGRect bounds = CGDisplayBounds(displays[i]); + // Translate to display-local coordinates + QRect displayRect = rect.translated(qRound(-bounds.origin.x), qRound(-bounds.origin.y)); + // Adjust for inverted y axis. + displayRect.moveTop(qRound(bounds.size.height) - displayRect.y() - rect.height()); + QCFType<CGImageRef> image = CGDisplayCreateImageForRect(displays[i], bounds); + QPixmap pix = QPixmap::fromMacCGImageRef(image); + QPainter painter(&windowPixmap); + painter.drawPixmap(-bounds.origin.x, -bounds.origin.y, pix); + } + return windowPixmap; +} + static QPixmap qt_mac_grabScreenRect(const QRect &rect) { if (!resolveOpenGLSymbols()) @@ -916,7 +941,8 @@ QPixmap QPixmap::grabWindow(WId window, int x, int y, int w, int h) QRect rect(globalCoord.x() + x, globalCoord.y() + y, w, h); #ifdef QT_MAC_USE_COCOA - return qt_mac_grabScreenRect(rect); + return (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_6) ? + qt_mac_grabScreenRect_10_6(rect) : qt_mac_grabScreenRect(rect); #else #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4) if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_4) { -- cgit v0.12 From b186288cbf796be662f86ae4d5c70e39ba6afb67 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Fri, 19 Aug 2011 14:49:27 +0300 Subject: Exact word bubble doesn't disappear when screen is tapped (fix part 2) Prevent syncing with native side, if input capability changes are pending. Native side seems to be rather touchy about extra events, and might crash if syncing is requested while handling a capability change is on-going. Additionally, only cancel the transaction once. Otherwise cancellation might lead into loop (since we sync the state with native side) that eventually causes the application to crash. Task-number: QTBUG-20919 Reviewed-by: Miikka Heikkinen --- src/gui/inputmethod/qcoefepinputcontext_p.h | 1 + src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 14 ++++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_p.h b/src/gui/inputmethod/qcoefepinputcontext_p.h index 9857015..8c30838 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_p.h +++ b/src/gui/inputmethod/qcoefepinputcontext_p.h @@ -154,6 +154,7 @@ private: TUint m_textCapabilities; bool m_inDestruction; bool m_pendingInputCapabilitiesChanged; + bool m_pendingTransactionCancel; int m_cursorVisibility; int m_inlinePosition; MFepInlineTextFormatRetriever *m_formatRetriever; diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 8bdaa22..9cf4212 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -109,6 +109,7 @@ QCoeFepInputContext::QCoeFepInputContext(QObject *parent) m_textCapabilities(TCoeInputCapabilities::EAllText), m_inDestruction(false), m_pendingInputCapabilitiesChanged(false), + m_pendingTransactionCancel(false), m_cursorVisibility(1), m_inlinePosition(0), m_formatRetriever(0), @@ -1074,12 +1075,10 @@ void QCoeFepInputContext::CancelFepInlineEdit() // We are not supposed to ever have a tempPreeditString and a real preedit string // from S60 at the same time, so it should be safe to rely on this test to determine // whether we should honor S60's request to clear the text or not. - if (m_hasTempPreeditString) + if (m_hasTempPreeditString || m_pendingTransactionCancel) return; - // Sync with native side editor state. Native side can then do various operations - // based on editor state, such as removing 'exact word bubble'. - ReportAknEdStateEvent(MAknEdStateObserver::EAknSyncEdwinState); + m_pendingTransactionCancel = true; QList<QInputMethodEvent::Attribute> attributes; QInputMethodEvent event(QLatin1String(""), attributes); @@ -1087,6 +1086,13 @@ void QCoeFepInputContext::CancelFepInlineEdit() m_preeditString.clear(); m_inlinePosition = 0; sendEvent(event); + + // Sync with native side editor state. Native side can then do various operations + // based on editor state, such as removing 'exact word bubble'. + if (!m_pendingInputCapabilitiesChanged) + ReportAknEdStateEvent(MAknEdStateObserver::EAknSyncEdwinState); + + m_pendingTransactionCancel = false; } TInt QCoeFepInputContext::DocumentLengthForFep() const -- cgit v0.12 From ccf3b9e48b2d773999a9a88e249f79380618cde6 Mon Sep 17 00:00:00 2001 From: David Faure <faure@kde.org> Date: Fri, 19 Aug 2011 15:52:10 +0200 Subject: Make the DBus timeout configurable in QDBusAbstractInterface. Merge-request: 1253 Reviewed-by: thiago --- src/dbus/qdbusabstractinterface.cpp | 31 +++++++- src/dbus/qdbusabstractinterface.h | 3 + src/dbus/qdbusabstractinterface_p.h | 1 + .../com.trolltech.QtDBus.Pinger.xml | 4 + tests/auto/qdbusabstractinterface/interface.cpp | 14 ++++ tests/auto/qdbusabstractinterface/interface.h | 1 + tests/auto/qdbusabstractinterface/pinger.h | 7 ++ .../tst_qdbusabstractinterface.cpp | 92 ++++++++++++++++++++++ 8 files changed, 149 insertions(+), 4 deletions(-) diff --git a/src/dbus/qdbusabstractinterface.cpp b/src/dbus/qdbusabstractinterface.cpp index 187ad67..9f68313 100644 --- a/src/dbus/qdbusabstractinterface.cpp +++ b/src/dbus/qdbusabstractinterface.cpp @@ -88,6 +88,7 @@ QDBusAbstractInterfacePrivate::QDBusAbstractInterfacePrivate(const QString &serv : connection(con), service(serv), path(p), interface(iface), lastError(checkIfValid(serv, p, iface, isDynamic, (connectionPrivate() && connectionPrivate()->mode == QDBusConnectionPrivate::PeerMode))), + timeout(-1), isValid(!lastError.isValid()) { if (!isValid) @@ -144,7 +145,7 @@ void QDBusAbstractInterfacePrivate::property(const QMetaProperty &mp, QVariant & QLatin1String("Get")); QDBusMessagePrivate::setParametersValidated(msg, true); msg << interface << QString::fromUtf8(mp.name()); - QDBusMessage reply = connection.call(msg, QDBus::Block); + QDBusMessage reply = connection.call(msg, QDBus::Block, timeout); if (reply.type() != QDBusMessage::ReplyMessage) { lastError = reply; @@ -210,7 +211,7 @@ bool QDBusAbstractInterfacePrivate::setProperty(const QMetaProperty &mp, const Q QLatin1String("Set")); QDBusMessagePrivate::setParametersValidated(msg, true); msg << interface << QString::fromUtf8(mp.name()) << QVariant::fromValue(QDBusVariant(value)); - QDBusMessage reply = connection.call(msg, QDBus::Block); + QDBusMessage reply = connection.call(msg, QDBus::Block, timeout); if (reply.type() != QDBusMessage::ReplyMessage) { lastError = reply; @@ -384,6 +385,28 @@ QDBusError QDBusAbstractInterface::lastError() const } /*! + Sets the timeout in seconds for all future DBus calls to \a timeout. + -1 means the default DBus timeout (usually 25 seconds). + + \since 4.8 +*/ +void QDBusAbstractInterface::setTimeout(int timeout) +{ + d_func()->timeout = timeout; +} + +/*! + Returns the current value of the timeout in seconds. + -1 means the default DBus timeout (usually 25 seconds). + + \since 4.8 +*/ +int QDBusAbstractInterface::timeout() const +{ + return d_func()->timeout; +} + +/*! Places a call to the remote method specified by \a method on this interface, using \a args as arguments. This function returns the message that was received as a reply, which can be a normal QDBusMessage::ReplyMessage (indicating success) or QDBusMessage::ErrorMessage (if the call @@ -442,7 +465,7 @@ QDBusMessage QDBusAbstractInterface::callWithArgumentList(QDBus::CallMode mode, QDBusMessagePrivate::setParametersValidated(msg, true); msg.setArguments(args); - QDBusMessage reply = d->connection.call(msg, mode); + QDBusMessage reply = d->connection.call(msg, mode, d->timeout); if (thread() == QThread::currentThread()) d->lastError = reply; // will clear if reply isn't an error @@ -475,7 +498,7 @@ QDBusPendingCall QDBusAbstractInterface::asyncCallWithArgumentList(const QString QDBusMessage msg = QDBusMessage::createMethodCall(service(), path(), interface(), method); QDBusMessagePrivate::setParametersValidated(msg, true); msg.setArguments(args); - return d->connection.asyncCall(msg); + return d->connection.asyncCall(msg, d->timeout); } /*! diff --git a/src/dbus/qdbusabstractinterface.h b/src/dbus/qdbusabstractinterface.h index 72b922e..34ff410 100644 --- a/src/dbus/qdbusabstractinterface.h +++ b/src/dbus/qdbusabstractinterface.h @@ -95,6 +95,9 @@ public: QDBusError lastError() const; + void setTimeout(int timeout); + int timeout() const; + QDBusMessage call(const QString &method, const QVariant &arg1 = QVariant(), const QVariant &arg2 = QVariant(), diff --git a/src/dbus/qdbusabstractinterface_p.h b/src/dbus/qdbusabstractinterface_p.h index a000daf..4f96165 100644 --- a/src/dbus/qdbusabstractinterface_p.h +++ b/src/dbus/qdbusabstractinterface_p.h @@ -77,6 +77,7 @@ public: QString path; QString interface; mutable QDBusError lastError; + int timeout; // this is set during creation and never changed // it can't be const because QDBusInterfacePrivate has one more check diff --git a/tests/auto/qdbusabstractinterface/com.trolltech.QtDBus.Pinger.xml b/tests/auto/qdbusabstractinterface/com.trolltech.QtDBus.Pinger.xml index 1667591..d945ec9 100644 --- a/tests/auto/qdbusabstractinterface/com.trolltech.QtDBus.Pinger.xml +++ b/tests/auto/qdbusabstractinterface/com.trolltech.QtDBus.Pinger.xml @@ -15,6 +15,10 @@ <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="RegisteredType"/> </signal> <method name="voidMethod" /> + <method name="sleepMethod"> + <arg type="i" /> + <arg type="i" direction="out"/> + </method> <method name="stringMethod"> <arg type="s" direction="out"/> </method> diff --git a/tests/auto/qdbusabstractinterface/interface.cpp b/tests/auto/qdbusabstractinterface/interface.cpp index 0326177..849db93 100644 --- a/tests/auto/qdbusabstractinterface/interface.cpp +++ b/tests/auto/qdbusabstractinterface/interface.cpp @@ -40,9 +40,23 @@ ****************************************************************************/ #include "interface.h" +#include <QThread> Interface::Interface() { } +// Export the sleep function +// TODO QT5: remove this class, QThread::msleep is now public +class FriendlySleepyThread : public QThread { +public: + using QThread::msleep; +}; + +int Interface::sleepMethod(int msec) +{ + FriendlySleepyThread::msleep(msec); + return 42; +} + #include "moc_interface.cpp" diff --git a/tests/auto/qdbusabstractinterface/interface.h b/tests/auto/qdbusabstractinterface/interface.h index b840a38..0fb15fe 100644 --- a/tests/auto/qdbusabstractinterface/interface.h +++ b/tests/auto/qdbusabstractinterface/interface.h @@ -101,6 +101,7 @@ public: public slots: Q_SCRIPTABLE void voidMethod() {} + Q_SCRIPTABLE int sleepMethod(int); Q_SCRIPTABLE QString stringMethod() { return "Hello, world"; } Q_SCRIPTABLE RegisteredType complexMethod() { return RegisteredType("Hello, world"); } Q_SCRIPTABLE QString multiOutMethod(int &value) { value = 42; return "Hello, world"; } diff --git a/tests/auto/qdbusabstractinterface/pinger.h b/tests/auto/qdbusabstractinterface/pinger.h index 6245a5a..739a142 100644 --- a/tests/auto/qdbusabstractinterface/pinger.h +++ b/tests/auto/qdbusabstractinterface/pinger.h @@ -117,6 +117,13 @@ public Q_SLOTS: // METHODS return reply; } + inline QDBusPendingReply<int> sleepMethod(int in0) + { + QList<QVariant> argumentList; + argumentList << qVariantFromValue(in0); + return asyncCallWithArgumentList(QLatin1String("sleepMethod"), argumentList); + } + inline QDBusPendingReply<QString> stringMethod() { QList<QVariant> argumentList; diff --git a/tests/auto/qdbusabstractinterface/tst_qdbusabstractinterface.cpp b/tests/auto/qdbusabstractinterface/tst_qdbusabstractinterface.cpp index 00e3a76..994df05 100644 --- a/tests/auto/qdbusabstractinterface/tst_qdbusabstractinterface.cpp +++ b/tests/auto/qdbusabstractinterface/tst_qdbusabstractinterface.cpp @@ -111,6 +111,8 @@ private slots: void makeAsyncComplexCallPeer(); void makeAsyncMultiOutCallPeer(); + void callWithTimeout(); + void stringPropRead(); void stringPropWrite(); void variantPropRead(); @@ -458,6 +460,96 @@ void tst_QDBusAbstractInterface::makeAsyncMultiOutCallPeer() QCoreApplication::instance()->processEvents(); } +static const char server_serviceName[] = "com.trolltech.autotests.dbusserver"; +static const char server_objectPath[] = "/com/trolltech/server"; +static const char server_interfaceName[] = "com.trolltech.QtDBus.Pinger"; + +class DBusServerThread : public QThread +{ +public: + DBusServerThread() { + start(); + m_ready.acquire(); + } + ~DBusServerThread() { + quit(); + wait(); + } + + void run() + { + QDBusConnection con = QDBusConnection::connectToBus(QDBusConnection::SessionBus, "ThreadConnection"); + if (!con.isConnected()) + qWarning("Error registering to DBus"); + if (!con.registerService(server_serviceName)) + qWarning("Error registering service name"); + Interface targetObj; + con.registerObject(server_objectPath, &targetObj, QDBusConnection::ExportScriptableContents); + m_ready.release(); + exec(); + + QDBusConnection::disconnectFromBus( con.name() ); + } +private: + QSemaphore m_ready; +}; + +void tst_QDBusAbstractInterface::callWithTimeout() +{ + QDBusConnection con = QDBusConnection::sessionBus(); + QVERIFY2(con.isConnected(), "Not connected to D-Bus"); + + DBusServerThread serverThread; + + QDBusMessage msg = QDBusMessage::createMethodCall(server_serviceName, + server_objectPath, server_interfaceName, "sleepMethod"); + msg << 100; + + { + // Call with no timeout -> works + QDBusMessage reply = con.call(msg); + QCOMPARE((int)reply.type(), (int)QDBusMessage::ReplyMessage); + QCOMPARE(reply.arguments().at(0).toInt(), 42); + } + + { + // Call with 1 sec timeout -> fails + QDBusMessage reply = con.call(msg, QDBus::Block, 1); + QCOMPARE(reply.type(), QDBusMessage::ErrorMessage); + } + + // Now using QDBusInterface + + QDBusInterface iface(server_serviceName, server_objectPath, server_interfaceName, con); + { + // Call with no timeout + QDBusMessage reply = iface.call("sleepMethod", 100); + QCOMPARE(reply.type(), QDBusMessage::ReplyMessage); + QCOMPARE(reply.arguments().at(0).toInt(), 42); + } + { + // Call with 1 sec timeout -> fails + iface.setTimeout(1); + QDBusMessage reply = iface.call("sleepMethod", 100); + QCOMPARE(reply.type(), QDBusMessage::ErrorMessage); + } + + // Now using generated code + com::trolltech::QtDBus::Pinger p(server_serviceName, server_objectPath, QDBusConnection::sessionBus()); + { + // Call with no timeout + QDBusReply<int> reply = p.sleepMethod(100); + QVERIFY(reply.isValid()); + QCOMPARE(int(reply), 42); + } + { + // Call with 1 sec timeout -> fails + p.setTimeout(1); + QDBusReply<int> reply = p.sleepMethod(100); + QVERIFY(!reply.isValid()); + } +} + void tst_QDBusAbstractInterface::stringPropRead() { Pinger p = getPinger(); -- cgit v0.12 From 090ff76845ca5b9c61319f359a94cc239b18846b Mon Sep 17 00:00:00 2001 From: Aleksandar Stojiljkovic <aleksandar.stojiljkovic@nokia.com> Date: Fri, 19 Aug 2011 17:16:35 +0300 Subject: Avoid calling QInputMethod update when adding or removing QGraphicsItems that don't have focus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removing item from QGraphicsScene takes longer if focus is in item (and that item is not being removed) with ItemAcceptsInputMethod. update() in QInputContext or in subclasses could be expensive - usually requires inputMethodFocus and a sequence of inputMethodQuery calls to get the state. In MeeGo, additionally, dbus IPC in MInputContext makes it order of magnitude slower. Minor indentation issue in QGraphicsViewPrivate::updateInputMethodSensitivity() Reviewed-by: Samuel Rødal --- src/gui/graphicsview/qgraphicsscene.cpp | 14 ++++++++++---- src/gui/graphicsview/qgraphicsview.cpp | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 27639f9..7925c69 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -2688,10 +2688,11 @@ void QGraphicsScene::addItem(QGraphicsItem *item) // Ensure that newly added items that have subfocus set, gain // focus automatically if there isn't a focus item already. - if (!d->focusItem && item != d->lastFocusItem && item->focusItem() == item) + if (!d->focusItem && item != d->lastFocusItem && item->focusItem() == item) { item->focusItem()->setFocus(); - - d->updateInputMethodSensitivityInViews(); + // Update input method only if added item got focus + d->updateInputMethodSensitivityInViews(); + } } /*! @@ -2942,6 +2943,9 @@ void QGraphicsScene::removeItem(QGraphicsItem *item) { // ### Refactoring: This function shares much functionality with _q_removeItemLater() Q_D(QGraphicsScene); + + bool wasFocused(item == focusItem()); + if (!item) { qWarning("QGraphicsScene::removeItem: cannot remove 0-item"); return; @@ -2968,7 +2972,9 @@ void QGraphicsScene::removeItem(QGraphicsItem *item) // Deliver post-change notification item->itemChange(QGraphicsItem::ItemSceneHasChanged, newSceneVariant); - d->updateInputMethodSensitivityInViews(); + // Avoid calling input method update if removed item wasn't focused + if (wasFocused) + d->updateInputMethodSensitivityInViews(); } /*! diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index 41b07c4..4bfcbb2 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -1101,8 +1101,8 @@ void QGraphicsViewPrivate::updateInputMethodSensitivity() if (!proxy) { q->setInputMethodHints(focusItem->inputMethodHints()); } else if (QWidget *widget = proxy->widget()) { - if (QWidget *fw = widget->focusWidget()) - widget = fw; + if (QWidget *fw = widget->focusWidget()) + widget = fw; q->setInputMethodHints(widget->inputMethodHints()); } else { q->setInputMethodHints(0); -- cgit v0.12 From a3f2ac29714744fb7a34aa7789ce89cb58c09de7 Mon Sep 17 00:00:00 2001 From: Andy Shaw <andy.shaw@digia.com> Date: Fri, 19 Aug 2011 16:15:57 +0200 Subject: Fix compile issue with Mac OS X 10.5 Reviewed-by: ossi --- src/gui/image/qpixmap_mac.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gui/image/qpixmap_mac.cpp b/src/gui/image/qpixmap_mac.cpp index 45f00a0..8d72a59 100644 --- a/src/gui/image/qpixmap_mac.cpp +++ b/src/gui/image/qpixmap_mac.cpp @@ -840,6 +840,7 @@ static void qt_mac_grabDisplayRect(CGDirectDisplayID display, const QRect &displ ptrCGLDestroyContext(glContextObj); // and destroy the context } +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) // Returns a pixmap containing the screen contents at rect. static QPixmap qt_mac_grabScreenRect_10_6(const QRect &rect) { @@ -865,6 +866,7 @@ static QPixmap qt_mac_grabScreenRect_10_6(const QRect &rect) } return windowPixmap; } +#endif static QPixmap qt_mac_grabScreenRect(const QRect &rect) { @@ -941,8 +943,12 @@ QPixmap QPixmap::grabWindow(WId window, int x, int y, int w, int h) QRect rect(globalCoord.x() + x, globalCoord.y() + y, w, h); #ifdef QT_MAC_USE_COCOA - return (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_6) ? - qt_mac_grabScreenRect_10_6(rect) : qt_mac_grabScreenRect(rect); +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) + if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_6) + return qt_mac_grabScreenRect_10_6(rect); + else +#endif + return qt_mac_grabScreenRect(rect); #else #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4) if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_4) { -- cgit v0.12 From 9496a87a8ad6c78952750c1529da637fc622a23c Mon Sep 17 00:00:00 2001 From: Andrew den Exter <andrew.den-exter@nokia.com> Date: Mon, 22 Aug 2011 12:00:06 +1000 Subject: Correct documentation of TextInput.PasswordEchoOnEdit. The documentation incorrectly stated only the last character was unmasked. Use the same wording from the QLineEdit documentation instead. Task-number: QTBUG-20003 --- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 5245236..9bc7fb9 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -874,7 +874,8 @@ void QDeclarativeTextInputPrivate::updateInputMethodHints() \o TextInput.Normal - Displays the text as it is. (Default) \o TextInput.Password - Displays asterixes instead of characters. \o TextInput.NoEcho - Displays nothing. - \o TextInput.PasswordEchoOnEdit - Displays all but the current character as asterixes. + \o TextInput.PasswordEchoOnEdit - Displays characters as they are entered + while editing, otherwise displays asterisks. \endlist */ QDeclarativeTextInput::EchoMode QDeclarativeTextInput::echoMode() const -- cgit v0.12 From 7b693627ee2a17718cb6d8bee5e3deb5a97b307f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Mon, 22 Aug 2011 11:30:26 +0200 Subject: Off-by-one error in assert condition... While this was safe, it was also over-zealous, disallowing the path from ending with the placeholder... Incidentally, the default. Laughed-at-by: w00t_ --- src/corelib/io/qtemporaryfile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index ea5f8a5..e80a8b6 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -135,7 +135,7 @@ static bool createFileFromTemplate(NativeFileHandle &file, { Q_ASSERT(length != 0); Q_ASSERT(pos < size_t(path.length())); - Q_ASSERT(length < size_t(path.length()) - pos); + Q_ASSERT(length <= size_t(path.length()) - pos); Char *const placeholderStart = (Char *)path.data() + pos; Char *const placeholderEnd = placeholderStart + length; -- cgit v0.12 From e828368117ea34bbeac60e910dea170e868a82c3 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt <ritt.ks@gmail.com> Date: Sun, 21 Aug 2011 01:59:35 +0400 Subject: don't crash when destroying children this was uncovered by my don't-detach patch. Reviewed-by: ossi --- tools/qdoc3/node.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp index 683c210..56d76d3 100644 --- a/tools/qdoc3/node.cpp +++ b/tools/qdoc3/node.cpp @@ -545,7 +545,8 @@ void InnerNode::removeFromRelated() */ void InnerNode::deleteChildren() { - qDeleteAll(children); + NodeList childrenCopy = children; // `children` will be changed in ~Node() + qDeleteAll(childrenCopy); } /*! -- cgit v0.12 From 341c19c7e6f05c60ef98dc62fe61cfe657878d5e Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Mon, 22 Aug 2011 12:13:37 +0200 Subject: remove unused functions --- tools/qdoc3/cppcodemarker.cpp | 20 -------------------- tools/qdoc3/node.cpp | 31 ------------------------------- 2 files changed, 51 deletions(-) diff --git a/tools/qdoc3/cppcodemarker.cpp b/tools/qdoc3/cppcodemarker.cpp index 585d6ce..3617be6 100644 --- a/tools/qdoc3/cppcodemarker.cpp +++ b/tools/qdoc3/cppcodemarker.cpp @@ -878,26 +878,6 @@ static const char * const keywordTable[] = { "signals", "slots", "emit", 0 }; -static QString untabified(const QString &in) -{ - QString res; - int col = 0; - int i = 0; - - for (; i < (int) in.length(); i++) { - if (in[i] == QChar('\t')) { - res += QString(" " + (col & 0x7)); - col = (col + 8) & ~0x7; - } else { - res += in[i]; - if (in[i] == QChar('\n')) - col = 0; - } - } - - return res; -} - /* @char @class diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp index 87bbd93..ae823ac 100644 --- a/tools/qdoc3/node.cpp +++ b/tools/qdoc3/node.cpp @@ -1693,37 +1693,6 @@ bool QmlPropertyNode::fromTrool(Trool troolean, bool defaultValue) } } -static QString valueType(const QString &n) -{ - if (n == "QPoint") - return "QDeclarativePointValueType"; - if (n == "QPointF") - return "QDeclarativePointFValueType"; - if (n == "QSize") - return "QDeclarativeSizeValueType"; - if (n == "QSizeF") - return "QDeclarativeSizeFValueType"; - if (n == "QRect") - return "QDeclarativeRectValueType"; - if (n == "QRectF") - return "QDeclarativeRectFValueType"; - if (n == "QVector2D") - return "QDeclarativeVector2DValueType"; - if (n == "QVector3D") - return "QDeclarativeVector3DValueType"; - if (n == "QVector4D") - return "QDeclarativeVector4DValueType"; - if (n == "QQuaternion") - return "QDeclarativeQuaternionValueType"; - if (n == "QMatrix4x4") - return "QDeclarativeMatrix4x4ValueType"; - if (n == "QEasingCurve") - return "QDeclarativeEasingValueType"; - if (n == "QFont") - return "QDeclarativeFontValueType"; - return QString(); -} - /*! Returns true if a QML property or attached property is read-only. The algorithm for figuring this out is long -- cgit v0.12 From db86c9f57bb6b26d92b0281ac3ca39e1fcbea715 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt <ritt.ks@gmail.com> Date: Sun, 21 Aug 2011 02:00:11 +0400 Subject: fix warning --- tools/qdoc3/cppcodemarker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/qdoc3/cppcodemarker.cpp b/tools/qdoc3/cppcodemarker.cpp index 3617be6..17a05a5 100644 --- a/tools/qdoc3/cppcodemarker.cpp +++ b/tools/qdoc3/cppcodemarker.cpp @@ -935,7 +935,7 @@ QString CppCodeMarker::addMarkUp(const QString &in, ident += ch; finish = i; readChar(); - } while (ch >= 0 && isalnum(ch) || ch == '_'); + } while (ch >= 0 && (isalnum(ch) || ch == '_')); if (classRegExp.exactMatch(ident)) { tag = QLatin1String("type"); -- cgit v0.12 From d62bb74d329b6ee5f6c52ac26e11bfe9a27f56a0 Mon Sep 17 00:00:00 2001 From: David Boddie <david.boddie@nokia.com> Date: Wed, 1 Jun 2011 14:11:09 +0200 Subject: Added an additional check to workaround an issue on Windows. Reviewed-by: David Boddie Original-patch-by: Friedemann Kleint (cherry picked from commit 8b1654ec6a892e84c1654c9196e80461ee6e92fa) --- tools/qdoc3/cppcodemarker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/qdoc3/cppcodemarker.cpp b/tools/qdoc3/cppcodemarker.cpp index 9591801..2067716 100644 --- a/tools/qdoc3/cppcodemarker.cpp +++ b/tools/qdoc3/cppcodemarker.cpp @@ -953,7 +953,7 @@ QString CppCodeMarker::addMarkUp(const QString &in, ident += ch; finish = i; readChar(); - } while (isalnum(ch) || ch == '_'); + } while (ch >= 0 && isalnum(ch) || ch == '_'); if (classRegExp.exactMatch(ident)) { tag = QLatin1String("type"); -- cgit v0.12 From c5f46907fbc0354aacc4bc4a6f5ab97c8b656d1a Mon Sep 17 00:00:00 2001 From: Andy Shaw <andy.shaw@digia.com> Date: Mon, 22 Aug 2011 15:16:34 +0200 Subject: Fix problem with grabWindow on Mac OS X 10.6 with Cocoa For some reason the test did not fail locally but fails in the CI system. A manual check of the images from the test shows it should have failed. Reason for this will be investigated separately Reviewed-by: Sergio Ahumada --- src/gui/image/qpixmap_mac.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/gui/image/qpixmap_mac.cpp b/src/gui/image/qpixmap_mac.cpp index 8d72a59..3afc724 100644 --- a/src/gui/image/qpixmap_mac.cpp +++ b/src/gui/image/qpixmap_mac.cpp @@ -857,9 +857,8 @@ static QPixmap qt_mac_grabScreenRect_10_6(const QRect &rect) const CGRect bounds = CGDisplayBounds(displays[i]); // Translate to display-local coordinates QRect displayRect = rect.translated(qRound(-bounds.origin.x), qRound(-bounds.origin.y)); - // Adjust for inverted y axis. - displayRect.moveTop(qRound(bounds.size.height) - displayRect.y() - rect.height()); - QCFType<CGImageRef> image = CGDisplayCreateImageForRect(displays[i], bounds); + QCFType<CGImageRef> image = CGDisplayCreateImageForRect(displays[i], + CGRectMake(displayRect.x(), displayRect.y(), displayRect.width(), displayRect.height())); QPixmap pix = QPixmap::fromMacCGImageRef(image); QPainter painter(&windowPixmap); painter.drawPixmap(-bounds.origin.x, -bounds.origin.y, pix); -- cgit v0.12 From 076ac0ee55b54ae3759af76cf5790e31fbd0f7e5 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Mon, 22 Aug 2011 17:09:01 +0300 Subject: Symbian: Not possible to catch RequestSoftwareInputPanel in eventFilter Do not consume QEvent::RequestSoftwareInputPanel in QCoeFepInputContext. Task-number: QTBUG-20155 Reviewed-by: Miikka Heikkinen --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 9cf4212..bc27c1e 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -360,10 +360,6 @@ bool QCoeFepInputContext::filterEvent(const QEvent *event) if (sControl) { sControl->setIgnoreFocusChanged(false); } - //If m_pointerHandler has already been set, it means that fep inline editing is in progress. - //When this is happening, do not filter out pointer events. - if (!m_pointerHandler) - return true; } } -- cgit v0.12 From 0c70be512bfc40e8a2a09f60a66b7ecb114e748e Mon Sep 17 00:00:00 2001 From: Ray Donnelly <mingw.android@laptop.com> Date: Mon, 22 Aug 2011 18:21:36 +0200 Subject: Disable activeqt on win32-g++ (it doesn't build). Merge-request: 1336 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> --- configure | 4 ++++ src/src.pro | 2 +- tools/designer/src/plugins/plugins.pro | 2 +- tools/tools.pro | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/configure b/configure index ec04414..76e32cb 100755 --- a/configure +++ b/configure @@ -9013,6 +9013,10 @@ for file in .projects .projects.3; do if [ "$CFG_NOPROCESS" = "yes" ] || [ "$XPLATFORM_SYMBIAN" != "yes" ]; then continue fi;; + *activeqt/*) + if [ "$PLATFORM" = "win32-g++" ] || [ "$XPLATFORM" = "win32-g++" ]; then + continue + fi;; *examples/activeqt/*) continue ;; */qmake/qmake.pro) continue ;; *tools/bootstrap*|*tools/moc*|*tools/rcc*|*tools/uic*|*linguist/lrelease*) SPEC=$QMAKESPEC ;; diff --git a/src/src.pro b/src/src.pro index 9e29b89..9314fbd 100644 --- a/src/src.pro +++ b/src/src.pro @@ -11,7 +11,7 @@ nacl: SRC_SUBDIRS -= src_network src_testlib !wince*:!symbian:!vxworks:contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support !wince*:!symbian-abld:!symbian-sbsv2:include(tools/tools.pro) -win32:SRC_SUBDIRS += src_activeqt +win32:!win32-g++*:SRC_SUBDIRS += src_activeqt contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2): SRC_SUBDIRS += src_opengl contains(QT_CONFIG, openvg): SRC_SUBDIRS += src_openvg diff --git a/tools/designer/src/plugins/plugins.pro b/tools/designer/src/plugins/plugins.pro index bcebb82..64763a9 100644 --- a/tools/designer/src/plugins/plugins.pro +++ b/tools/designer/src/plugins/plugins.pro @@ -3,7 +3,7 @@ CONFIG += ordered REQUIRES = !CONFIG(static,shared|static) contains(QT_CONFIG, qt3support): SUBDIRS += widgets -win32: SUBDIRS += activeqt +win32:!win32-g++*: SUBDIRS += activeqt # contains(QT_CONFIG, opengl): SUBDIRS += tools/view3d contains(QT_CONFIG, webkit): SUBDIRS += qwebview contains(QT_CONFIG, phonon): SUBDIRS += phononwidgets diff --git a/tools/tools.pro b/tools/tools.pro index 7eecebd..b23df4b 100644 --- a/tools/tools.pro +++ b/tools/tools.pro @@ -21,7 +21,7 @@ TEMPLATE = subdirs } } unix:!symbian:!mac:!embedded:!qpa:SUBDIRS += qtconfig - win32:!wince*:SUBDIRS += activeqt + win32:!wince*:!win32-g++*:SUBDIRS += activeqt } contains(QT_CONFIG, declarative) { SUBDIRS += qml -- cgit v0.12 From 2c198b3ace2fb09ed0eaa45aec6ce2c96a45aafb Mon Sep 17 00:00:00 2001 From: Andrew den Exter <andrew.den-exter@nokia.com> Date: Mon, 22 Aug 2011 11:31:22 +1000 Subject: Fix left alignment of native RTL pre-edit text. If there is no committed text in a TextInput or TextEdit determine if the pre-edit text is right to left before falling back to the global keyboard settings. Change-Id: I7e5568e936341602b8faf7be120f9a770c115f48 Task-number: QMLNG-72 Reviewed-by: Michael Brasser --- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 11 ++++++++++- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 7 ++++++- .../data/horizontalAlignment_RightToLeft.qml | 1 + .../qdeclarativetextedit/tst_qdeclarativetextedit.cpp | 12 ++++++++++++ .../data/horizontalAlignment_RightToLeft.qml | 1 + .../qdeclarativetextinput/tst_qdeclarativetextinput.cpp | 13 +++++++++++++ 6 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 42c520c..cc5279a 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -547,7 +547,15 @@ bool QDeclarativeTextEditPrivate::determineHorizontalAlignment() { Q_Q(QDeclarativeTextEdit); if (hAlignImplicit && q->isComponentComplete()) { - bool alignToRight = text.isEmpty() ? QApplication::keyboardInputDirection() == Qt::RightToLeft : rightToLeftText; + bool alignToRight; + if (text.isEmpty()) { + const QString preeditText = control->textCursor().block().layout()->preeditAreaText(); + alignToRight = preeditText.isEmpty() + ? QApplication::keyboardInputDirection() == Qt::RightToLeft + : preeditText.isRightToLeft(); + } else { + alignToRight = rightToLeftText; + } return setHAlign(alignToRight ? QDeclarativeTextEdit::AlignRight : QDeclarativeTextEdit::AlignLeft); } return false; @@ -1582,6 +1590,7 @@ void QDeclarativeTextEdit::q_textChanged() void QDeclarativeTextEdit::moveCursorDelegate() { Q_D(QDeclarativeTextEdit); + d->determineHorizontalAlignment(); updateMicroFocus(); emit cursorRectangleChanged(); if(!d->cursor) diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index f68f1c6..c5c9f5e 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -407,7 +407,11 @@ bool QDeclarativeTextInputPrivate::determineHorizontalAlignment() if (hAlignImplicit) { // if no explicit alignment has been set, follow the natural layout direction of the text QString text = control->text(); - bool isRightToLeft = text.isEmpty() ? QApplication::keyboardInputDirection() == Qt::RightToLeft : text.isRightToLeft(); + if (text.isEmpty()) + text = control->preeditAreaText(); + bool isRightToLeft = text.isEmpty() + ? QApplication::keyboardInputDirection() == Qt::RightToLeft + : text.isRightToLeft(); return setHAlign(isRightToLeft ? QDeclarativeTextInput::AlignRight : QDeclarativeTextInput::AlignLeft); } return false; @@ -1909,6 +1913,7 @@ void QDeclarativeTextInput::cursorPosChanged() void QDeclarativeTextInput::updateCursorRectangle() { Q_D(QDeclarativeTextInput); + d->determineHorizontalAlignment(); d->updateHorizontalScroll(); updateRect();//TODO: Only update rect between pos's updateMicroFocus(); diff --git a/tests/auto/declarative/qdeclarativetextedit/data/horizontalAlignment_RightToLeft.qml b/tests/auto/declarative/qdeclarativetextedit/data/horizontalAlignment_RightToLeft.qml index 43ea8d8..6e739bf 100644 --- a/tests/auto/declarative/qdeclarativetextedit/data/horizontalAlignment_RightToLeft.qml +++ b/tests/auto/declarative/qdeclarativetextedit/data/horizontalAlignment_RightToLeft.qml @@ -18,6 +18,7 @@ Rectangle { objectName: "text" anchors.fill: parent text: top.text + focus: true } } } diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 5d6f2a2..5c7f36f 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -454,6 +454,8 @@ void tst_qdeclarativetextedit::hAlign_RightToLeft() QVERIFY(textEdit != 0); canvas->show(); + const QString rtlText = textEdit->text(); + // implicit alignment should follow the reading direction of text QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); @@ -530,6 +532,16 @@ void tst_qdeclarativetextedit::hAlign_RightToLeft() QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignLeft); QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + QApplication::setActiveWindow(canvas); + QTest::qWaitForWindowShown(canvas); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas)); + + textEdit->setText(QString()); + { QInputMethodEvent ev(rtlText, QList<QInputMethodEvent::Attribute>()); QApplication::sendEvent(canvas, &ev); } + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); + { QInputMethodEvent ev("Hello world!", QList<QInputMethodEvent::Attribute>()); QApplication::sendEvent(canvas, &ev); } + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignLeft); + #ifndef Q_OS_MAC // QTBUG-18040 // empty text with implicit alignment follows the system locale-based // keyboard input direction from QApplication::keyboardInputDirection diff --git a/tests/auto/declarative/qdeclarativetextinput/data/horizontalAlignment_RightToLeft.qml b/tests/auto/declarative/qdeclarativetextinput/data/horizontalAlignment_RightToLeft.qml index b11535e..7f27bbe 100644 --- a/tests/auto/declarative/qdeclarativetextinput/data/horizontalAlignment_RightToLeft.qml +++ b/tests/auto/declarative/qdeclarativetextinput/data/horizontalAlignment_RightToLeft.qml @@ -18,6 +18,7 @@ Rectangle { objectName: "text" anchors.fill: parent text: top.text + focus: true } } } diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 280f952..7f3b8a2 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -1198,6 +1198,8 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() QVERIFY(textInput != 0); canvas->show(); + const QString rtlText = textInput->text(); + QDeclarativeTextInputPrivate *textInputPrivate = QDeclarativeTextInputPrivate::get(textInput); QVERIFY(textInputPrivate != 0); QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); @@ -1262,6 +1264,17 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignLeft); QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); + QApplication::setActiveWindow(canvas); + QTest::qWaitForWindowShown(canvas); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas)); + + // If there is no commited text, the preedit text should determine the alignment. + textInput->setText(QString()); + { QInputMethodEvent ev(rtlText, QList<QInputMethodEvent::Attribute>()); QApplication::sendEvent(canvas, &ev); } + QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); + { QInputMethodEvent ev("Hello world!", QList<QInputMethodEvent::Attribute>()); QApplication::sendEvent(canvas, &ev); } + QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignLeft); + #ifndef Q_OS_MAC // QTBUG-18040 // empty text with implicit alignment follows the system locale-based // keyboard input direction from QApplication::keyboardInputDirection -- cgit v0.12 From 4748be8f436e2bc13b5755f2ffe2428a338f7239 Mon Sep 17 00:00:00 2001 From: Aleksandar Stojiljkovic <aleksandar.stojiljkovic@nokia.com> Date: Tue, 23 Aug 2011 10:52:13 +0300 Subject: Revert "Avoid calling QInputMethod update when adding or removing QGraphicsItems that don't have focus" This reverts commit 090ff76845ca5b9c61319f359a94cc239b18846b ... due to failing unit tests. --- src/gui/graphicsview/qgraphicsscene.cpp | 14 ++++---------- src/gui/graphicsview/qgraphicsview.cpp | 4 ++-- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 7925c69..27639f9 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -2688,11 +2688,10 @@ void QGraphicsScene::addItem(QGraphicsItem *item) // Ensure that newly added items that have subfocus set, gain // focus automatically if there isn't a focus item already. - if (!d->focusItem && item != d->lastFocusItem && item->focusItem() == item) { + if (!d->focusItem && item != d->lastFocusItem && item->focusItem() == item) item->focusItem()->setFocus(); - // Update input method only if added item got focus - d->updateInputMethodSensitivityInViews(); - } + + d->updateInputMethodSensitivityInViews(); } /*! @@ -2943,9 +2942,6 @@ void QGraphicsScene::removeItem(QGraphicsItem *item) { // ### Refactoring: This function shares much functionality with _q_removeItemLater() Q_D(QGraphicsScene); - - bool wasFocused(item == focusItem()); - if (!item) { qWarning("QGraphicsScene::removeItem: cannot remove 0-item"); return; @@ -2972,9 +2968,7 @@ void QGraphicsScene::removeItem(QGraphicsItem *item) // Deliver post-change notification item->itemChange(QGraphicsItem::ItemSceneHasChanged, newSceneVariant); - // Avoid calling input method update if removed item wasn't focused - if (wasFocused) - d->updateInputMethodSensitivityInViews(); + d->updateInputMethodSensitivityInViews(); } /*! diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index 4bfcbb2..41b07c4 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -1101,8 +1101,8 @@ void QGraphicsViewPrivate::updateInputMethodSensitivity() if (!proxy) { q->setInputMethodHints(focusItem->inputMethodHints()); } else if (QWidget *widget = proxy->widget()) { - if (QWidget *fw = widget->focusWidget()) - widget = fw; + if (QWidget *fw = widget->focusWidget()) + widget = fw; q->setInputMethodHints(widget->inputMethodHints()); } else { q->setInputMethodHints(0); -- cgit v0.12 From 0b19ee5ecabfc516256f0a6db0f2e7bc37e703a0 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Tue, 23 Aug 2011 14:55:46 +0300 Subject: In landscape mode QComboboBox popup can not be showed completely ComboBox popups have regressed in 4.7.4 lately. Combobox popup is shown as smallish square rectangle in landscape orientation. As a fix, let the width of the popup match the height of the screen (native dialogs most of the time have width matching the height of the screen). Task-number: QTBUG-20932 Reviewed-by: Miikka Heikkinen --- src/gui/widgets/qcombobox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp index f4a627b..8a69bdf 100644 --- a/src/gui/widgets/qcombobox.cpp +++ b/src/gui/widgets/qcombobox.cpp @@ -2473,7 +2473,7 @@ void QComboBox::showPopup() } else { TRect staConTopRect = TRect(); AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStaconTop, staConTopRect); - listRect.setWidth(listRect.height()); + listRect.setWidth(screen.height()); //by default popup is centered on screen in landscape listRect.moveCenter(screen.center()); if (staConTopRect.IsEmpty()) { -- cgit v0.12 From 1ee6ff9fab218a8fa02a3cad1614730eb716bf45 Mon Sep 17 00:00:00 2001 From: Sergio Ahumada <sergio.ahumada@nokia.com> Date: Tue, 23 Aug 2011 20:13:43 +0200 Subject: Doc: Fixing typo --- .../declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 7f3b8a2..bb895bf 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -1268,7 +1268,7 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() QTest::qWaitForWindowShown(canvas); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas)); - // If there is no commited text, the preedit text should determine the alignment. + // If there is no committed text, the preedit text should determine the alignment. textInput->setText(QString()); { QInputMethodEvent ev(rtlText, QList<QInputMethodEvent::Attribute>()); QApplication::sendEvent(canvas, &ev); } QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); -- cgit v0.12 From 33eb83565466d3dc31ea90dcf18dc3c7b16fd5b6 Mon Sep 17 00:00:00 2001 From: Andrew den Exter <andrew.den-exter@nokia.com> Date: Wed, 24 Aug 2011 11:26:29 +1000 Subject: Make it easier to select words at the start of a line. QTextControl's word selection will only include a word if the cursor position is past the mid point of the word. This can make it difficult to select words near the edges of the screen on touch devices. For the TextEdit word selection mode select a word ignore the relative position within a word. Change-Id: I2bc61376f663836fedd7e157448f0b565a64d485 Task-number: QT-5206 Reviewed-by: Martin Jones --- src/gui/text/qtextcontrol.cpp | 34 +++++++++------ .../data/mouseselection_false_words.qml | 5 ++- .../data/mouseselection_true_words.qml | 5 ++- .../tst_qdeclarativetextedit.cpp | 49 ++++++++++++---------- 4 files changed, 56 insertions(+), 37 deletions(-) diff --git a/src/gui/text/qtextcontrol.cpp b/src/gui/text/qtextcontrol.cpp index 9081ab7..f3d42f8 100644 --- a/src/gui/text/qtextcontrol.cpp +++ b/src/gui/text/qtextcontrol.cpp @@ -679,20 +679,30 @@ void QTextControlPrivate::extendWordwiseSelection(int suggestedNewPosition, qrea if (!wordSelectionEnabled && (mouseXPosition < wordStartX || mouseXPosition > wordEndX)) return; - // keep the already selected word even when moving to the left - // (#39164) - if (suggestedNewPosition < selectedWordOnDoubleClick.position()) - cursor.setPosition(selectedWordOnDoubleClick.selectionEnd()); - else - cursor.setPosition(selectedWordOnDoubleClick.selectionStart()); + if (wordSelectionEnabled) { + if (suggestedNewPosition < selectedWordOnDoubleClick.position()) { + cursor.setPosition(selectedWordOnDoubleClick.selectionEnd()); + setCursorPosition(wordStartPos, QTextCursor::KeepAnchor); + } else { + cursor.setPosition(selectedWordOnDoubleClick.selectionStart()); + setCursorPosition(wordEndPos, QTextCursor::KeepAnchor); + } + } else { + // keep the already selected word even when moving to the left + // (#39164) + if (suggestedNewPosition < selectedWordOnDoubleClick.position()) + cursor.setPosition(selectedWordOnDoubleClick.selectionEnd()); + else + cursor.setPosition(selectedWordOnDoubleClick.selectionStart()); - const qreal differenceToStart = mouseXPosition - wordStartX; - const qreal differenceToEnd = wordEndX - mouseXPosition; + const qreal differenceToStart = mouseXPosition - wordStartX; + const qreal differenceToEnd = wordEndX - mouseXPosition; - if (differenceToStart < differenceToEnd) - setCursorPosition(wordStartPos, QTextCursor::KeepAnchor); - else - setCursorPosition(wordEndPos, QTextCursor::KeepAnchor); + if (differenceToStart < differenceToEnd) + setCursorPosition(wordStartPos, QTextCursor::KeepAnchor); + else + setCursorPosition(wordEndPos, QTextCursor::KeepAnchor); + } if (interactionFlags & Qt::TextSelectableByMouse) { #ifndef QT_NO_CLIPBOARD diff --git a/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_false_words.qml b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_false_words.qml index 22a9871..f8d2e4e 100644 --- a/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_false_words.qml +++ b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_false_words.qml @@ -1,7 +1,8 @@ -import QtQuick 1.0 +import QtQuick 1.1 TextEdit { focus: true - text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" + text: "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ" selectByMouse: false + mouseSelectionMode: TextEdit.SelectWords } diff --git a/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_true_words.qml b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_true_words.qml index d61da46..f58fd45 100644 --- a/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_true_words.qml +++ b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_true_words.qml @@ -1,7 +1,8 @@ -import QtQuick 1.0 +import QtQuick 1.1 TextEdit { focus: true - text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" + text: "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ" selectByMouse: true + mouseSelectionMode: TextEdit.SelectWords } diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 5c7f36f..fde0588 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -1327,20 +1327,32 @@ void tst_qdeclarativetextedit::moveCursorSelectionSequence() void tst_qdeclarativetextedit::mouseSelection_data() { QTest::addColumn<QString>("qmlfile"); - QTest::addColumn<bool>("expectSelection"); + QTest::addColumn<int>("from"); + QTest::addColumn<int>("to"); + QTest::addColumn<QString>("selectedText"); // import installed - QTest::newRow("on") << SRCDIR "/data/mouseselection_true.qml" << true; - QTest::newRow("off") << SRCDIR "/data/mouseselection_false.qml" << false; - QTest::newRow("default") << SRCDIR "/data/mouseselection_default.qml" << false; - QTest::newRow("on word selection") << SRCDIR "/data/mouseselection_true_words.qml" << true; - QTest::newRow("off word selection") << SRCDIR "/data/mouseselection_false_words.qml" << false; + QTest::newRow("on") << SRCDIR "/data/mouseselection_true.qml" << 4 << 9 << "45678"; + QTest::newRow("off") << SRCDIR "/data/mouseselection_false.qml" << 4 << 9 << QString(); + QTest::newRow("default") << SRCDIR "/data/mouseselection_default.qml" << 4 << 9 << QString(); + QTest::newRow("off word selection") << SRCDIR "/data/mouseselection_false_words.qml" << 4 << 9 << QString(); + QTest::newRow("on word selection (4,9)") << SRCDIR "/data/mouseselection_true_words.qml" << 4 << 9 << "0123456789"; + QTest::newRow("on word selection (2,13)") << SRCDIR "/data/mouseselection_true_words.qml" << 2 << 13 << "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + QTest::newRow("on word selection (2,30)") << SRCDIR "/data/mouseselection_true_words.qml" << 2 << 30 << "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + QTest::newRow("on word selection (9,13)") << SRCDIR "/data/mouseselection_true_words.qml" << 9 << 13 << "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + QTest::newRow("on word selection (9,30)") << SRCDIR "/data/mouseselection_true_words.qml" << 9 << 30 << "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + QTest::newRow("on word selection (13,2)") << SRCDIR "/data/mouseselection_true_words.qml" << 13 << 2 << "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + QTest::newRow("on word selection (20,2)") << SRCDIR "/data/mouseselection_true_words.qml" << 20 << 2 << "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + QTest::newRow("on word selection (12,9)") << SRCDIR "/data/mouseselection_true_words.qml" << 12 << 9 << "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + QTest::newRow("on word selection (30,9)") << SRCDIR "/data/mouseselection_true_words.qml" << 30 << 9 << "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ"; } void tst_qdeclarativetextedit::mouseSelection() { QFETCH(QString, qmlfile); - QFETCH(bool, expectSelection); + QFETCH(int, from); + QFETCH(int, to); + QFETCH(QString, selectedText); QDeclarativeView *canvas = createView(qmlfile); @@ -1354,25 +1366,20 @@ void tst_qdeclarativetextedit::mouseSelection() QVERIFY(textEditObject != 0); // press-and-drag-and-release from x1 to x2 - int x1 = 10; - int x2 = 70; - int y = textEditObject->height()/2; - QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x1,y))); + QPoint p1 = canvas->mapFromScene(textEditObject->positionToRectangle(from).center()); + QPoint p2 = canvas->mapFromScene(textEditObject->positionToRectangle(to).center()); + QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, p1); //QTest::mouseMove(canvas->viewport(), canvas->mapFromScene(QPoint(x2,y))); // doesn't work - QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(x2,y)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); + QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(p2), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); QApplication::sendEvent(canvas->viewport(), &mv); - QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x2,y))); - QString str = textEditObject->selectedText(); - if (expectSelection) - QVERIFY(str.length() > 3); // don't reallly care *what* was selected (and it's too sensitive to platform) - else - QVERIFY(str.isEmpty()); + QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, p2); + QCOMPARE(textEditObject->selectedText(), selectedText); // Clicking and shift to clicking between the same points should select the same text. textEditObject->setCursorPosition(0); - QTest::mouseClick(canvas->viewport(), Qt::LeftButton, Qt::NoModifier, canvas->mapFromScene(QPoint(x1,y))); - QTest::mouseClick(canvas->viewport(), Qt::LeftButton, Qt::ShiftModifier, canvas->mapFromScene(QPoint(x2,y))); - QCOMPARE(textEditObject->selectedText(), str); + QTest::mouseClick(canvas->viewport(), Qt::LeftButton, Qt::NoModifier, p1); + QTest::mouseClick(canvas->viewport(), Qt::LeftButton, Qt::ShiftModifier, p2); + QCOMPARE(textEditObject->selectedText(), selectedText); delete canvas; } -- cgit v0.12 From ec7a1dce2ed0766e7681598c17a80468794a249e Mon Sep 17 00:00:00 2001 From: Eike Ziller <eike.ziller@nokia.com> Date: Mon, 15 Aug 2011 09:31:15 +0200 Subject: Use CoreText for font rendering on uikit. --- src/gui/painting/qpaintengine_raster.cpp | 4 +- src/gui/text/qfontengine_coretext.mm | 12 +- src/gui/text/qfontengine_coretext_p.h | 6 + src/gui/text/text.pri | 9 +- .../examples/flickrdemo/flickrdemo-Info.plist | 8 ++ .../flickrdemo.xcodeproj/project.pbxproj | 14 +- .../uikit/examples/qmltest/qmltest-Info.plist | 8 ++ .../qmltest/qmltest.xcodeproj/project.pbxproj | 16 +-- src/plugins/platforms/uikit/platform.pro | 12 +- .../platforms/uikit/qcoretextfontdatabase.cpp | 156 +++++++++++++++++++++ .../platforms/uikit/qcoretextfontdatabase.h | 58 ++++++++ src/plugins/platforms/uikit/quikitintegration.mm | 14 +- src/plugins/platforms/uikit/quikitscreen.mm | 5 +- 13 files changed, 280 insertions(+), 42 deletions(-) create mode 100644 src/plugins/platforms/uikit/qcoretextfontdatabase.cpp create mode 100644 src/plugins/platforms/uikit/qcoretextfontdatabase.h diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 76d7316..9826689 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -3098,7 +3098,7 @@ void QRasterPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textIte ensurePen(); ensureState(); -#if defined (Q_WS_WIN) || defined(Q_WS_MAC) +#if defined (Q_WS_WIN) || defined(Q_WS_MAC) || (defined(Q_OS_MAC) && defined(Q_WS_QPA)) if (!supportsTransformations(ti.fontEngine)) { QVarLengthArray<QFixedPoint> positions; @@ -3438,7 +3438,7 @@ bool QRasterPaintEngine::supportsTransformations(const QFontEngine *fontEngine) bool QRasterPaintEngine::supportsTransformations(qreal pixelSize, const QTransform &m) const { -#if defined(Q_WS_MAC) +#if defined(Q_WS_MAC) || (defined(Q_OS_MAC) && defined(Q_WS_QPA)) // Mac font engines don't support scaling and rotation if (m.type() > QTransform::TxTranslate) #else diff --git a/src/gui/text/qfontengine_coretext.mm b/src/gui/text/qfontengine_coretext.mm index 64d4a24..153451e 100644 --- a/src/gui/text/qfontengine_coretext.mm +++ b/src/gui/text/qfontengine_coretext.mm @@ -135,7 +135,7 @@ void QCoreTextFontEngineMulti::init(bool kerning) attributeDict = CFDictionaryCreateMutable(0, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); - CFDictionaryAddValue(attributeDict, NSFontAttributeName, ctfont); + CFDictionaryAddValue(attributeDict, kCTFontAttributeName, ctfont); if (!kerning) { float zero = 0.0; QCFType<CFNumberRef> noKern = CFNumberCreate(kCFAllocatorDefault, kCFNumberFloatType, &zero); @@ -257,7 +257,7 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay //NSLog(@"Dictionary %@", runAttribs); if (!runAttribs) runAttribs = attributeDict; - CTFontRef runFont = static_cast<CTFontRef>(CFDictionaryGetValue(runAttribs, NSFontAttributeName)); + CTFontRef runFont = static_cast<CTFontRef>(CFDictionaryGetValue(runAttribs, kCTFontAttributeName)); uint fontIndex = fontIndexForFont(runFont); const QFontEngine *engine = engineAt(fontIndex); fontIndex <<= 24; @@ -547,7 +547,6 @@ glyph_metrics_t QCoreTextFontEngine::boundingBox(glyph_t glyph) ret.xoff = ret.xoff.round(); ret.yoff = ret.yoff.round(); } - return ret; } @@ -723,7 +722,12 @@ QImage QCoreTextFontEngine::imageForGlyph(glyph_t glyph, QFixed subPixelPosition QImage im(qRound(br.width) + 2, qRound(br.height) + 2, QImage::Format_RGB32); im.fill(0); - CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); + CGColorSpaceRef colorspace = +#ifdef Q_WS_MAC + CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); +#else + CGColorSpaceCreateDeviceRGB(); +#endif uint cgflags = kCGImageAlphaNoneSkipFirst; #ifdef kCGBitmapByteOrder32Host //only needed because CGImage.h added symbols in the minor version cgflags |= kCGBitmapByteOrder32Host; diff --git a/src/gui/text/qfontengine_coretext_p.h b/src/gui/text/qfontengine_coretext_p.h index efe8295..0a2ae1f 100644 --- a/src/gui/text/qfontengine_coretext_p.h +++ b/src/gui/text/qfontengine_coretext_p.h @@ -44,6 +44,12 @@ #include <private/qfontengine_p.h> +#ifdef QT_NO_CORESERVICES +#include <CoreText/CoreText.h> +#include <CoreGraphics/CoreGraphics.h> +#include <private/qcore_mac_p.h> +#endif + #if !defined(Q_WS_MAC) || (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) class QRawFontPrivate; diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri index b6cdc52..1cfacf7 100644 --- a/src/gui/text/text.pri +++ b/src/gui/text/text.pri @@ -106,14 +106,17 @@ unix:x11 { !embedded:!qpa:!x11:mac { HEADERS += \ text/qfontengine_mac_p.h - OBJECTIVE_HEADERS += \ - text/qfontengine_coretext_p.h SOURCES += \ text/qfont_mac.cpp \ text/qrawfont_mac.cpp OBJECTIVE_SOURCES += \ - text/qfontengine_coretext.mm \ text/qfontengine_mac.mm +} +!embedded:!x11:mac { + OBJECTIVE_HEADERS += \ + text/qfontengine_coretext_p.h + OBJECTIVE_SOURCES += \ + text/qfontengine_coretext.mm contains(QT_CONFIG, harfbuzz) { DEFINES += QT_ENABLE_HARFBUZZ_FOR_MAC } diff --git a/src/plugins/platforms/uikit/examples/flickrdemo/flickrdemo-Info.plist b/src/plugins/platforms/uikit/examples/flickrdemo/flickrdemo-Info.plist index 5bc1ac9..3c45823 100644 --- a/src/plugins/platforms/uikit/examples/flickrdemo/flickrdemo-Info.plist +++ b/src/plugins/platforms/uikit/examples/flickrdemo/flickrdemo-Info.plist @@ -6,6 +6,8 @@ <string>English</string> <key>CFBundleDisplayName</key> <string>${PRODUCT_NAME}</string> + <key>CFBundleDocumentTypes</key> + <array/> <key>CFBundleExecutable</key> <string>${EXECUTABLE_NAME}</string> <key>CFBundleIconFile</key> @@ -20,6 +22,8 @@ <string>APPL</string> <key>CFBundleSignature</key> <string>????</string> + <key>CFBundleURLTypes</key> + <array/> <key>CFBundleVersion</key> <string>1.0</string> <key>LSRequiresIPhoneOS</key> @@ -37,5 +41,9 @@ <string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationPortraitUpsideDown</string> </array> + <key>UTExportedTypeDeclarations</key> + <array/> + <key>UTImportedTypeDeclarations</key> + <array/> </dict> </plist> diff --git a/src/plugins/platforms/uikit/examples/flickrdemo/flickrdemo.xcodeproj/project.pbxproj b/src/plugins/platforms/uikit/examples/flickrdemo/flickrdemo.xcodeproj/project.pbxproj index b564ef9..68237ae 100755 --- a/src/plugins/platforms/uikit/examples/flickrdemo/flickrdemo.xcodeproj/project.pbxproj +++ b/src/plugins/platforms/uikit/examples/flickrdemo/flickrdemo.xcodeproj/project.pbxproj @@ -17,13 +17,14 @@ D307DEB213EBCF5500399BD4 /* libQtOpenGL.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D307DEA913EBCF5500399BD4 /* libQtOpenGL.a */; }; D307DEB313EBCF5500399BD4 /* libQtScript.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D307DEAA13EBCF5500399BD4 /* libQtScript.a */; }; D307DEB413EBCF5500399BD4 /* libQtSql.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D307DEAB13EBCF5500399BD4 /* libQtSql.a */; }; - D307DEB513EBCF5500399BD4 /* libQtXml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D307DEAC13EBCF5500399BD4 /* libQtXml.a */; }; D307DEB613EBCF5500399BD4 /* libQtXmlPatterns.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D307DEAD13EBCF5500399BD4 /* libQtXmlPatterns.a */; }; D307DEB813EBCF6400399BD4 /* libquikit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D307DEB713EBCF6400399BD4 /* libquikit.a */; }; D333CCF213B88A4D0070E08E /* moc_qmlapplicationviewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D333CCEF13B88A4D0070E08E /* moc_qmlapplicationviewer.cpp */; }; D333CCF313B88A4D0070E08E /* moc_qmlapplicationviewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D333CCEF13B88A4D0070E08E /* moc_qmlapplicationviewer.cpp */; }; D333CCF413B88A4D0070E08E /* qmlapplicationviewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D333CCF013B88A4D0070E08E /* qmlapplicationviewer.cpp */; }; D333CCF513B88A4D0070E08E /* qmlapplicationviewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D333CCF013B88A4D0070E08E /* qmlapplicationviewer.cpp */; }; + D36D346513F3CD7E00EC5A41 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D36D346413F3CD7E00EC5A41 /* CoreText.framework */; }; + D36D346613F3CD8800EC5A41 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D36D346413F3CD7E00EC5A41 /* CoreText.framework */; }; D3A51610134B03DE00E30E2F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3A5160F134B03DE00E30E2F /* OpenGLES.framework */; }; D3A51612134B03E900E30E2F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3A51611134B03E900E30E2F /* QuartzCore.framework */; }; D3A51615134B041500E30E2F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3A51611134B03E900E30E2F /* QuartzCore.framework */; }; @@ -46,7 +47,6 @@ D3D8175B132A184300CDE422 /* libQtNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D81755132A184300CDE422 /* libQtNetwork.a */; }; D3D8175C132A184300CDE422 /* libQtScript.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D81756132A184300CDE422 /* libQtScript.a */; }; D3D8175D132A184300CDE422 /* libQtSql.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D81757132A184300CDE422 /* libQtSql.a */; }; - D3D81760132A185A00CDE422 /* libQtXml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D8175E132A185A00CDE422 /* libQtXml.a */; }; D3D81761132A185A00CDE422 /* libQtXmlPatterns.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D8175F132A185A00CDE422 /* libQtXmlPatterns.a */; }; D3D81763132A186B00CDE422 /* libquikit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D81762132A186B00CDE422 /* libquikit.a */; }; /* End PBXBuildFile section */ @@ -65,12 +65,12 @@ D307DEA913EBCF5500399BD4 /* libQtOpenGL.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtOpenGL.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtOpenGL.a"; sourceTree = "<group>"; }; D307DEAA13EBCF5500399BD4 /* libQtScript.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtScript.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtScript.a"; sourceTree = "<group>"; }; D307DEAB13EBCF5500399BD4 /* libQtSql.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtSql.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtSql.a"; sourceTree = "<group>"; }; - D307DEAC13EBCF5500399BD4 /* libQtXml.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtXml.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtXml.a"; sourceTree = "<group>"; }; D307DEAD13EBCF5500399BD4 /* libQtXmlPatterns.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtXmlPatterns.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtXmlPatterns.a"; sourceTree = "<group>"; }; D307DEB713EBCF6400399BD4 /* libquikit.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libquikit.a; path = "../../../../../../../qt-lighthouse-ios-simulator/plugins/platforms/libquikit.a"; sourceTree = "<group>"; }; D333CCEF13B88A4D0070E08E /* moc_qmlapplicationviewer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_qmlapplicationviewer.cpp; path = ../share/qmlapplicationviewer/moc_qmlapplicationviewer.cpp; sourceTree = "<group>"; }; D333CCF013B88A4D0070E08E /* qmlapplicationviewer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = qmlapplicationviewer.cpp; path = ../share/qmlapplicationviewer/qmlapplicationviewer.cpp; sourceTree = "<group>"; }; D333CCF113B88A4D0070E08E /* qmlapplicationviewer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qmlapplicationviewer.h; path = ../share/qmlapplicationviewer/qmlapplicationviewer.h; sourceTree = "<group>"; }; + D36D346413F3CD7E00EC5A41 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; D3A5160F134B03DE00E30E2F /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; D3A51611134B03E900E30E2F /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; D3A51617134B042A00E30E2F /* libQtOpenGL.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtOpenGL.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtOpenGL.a"; sourceTree = "<group>"; }; @@ -85,7 +85,6 @@ D3D81755132A184300CDE422 /* libQtNetwork.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtNetwork.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtNetwork.a"; sourceTree = SOURCE_ROOT; }; D3D81756132A184300CDE422 /* libQtScript.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtScript.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtScript.a"; sourceTree = SOURCE_ROOT; }; D3D81757132A184300CDE422 /* libQtSql.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtSql.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtSql.a"; sourceTree = SOURCE_ROOT; }; - D3D8175E132A185A00CDE422 /* libQtXml.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtXml.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtXml.a"; sourceTree = SOURCE_ROOT; }; D3D8175F132A185A00CDE422 /* libQtXmlPatterns.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtXmlPatterns.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtXmlPatterns.a"; sourceTree = SOURCE_ROOT; }; D3D81762132A186B00CDE422 /* libquikit.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libquikit.a; path = "../../../../../../../qt-lighthouse-ios-device/plugins/platforms/libquikit.a"; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ @@ -95,6 +94,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D36D346613F3CD8800EC5A41 /* CoreText.framework in Frameworks */, D3A51612134B03E900E30E2F /* QuartzCore.framework in Frameworks */, D3A51610134B03DE00E30E2F /* OpenGLES.framework in Frameworks */, 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, @@ -108,7 +108,6 @@ D307DEB213EBCF5500399BD4 /* libQtOpenGL.a in Frameworks */, D307DEB313EBCF5500399BD4 /* libQtScript.a in Frameworks */, D307DEB413EBCF5500399BD4 /* libQtSql.a in Frameworks */, - D307DEB513EBCF5500399BD4 /* libQtXml.a in Frameworks */, D307DEB613EBCF5500399BD4 /* libQtXmlPatterns.a in Frameworks */, D307DEB813EBCF6400399BD4 /* libquikit.a in Frameworks */, ); @@ -118,6 +117,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D36D346513F3CD7E00EC5A41 /* CoreText.framework in Frameworks */, D3A51618134B042A00E30E2F /* libQtOpenGL.a in Frameworks */, D3CAA7F013264F52008BB877 /* Foundation.framework in Frameworks */, D3CAA7F113264F52008BB877 /* UIKit.framework in Frameworks */, @@ -131,7 +131,6 @@ D3D8175B132A184300CDE422 /* libQtNetwork.a in Frameworks */, D3D8175C132A184300CDE422 /* libQtScript.a in Frameworks */, D3D8175D132A184300CDE422 /* libQtSql.a in Frameworks */, - D3D81760132A185A00CDE422 /* libQtXml.a in Frameworks */, D3D81761132A185A00CDE422 /* libQtXmlPatterns.a in Frameworks */, D3D81763132A186B00CDE422 /* libquikit.a in Frameworks */, ); @@ -190,6 +189,7 @@ 288765A40DF7441C002DB57D /* CoreGraphics.framework */, D3A51611134B03E900E30E2F /* QuartzCore.framework */, D3A5160F134B03DE00E30E2F /* OpenGLES.framework */, + D36D346413F3CD7E00EC5A41 /* CoreText.framework */, D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */, ); name = Frameworks; @@ -216,7 +216,6 @@ D3A51617134B042A00E30E2F /* libQtOpenGL.a */, D3D81756132A184300CDE422 /* libQtScript.a */, D3D81757132A184300CDE422 /* libQtSql.a */, - D3D8175E132A185A00CDE422 /* libQtXml.a */, D3D8175F132A185A00CDE422 /* libQtXmlPatterns.a */, ); name = Device; @@ -233,7 +232,6 @@ D307DEA913EBCF5500399BD4 /* libQtOpenGL.a */, D307DEAA13EBCF5500399BD4 /* libQtScript.a */, D307DEAB13EBCF5500399BD4 /* libQtSql.a */, - D307DEAC13EBCF5500399BD4 /* libQtXml.a */, D307DEAD13EBCF5500399BD4 /* libQtXmlPatterns.a */, ); name = Simulator; diff --git a/src/plugins/platforms/uikit/examples/qmltest/qmltest-Info.plist b/src/plugins/platforms/uikit/examples/qmltest/qmltest-Info.plist index 1566585..531d93d 100644 --- a/src/plugins/platforms/uikit/examples/qmltest/qmltest-Info.plist +++ b/src/plugins/platforms/uikit/examples/qmltest/qmltest-Info.plist @@ -6,6 +6,8 @@ <string>English</string> <key>CFBundleDisplayName</key> <string>${PRODUCT_NAME}</string> + <key>CFBundleDocumentTypes</key> + <array/> <key>CFBundleExecutable</key> <string>${EXECUTABLE_NAME}</string> <key>CFBundleIconFile</key> @@ -20,9 +22,15 @@ <string>APPL</string> <key>CFBundleSignature</key> <string>????</string> + <key>CFBundleURLTypes</key> + <array/> <key>CFBundleVersion</key> <string>1.0</string> <key>LSRequiresIPhoneOS</key> <true/> + <key>UTExportedTypeDeclarations</key> + <array/> + <key>UTImportedTypeDeclarations</key> + <array/> </dict> </plist> diff --git a/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj b/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj index afebcba..1dd9b35 100755 --- a/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj +++ b/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj @@ -18,12 +18,13 @@ D307DED313EBD05900399BD4 /* libQtOpenGL.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D307DECA13EBD05900399BD4 /* libQtOpenGL.a */; }; D307DED413EBD05900399BD4 /* libQtScript.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D307DECB13EBD05900399BD4 /* libQtScript.a */; }; D307DED513EBD05900399BD4 /* libQtSql.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D307DECC13EBD05900399BD4 /* libQtSql.a */; }; - D307DED613EBD05900399BD4 /* libQtXml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D307DECD13EBD05900399BD4 /* libQtXml.a */; }; D307DED713EBD05900399BD4 /* libQtXmlPatterns.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D307DECE13EBD05900399BD4 /* libQtXmlPatterns.a */; }; D333CCF913B88A690070E08E /* moc_qmlapplicationviewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D333CCF613B88A690070E08E /* moc_qmlapplicationviewer.cpp */; }; D333CCFA13B88A690070E08E /* moc_qmlapplicationviewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D333CCF613B88A690070E08E /* moc_qmlapplicationviewer.cpp */; }; D333CCFB13B88A690070E08E /* qmlapplicationviewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D333CCF713B88A690070E08E /* qmlapplicationviewer.cpp */; }; D333CCFC13B88A690070E08E /* qmlapplicationviewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D333CCF713B88A690070E08E /* qmlapplicationviewer.cpp */; }; + D34F290413F29AF400E4F9AC /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D34F290313F29AF400E4F9AC /* CoreText.framework */; }; + D34F290713F29B0A00E4F9AC /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D34F290613F29B0300E4F9AC /* CoreText.framework */; }; D35784261345D9940046D202 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D35784251345D9940046D202 /* OpenGLES.framework */; }; D35784281345D9E00046D202 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D35784271345D9E00046D202 /* QuartzCore.framework */; }; D3578436134A09990046D202 /* libQtOpenGL.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3578435134A09990046D202 /* libQtOpenGL.a */; }; @@ -46,7 +47,6 @@ D3D817B5132A2CFD00CDE422 /* libQtNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817AD132A2CFD00CDE422 /* libQtNetwork.a */; }; D3D817B6132A2CFD00CDE422 /* libQtScript.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817AE132A2CFD00CDE422 /* libQtScript.a */; }; D3D817B7132A2CFD00CDE422 /* libQtSql.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817AF132A2CFD00CDE422 /* libQtSql.a */; }; - D3D817B8132A2CFD00CDE422 /* libQtXml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817B0132A2CFD00CDE422 /* libQtXml.a */; }; D3D817B9132A2CFD00CDE422 /* libQtXmlPatterns.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817B1132A2CFD00CDE422 /* libQtXmlPatterns.a */; }; D3D817BB132A2D0E00CDE422 /* libquikit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817BA132A2D0E00CDE422 /* libquikit.a */; }; /* End PBXBuildFile section */ @@ -66,11 +66,12 @@ D307DECA13EBD05900399BD4 /* libQtOpenGL.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtOpenGL.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtOpenGL.a"; sourceTree = "<group>"; }; D307DECB13EBD05900399BD4 /* libQtScript.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtScript.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtScript.a"; sourceTree = "<group>"; }; D307DECC13EBD05900399BD4 /* libQtSql.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtSql.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtSql.a"; sourceTree = "<group>"; }; - D307DECD13EBD05900399BD4 /* libQtXml.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtXml.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtXml.a"; sourceTree = "<group>"; }; D307DECE13EBD05900399BD4 /* libQtXmlPatterns.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtXmlPatterns.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtXmlPatterns.a"; sourceTree = "<group>"; }; D333CCF613B88A690070E08E /* moc_qmlapplicationviewer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_qmlapplicationviewer.cpp; path = ../share/qmlapplicationviewer/moc_qmlapplicationviewer.cpp; sourceTree = "<group>"; }; D333CCF713B88A690070E08E /* qmlapplicationviewer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = qmlapplicationviewer.cpp; path = ../share/qmlapplicationviewer/qmlapplicationviewer.cpp; sourceTree = "<group>"; }; D333CCF813B88A690070E08E /* qmlapplicationviewer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qmlapplicationviewer.h; path = ../share/qmlapplicationviewer/qmlapplicationviewer.h; sourceTree = "<group>"; }; + D34F290313F29AF400E4F9AC /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; + D34F290613F29B0300E4F9AC /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; D35784251345D9940046D202 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; D35784271345D9E00046D202 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; D3578435134A09990046D202 /* libQtOpenGL.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtOpenGL.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtOpenGL.a"; sourceTree = "<group>"; }; @@ -85,7 +86,6 @@ D3D817AD132A2CFD00CDE422 /* libQtNetwork.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtNetwork.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtNetwork.a"; sourceTree = SOURCE_ROOT; }; D3D817AE132A2CFD00CDE422 /* libQtScript.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtScript.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtScript.a"; sourceTree = SOURCE_ROOT; }; D3D817AF132A2CFD00CDE422 /* libQtSql.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtSql.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtSql.a"; sourceTree = SOURCE_ROOT; }; - D3D817B0132A2CFD00CDE422 /* libQtXml.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtXml.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtXml.a"; sourceTree = SOURCE_ROOT; }; D3D817B1132A2CFD00CDE422 /* libQtXmlPatterns.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtXmlPatterns.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtXmlPatterns.a"; sourceTree = SOURCE_ROOT; }; D3D817BA132A2D0E00CDE422 /* libquikit.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libquikit.a; path = "../../../../../../../qt-lighthouse-ios-device/plugins/platforms/libquikit.a"; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ @@ -95,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D34F290413F29AF400E4F9AC /* CoreText.framework in Frameworks */, D35784281345D9E00046D202 /* QuartzCore.framework in Frameworks */, 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, @@ -108,7 +109,6 @@ D307DED313EBD05900399BD4 /* libQtOpenGL.a in Frameworks */, D307DED413EBD05900399BD4 /* libQtScript.a in Frameworks */, D307DED513EBD05900399BD4 /* libQtSql.a in Frameworks */, - D307DED613EBD05900399BD4 /* libQtXml.a in Frameworks */, D307DED713EBD05900399BD4 /* libQtXmlPatterns.a in Frameworks */, D307DEC513EBD04100399BD4 /* libquikit.a in Frameworks */, ); @@ -118,6 +118,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D34F290713F29B0A00E4F9AC /* CoreText.framework in Frameworks */, D357843A134A0AB10046D202 /* QuartzCore.framework in Frameworks */, D3578439134A0AAE0046D202 /* OpenGLES.framework in Frameworks */, D3CAA7F013264F52008BB877 /* Foundation.framework in Frameworks */, @@ -130,7 +131,6 @@ D3D817B5132A2CFD00CDE422 /* libQtNetwork.a in Frameworks */, D3D817B6132A2CFD00CDE422 /* libQtScript.a in Frameworks */, D3D817B7132A2CFD00CDE422 /* libQtSql.a in Frameworks */, - D3D817B8132A2CFD00CDE422 /* libQtXml.a in Frameworks */, D3D817B9132A2CFD00CDE422 /* libQtXmlPatterns.a in Frameworks */, D3D817BB132A2D0E00CDE422 /* libquikit.a in Frameworks */, D3578436134A09990046D202 /* libQtOpenGL.a in Frameworks */, @@ -152,6 +152,7 @@ 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { isa = PBXGroup; children = ( + D34F290313F29AF400E4F9AC /* CoreText.framework */, 29B97315FDCFA39411CA2CEA /* Other Sources */, 29B97317FDCFA39411CA2CEA /* Resources */, D3CAA7E213264E8C008BB877 /* QMLApplicationViewer */, @@ -190,6 +191,7 @@ 288765A40DF7441C002DB57D /* CoreGraphics.framework */, D35784251345D9940046D202 /* OpenGLES.framework */, D35784271345D9E00046D202 /* QuartzCore.framework */, + D34F290613F29B0300E4F9AC /* CoreText.framework */, D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */, ); name = Frameworks; @@ -216,7 +218,6 @@ D3578435134A09990046D202 /* libQtOpenGL.a */, D3D817AE132A2CFD00CDE422 /* libQtScript.a */, D3D817AF132A2CFD00CDE422 /* libQtSql.a */, - D3D817B0132A2CFD00CDE422 /* libQtXml.a */, D3D817B1132A2CFD00CDE422 /* libQtXmlPatterns.a */, ); name = Device; @@ -233,7 +234,6 @@ D307DECA13EBD05900399BD4 /* libQtOpenGL.a */, D307DECB13EBD05900399BD4 /* libQtScript.a */, D307DECC13EBD05900399BD4 /* libQtSql.a */, - D307DECD13EBD05900399BD4 /* libQtXml.a */, D307DECE13EBD05900399BD4 /* libQtXmlPatterns.a */, ); name = Simulator; diff --git a/src/plugins/platforms/uikit/platform.pro b/src/plugins/platforms/uikit/platform.pro index 726da06..b5ff62f 100644 --- a/src/plugins/platforms/uikit/platform.pro +++ b/src/plugins/platforms/uikit/platform.pro @@ -17,11 +17,19 @@ OBJECTIVE_HEADERS = quikitintegration.h \ quikiteventloop.h \ quikitwindowsurface.h -HEADERS = quikitsoftwareinputhandler.h +HEADERS = quikitsoftwareinputhandler.h \ + qcoretextfontdatabase.h + +SOURCES += \ + qcoretextfontdatabase.cpp + +#needed for qcoretextfontengine even if it's not used +INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/harfbuzz/src #add libz for freetype. LIBS += -lz -include(../fontdatabases/genericunix/genericunix.pri) target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target + + diff --git a/src/plugins/platforms/uikit/qcoretextfontdatabase.cpp b/src/plugins/platforms/uikit/qcoretextfontdatabase.cpp new file mode 100644 index 0000000..76ad936 --- /dev/null +++ b/src/plugins/platforms/uikit/qcoretextfontdatabase.cpp @@ -0,0 +1,156 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qcoretextfontdatabase.h" + +#include <CoreText/CoreText.h> + +#include <private/qcore_mac_p.h> +#include <private/qfontengine_coretext_p.h> + +#include <QtDebug> + +QT_BEGIN_NAMESPACE + +void QCoreTextFontDatabase::populateFontDatabase() +{ + QCFType<CTFontCollectionRef> collection = CTFontCollectionCreateFromAvailableFonts(0); + if(!collection) + return; + QCFType<CFArrayRef> fonts = CTFontCollectionCreateMatchingFontDescriptors(collection); + if(!fonts) + return; + QSupportedWritingSystems supportedWritingSystems; + for (int i = 0; i < QFontDatabase::WritingSystemsCount; ++i) + supportedWritingSystems.setSupported((QFontDatabase::WritingSystem)i, true); + QString foundry_name = "CoreText"; + const int numFonts = CFArrayGetCount(fonts); + for(int i = 0; i < numFonts; ++i) { + CTFontDescriptorRef font = (CTFontDescriptorRef)CFArrayGetValueAtIndex(fonts, i); + + QCFString family_name = (CFStringRef)CTFontDescriptorCopyAttribute(font, kCTFontFamilyNameAttribute); +// QCFString style_name = (CFStringRef)CTFontDescriptorCopyAttribute(font, kCTFontStyleNameAttribute); + + QFont::Weight fontWeight = QFont::Normal; + QFont::Style fontStyle = QFont::StyleNormal; + if(QCFType<CFDictionaryRef> styles = (CFDictionaryRef)CTFontDescriptorCopyAttribute(font, kCTFontTraitsAttribute)) { + if(CFNumberRef weight = (CFNumberRef)CFDictionaryGetValue(styles, kCTFontWeightTrait)) { + Q_ASSERT(CFNumberIsFloatType(weight)); + double d; + if(CFNumberGetValue(weight, kCFNumberDoubleType, &d)) { + if (d > 0.0) + fontWeight = QFont::Bold; + } + } + if(CFNumberRef italic = (CFNumberRef)CFDictionaryGetValue(styles, kCTFontSlantTrait)) { + Q_ASSERT(CFNumberIsFloatType(italic)); + double d; + if(CFNumberGetValue(italic, kCFNumberDoubleType, &d)) { + if (d > 0.0) + fontStyle = QFont::StyleItalic; + } + } + } + + int pixelSize = 0; + if(QCFType<CFNumberRef> size = (CFNumberRef)CTFontDescriptorCopyAttribute(font, kCTFontSizeAttribute)) { + if(CFNumberIsFloatType(size)) { + double d; + CFNumberGetValue(size, kCFNumberDoubleType, &d); + pixelSize = d; + } else { + CFNumberGetValue(size, kCFNumberIntType, &pixelSize); + } + } + registerFont(QString(family_name), + foundry_name, + fontWeight, + fontStyle, + QFont::Unstretched, + true, + true, + pixelSize, + supportedWritingSystems, + 0); + } +} + +QFontEngine *QCoreTextFontDatabase::fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle) +{ + Q_UNUSED(script) + Q_UNUSED(handle) + CTFontSymbolicTraits symbolicTraits = 0; + if (fontDef.weight >= QFont::Bold) + symbolicTraits |= kCTFontBoldTrait; + switch (fontDef.style) { + case QFont::StyleNormal: + break; + case QFont::StyleItalic: + case QFont::StyleOblique: + symbolicTraits |= kCTFontItalicTrait; + break; + } + + CGAffineTransform transform = CGAffineTransformIdentity; + if (fontDef.stretch != 100) { + transform = CGAffineTransformMakeScale(float(fontDef.stretch) / float(100), 1); + } + + QCFType<CTFontRef> baseFont = CTFontCreateWithName(QCFString(fontDef.family), fontDef.pixelSize, &transform); + QCFType<CTFontRef> ctFont = NULL; + // There is a side effect in Core Text: if we apply 0 as symbolic traits to a font in normal weight, + // we will get the light version of that font (while the way supposed to work doesn't: + // setting kCTFontWeightTrait to some value between -1.0 to 0.0 has no effect on font selection) + if (fontDef.weight != QFont::Normal || symbolicTraits) + ctFont = CTFontCreateCopyWithSymbolicTraits(baseFont, fontDef.pixelSize, &transform, symbolicTraits, symbolicTraits); + + // CTFontCreateCopyWithSymbolicTraits returns NULL if we ask for a trait that does + // not exist for the given font. (for example italic) + if (ctFont == 0) { + ctFont = baseFont; + } + + if (ctFont) + return new QCoreTextFontEngine(ctFont, fontDef); + return 0; +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/uikit/qcoretextfontdatabase.h b/src/plugins/platforms/uikit/qcoretextfontdatabase.h new file mode 100644 index 0000000..f4fcb20 --- /dev/null +++ b/src/plugins/platforms/uikit/qcoretextfontdatabase.h @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QCORETEXTFONTDATABASE_H +#define QCORETEXTFONTDATABASE_H + +#include <QtGui/QPlatformFontDatabase> + +QT_BEGIN_NAMESPACE + +class QCoreTextFontDatabase : public QPlatformFontDatabase +{ +public: + void populateFontDatabase(); + QFontEngine *fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle); +}; + +QT_END_NAMESPACE + +#endif // QCORETEXTFONTDATABASE_H diff --git a/src/plugins/platforms/uikit/quikitintegration.mm b/src/plugins/platforms/uikit/quikitintegration.mm index ca020c9..02da97c 100644 --- a/src/plugins/platforms/uikit/quikitintegration.mm +++ b/src/plugins/platforms/uikit/quikitintegration.mm @@ -44,7 +44,7 @@ #include "quikitwindowsurface.h" #include "quikitscreen.h" #include "quikiteventloop.h" -#include "qgenericunixfontdatabase.h" +#include "qcoretextfontdatabase.h" #include <QtGui/QApplication> @@ -56,16 +56,6 @@ QT_BEGIN_NAMESPACE -class QUIKitFontDatabase : public QGenericUnixFontDatabase -{ -public: - virtual QString fontDir() const - { - return QString( [[[[NSBundle mainBundle] bundlePath] - stringByAppendingPathComponent:@"fonts"] UTF8String] ); - } -}; - static QUIKitIntegration *m_instance = 0; QUIKitIntegration * QUIKitIntegration::instance() @@ -74,7 +64,7 @@ QUIKitIntegration * QUIKitIntegration::instance() } QUIKitIntegration::QUIKitIntegration() - :mFontDb(new QUIKitFontDatabase() ) + :mFontDb(new QCoreTextFontDatabase) { if (!m_instance) m_instance = this; diff --git a/src/plugins/platforms/uikit/quikitscreen.mm b/src/plugins/platforms/uikit/quikitscreen.mm index 3c1e360..6d24193 100644 --- a/src/plugins/platforms/uikit/quikitscreen.mm +++ b/src/plugins/platforms/uikit/quikitscreen.mm @@ -63,7 +63,6 @@ QUIKitScreen::QUIKitScreen(int screenIndex) const qreal inch = 25.4; qreal dpi = 160.; int dragDistance = 12; - int defaultFontPixelSize = 14; if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { dpi = 132.; dragDistance = 10; @@ -71,8 +70,8 @@ QUIKitScreen::QUIKitScreen(int screenIndex) m_physicalSize = QSize(qRound(bounds.size.width * inch / dpi), qRound(bounds.size.height * inch / dpi)); qApp->setStartDragDistance(dragDistance); - QFont font(QLatin1String("Bitstream Vera Sans")); - font.setPixelSize(defaultFontPixelSize); + QFont font; // system font is helvetica, so that is fine already + font.setPixelSize([UIFont systemFontSize]); qApp->setFont(font); [pool release]; -- cgit v0.12 From 2b6b6acec2f659f50416c7d6f369a266de19373b Mon Sep 17 00:00:00 2001 From: Eike Ziller <eike.ziller@nokia.com> Date: Wed, 24 Aug 2011 09:26:07 +0200 Subject: uikit: fix examples to no longer ship the custom fonts --- .../uikit/examples/flickrdemo/flickrdemo.xcodeproj/project.pbxproj | 6 ------ .../uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj | 6 ------ 2 files changed, 12 deletions(-) diff --git a/src/plugins/platforms/uikit/examples/flickrdemo/flickrdemo.xcodeproj/project.pbxproj b/src/plugins/platforms/uikit/examples/flickrdemo/flickrdemo.xcodeproj/project.pbxproj index 68237ae..dedc462 100755 --- a/src/plugins/platforms/uikit/examples/flickrdemo/flickrdemo.xcodeproj/project.pbxproj +++ b/src/plugins/platforms/uikit/examples/flickrdemo/flickrdemo.xcodeproj/project.pbxproj @@ -37,8 +37,6 @@ D3CAA7F213264F52008BB877 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; D3CAA7FA13264F8A008BB877 /* libz.1.2.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */; }; D3CAA81113264FF0008BB877 /* libz.1.2.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */; }; - D3CAA88A132652E5008BB877 /* fonts in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA836132652E5008BB877 /* fonts */; }; - D3CAA88B132652E5008BB877 /* fonts in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA836132652E5008BB877 /* fonts */; }; D3D815F31329339300CDE422 /* flickr in Resources */ = {isa = PBXBuildFile; fileRef = D3D815D31329339300CDE422 /* flickr */; }; D3D815F4132933AB00CDE422 /* flickr in Resources */ = {isa = PBXBuildFile; fileRef = D3D815D31329339300CDE422 /* flickr */; }; D3D81758132A184300CDE422 /* libQtCore.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D81752132A184300CDE422 /* libQtCore.a */; }; @@ -77,7 +75,6 @@ D3CAA7C713264AAD008BB877 /* main.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = "<group>"; }; D3CAA7F613264F52008BB877 /* flickrdemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = flickrdemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.2.3.dylib; path = usr/lib/libz.1.2.3.dylib; sourceTree = SDKROOT; }; - D3CAA836132652E5008BB877 /* fonts */ = {isa = PBXFileReference; lastKnownFileType = folder; name = fonts; path = ../../../../../../lib/fonts; sourceTree = SOURCE_ROOT; }; D3D815D31329339300CDE422 /* flickr */ = {isa = PBXFileReference; lastKnownFileType = folder; name = flickr; path = ../../../../../../demos/declarative/flickr; sourceTree = SOURCE_ROOT; }; D3D81752132A184300CDE422 /* libQtCore.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtCore.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtCore.a"; sourceTree = SOURCE_ROOT; }; D3D81753132A184300CDE422 /* libQtDeclarative.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtDeclarative.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtDeclarative.a"; sourceTree = SOURCE_ROOT; }; @@ -173,7 +170,6 @@ isa = PBXGroup; children = ( D3D815D31329339300CDE422 /* flickr */, - D3CAA836132652E5008BB877 /* fonts */, 8D1107310486CEB800E47090 /* flickrdemo-Info.plist */, ); name = Resources; @@ -304,7 +300,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D3CAA88A132652E5008BB877 /* fonts in Resources */, D3D815F31329339300CDE422 /* flickr in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -313,7 +308,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D3CAA88B132652E5008BB877 /* fonts in Resources */, D3D815F4132933AB00CDE422 /* flickr in Resources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj b/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj index 1dd9b35..021eed2 100755 --- a/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj +++ b/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj @@ -37,8 +37,6 @@ D3CAA7F213264F52008BB877 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; D3CAA7FA13264F8A008BB877 /* libz.1.2.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */; }; D3CAA81113264FF0008BB877 /* libz.1.2.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */; }; - D3CAA88A132652E5008BB877 /* fonts in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA836132652E5008BB877 /* fonts */; }; - D3CAA88B132652E5008BB877 /* fonts in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA836132652E5008BB877 /* fonts */; }; D3CAA89113265310008BB877 /* qml in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA88E13265310008BB877 /* qml */; }; D3CAA89213265310008BB877 /* qml in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA88E13265310008BB877 /* qml */; }; D3D817B2132A2CFD00CDE422 /* libQtCore.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817AA132A2CFD00CDE422 /* libQtCore.a */; }; @@ -78,7 +76,6 @@ D3CAA7C713264AAD008BB877 /* main.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = "<group>"; }; D3CAA7F613264F52008BB877 /* qmltest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = qmltest.app; sourceTree = BUILT_PRODUCTS_DIR; }; D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.2.3.dylib; path = usr/lib/libz.1.2.3.dylib; sourceTree = SDKROOT; }; - D3CAA836132652E5008BB877 /* fonts */ = {isa = PBXFileReference; lastKnownFileType = folder; name = fonts; path = ../../../../../../lib/fonts; sourceTree = SOURCE_ROOT; }; D3CAA88E13265310008BB877 /* qml */ = {isa = PBXFileReference; lastKnownFileType = folder; path = qml; sourceTree = SOURCE_ROOT; }; D3D817AA132A2CFD00CDE422 /* libQtCore.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtCore.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtCore.a"; sourceTree = SOURCE_ROOT; }; D3D817AB132A2CFD00CDE422 /* libQtDeclarative.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtDeclarative.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtDeclarative.a"; sourceTree = SOURCE_ROOT; }; @@ -175,7 +172,6 @@ isa = PBXGroup; children = ( D3CAA88E13265310008BB877 /* qml */, - D3CAA836132652E5008BB877 /* fonts */, 8D1107310486CEB800E47090 /* qmltest-Info.plist */, ); name = Resources; @@ -306,7 +302,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D3CAA88A132652E5008BB877 /* fonts in Resources */, D3CAA89113265310008BB877 /* qml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -315,7 +310,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D3CAA88B132652E5008BB877 /* fonts in Resources */, D3CAA89213265310008BB877 /* qml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; -- cgit v0.12 From 1a8a36eb6b6df9e2550b5eaa4606f2d411fd4294 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Date: Wed, 24 Aug 2011 09:13:45 +0200 Subject: Fix justification of RTL text Since the trailing space is included in the QScriptLine, it may affect the positions of preceding script items when the text is RTL. The best solution for this would be to disregard the trailing space in the layout process, or somehow make it have an advance of 0 so it doesn't affect the layout. However, to minimize the impact of the change, and to be consistent with previous work arounds such as bf992df6434fc37715f728ca09601c5567dd83c9, we simply include the trailing (visually leading) space in the justification pass for now. Task-number: QTBUG-20920 Reviewed-by: Lars --- src/gui/text/qtextengine.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 9f148ee..aa4a20d 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -2087,7 +2087,8 @@ void QTextEngine::justify(const QScriptLine &line) } } - QFixed need = line.width - line.textWidth; + QFixed leading = leadingSpaceWidth(line); + QFixed need = line.width - line.textWidth - leading; if (need < 0) { // line overflows already! const_cast<QScriptLine &>(line).justified = true; -- cgit v0.12 From 00561c990b6a55de616267637fd3e772d4f10efe Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Date: Wed, 24 Aug 2011 09:41:29 +0200 Subject: Revert "Include trailing space width in RTL text line width" This reverts commit 2fa986aa670bee0fafb30241f40bb3556594e32b. The fix was wrong. Use the IncludeTrailingSpaces flag if you want to include the trailing spaces in the text width. Reviewed-by: Jiang Jiang --- src/gui/text/qtextlayout.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 515915a..4fd6ddf 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -1928,12 +1928,8 @@ found: if (line.textWidth > 0 && item < eng->layoutData->items.size()) eng->maxWidth += lbh.spaceData.textWidth; - // In the latter case, text are drawn with trailing spaces at the beginning - // of a line, so the naturalTextWidth should contain the space width - if ((eng->option.flags() & QTextOption::IncludeTrailingSpaces) || - (line.width == QFIXED_MAX && eng->isRightToLeft())) { + if (eng->option.flags() & QTextOption::IncludeTrailingSpaces) line.textWidth += lbh.spaceData.textWidth; - } if (lbh.spaceData.length) { line.length += lbh.spaceData.length; line.hasTrailingSpaces = true; -- cgit v0.12 From f9a2b1618ef67f6be0f986b24e75d138d20ee6c7 Mon Sep 17 00:00:00 2001 From: Eike Ziller <eike.ziller@nokia.com> Date: Mon, 22 Aug 2011 12:12:59 +0200 Subject: Fix QGLGlyphCache for Open GL ES (1). When resizing the font texture the code was using glGetTexImage which is not available on Open GL ES. We need to cache the font texture data, and draw the glyphs on it in addition, so we can copy the data when resizing the texture size. --- src/opengl/qpaintengine_opengl.cpp | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/opengl/qpaintengine_opengl.cpp b/src/opengl/qpaintengine_opengl.cpp index 71ed690..0f33cab 100644 --- a/src/opengl/qpaintengine_opengl.cpp +++ b/src/opengl/qpaintengine_opengl.cpp @@ -4536,11 +4536,14 @@ struct QGLGlyphCoord { }; struct QGLFontTexture { + QGLFontTexture() : data(0) { } + ~QGLFontTexture() { free(data); } int x_offset; // glyph offset within the int y_offset; GLuint texture; int width; int height; + uchar *data; }; typedef QHash<glyph_t, QGLGlyphCoord*> QGLGlyphHash; @@ -4563,7 +4566,7 @@ public: QGLGlyphCoord *lookup(QFontEngine *, glyph_t); void cacheGlyphs(QGLContext *, QFontEngine *, glyph_t *glyphs, int numGlyphs); void cleanCache(); - void allocTexture(int width, int height, GLuint texture); + void allocTexture(QGLFontTexture *); public slots: void cleanupContext(const QGLContext *); @@ -4681,19 +4684,18 @@ void QGLGlyphCache::cleanCache() qt_context_cache.clear(); } -void QGLGlyphCache::allocTexture(int width, int height, GLuint texture) +void QGLGlyphCache::allocTexture(QGLFontTexture *font_tex) { - uchar *tex_data = (uchar *) malloc(width*height*2); - memset(tex_data, 0, width*height*2); - glBindTexture(GL_TEXTURE_2D, texture); + font_tex->data = (uchar *) malloc(font_tex->width*font_tex->height*2); + memset(font_tex->data, 0, font_tex->width*font_tex->height*2); + glBindTexture(GL_TEXTURE_2D, font_tex->texture); #ifndef QT_OPENGL_ES glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE8_ALPHA8, - width, height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, tex_data); + font_tex->width, font_tex->height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, font_tex->data); #else glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, - width, height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, tex_data); + font_tex->width, font_tex->height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, font_tex->data); #endif - free(tex_data); } #if 0 @@ -4777,13 +4779,13 @@ void QGLGlyphCache::cacheGlyphs(QGLContext *context, QFontEngine *fontEngine, Q_ASSERT(max_tex_size > 0); if (tex_width > max_tex_size) tex_width = max_tex_size; - allocTexture(tex_width, tex_height, font_texture); font_tex = new QGLFontTexture; font_tex->texture = font_texture; font_tex->x_offset = x_margin; font_tex->y_offset = y_margin; font_tex->width = tex_width; font_tex->height = tex_height; + allocTexture(font_tex); // qDebug() << "new font tex - width:" << tex_width << "height:"<< tex_height // << hex << "tex id:" << font_tex->texture << "key:" << font_key << "num cached:" << qt_font_textures.size(); qt_font_textures.insert(font_key, font_tex); @@ -4806,21 +4808,19 @@ void QGLGlyphCache::cacheGlyphs(QGLContext *context, QFontEngine *fontEngine, font_tex->y_offset += strip_height; if (font_tex->y_offset >= font_tex->height) { // get hold of the old font texture - uchar *old_tex_data = (uchar *) malloc(font_tex->width*font_tex->height*2); + uchar *old_tex_data = font_tex->data; int old_tex_height = font_tex->height; -#ifndef QT_OPENGL_ES - glGetTexImage(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, old_tex_data); -#endif // realloc a larger texture glDeleteTextures(1, &font_tex->texture); glGenTextures(1, &font_tex->texture); font_tex->height = qt_next_power_of_two(font_tex->height + strip_height); - allocTexture(font_tex->width, font_tex->height, font_tex->texture); + allocTexture(font_tex); // write back the old texture data glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, font_tex->width, old_tex_height, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, old_tex_data); + memcpy(font_tex->data, old_tex_data, font_tex->width*old_tex_height*2); free(old_tex_data); // update the texture coords and the y offset for the existing glyphs in @@ -4868,8 +4868,10 @@ void QGLGlyphCache::cacheGlyphs(QGLContext *context, QFontEngine *fontEngine, } #endif glyph_im = glyph_im.convertToFormat(QImage::Format_Indexed8); + int cacheLineStart = (font_tex->x_offset + font_tex->y_offset*font_tex->width)*2; for (int y=0; y<glyph_im.height(); ++y) { uchar *s = (uchar *) glyph_im.scanLine(y); + int lineStart = idx; for (int x=0; x<glyph_im.width(); ++x) { uchar alpha = is8BitGray ? *s : qAlpha(glyph_im.color(*s)); tex_data[idx] = alpha; @@ -4879,6 +4881,9 @@ void QGLGlyphCache::cacheGlyphs(QGLContext *context, QFontEngine *fontEngine, } if (glyph_im.width()%2 != 0) idx += 2; + // update cache + memcpy(font_tex->data+cacheLineStart, tex_data+lineStart, glyph_width*2); + cacheLineStart += font_tex->width*2; } glTexSubImage2D(GL_TEXTURE_2D, 0, font_tex->x_offset, font_tex->y_offset, glyph_width, glyph_im.height(), @@ -4950,7 +4955,7 @@ void QOpenGLPaintEngine::drawStaticTextItem(QStaticTextItem *textItem) glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); bool antialias = !(textItem->fontEngine()->fontDef.styleStrategy & QFont::NoAntialias) - && (d->matrix.type() > QTransform::TxTranslate); + && (d->matrix.type() > QTransform::TxTranslate); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, antialias ? GL_LINEAR : GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, antialias ? GL_LINEAR : GL_NEAREST); -- cgit v0.12 From 4eb50fbbf414103fb2f9dfb8260f4db5d61190c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Niemel=C3=A4?= <marko.a.niemela@nokia.com> Date: Wed, 24 Aug 2011 15:29:17 +0300 Subject: Fix for qml1shaderplugin GPU resource handling on Symbian qml1shaderplugin now automatically recovers from situations when GL context is destroyed and related FBOs and shaderprograms become invalid. Additionally the shaderprograms are created lazily so that no GPU memory is used if items are not visible. Task-number: QTBUG-20724 QTBUG-20736 Reviewed-by: Jani Hautakangas --- src/imports/shaders/shadereffectitem.cpp | 110 ++++++++++++++++++++++------- src/imports/shaders/shadereffectitem.h | 4 +- src/imports/shaders/shadereffectsource.cpp | 43 ++++++----- src/imports/shaders/shadereffectsource.h | 3 +- 4 files changed, 116 insertions(+), 44 deletions(-) mode change 100644 => 100755 src/imports/shaders/shadereffectitem.cpp diff --git a/src/imports/shaders/shadereffectitem.cpp b/src/imports/shaders/shadereffectitem.cpp old mode 100644 new mode 100755 index 056581c..04c81f5 --- a/src/imports/shaders/shadereffectitem.cpp +++ b/src/imports/shaders/shadereffectitem.cpp @@ -199,8 +199,13 @@ Rectangle { */ +#ifdef Q_OS_SYMBIAN +#define OBSERVE_GL_CONTEXT_LOSS 1 +#endif + ShaderEffectItem::ShaderEffectItem(QDeclarativeItem *parent) : QDeclarativeItem(parent) + , m_program(0) , m_meshResolution(1, 1) , m_geometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4) , m_blending(true) @@ -214,15 +219,21 @@ ShaderEffectItem::ShaderEffectItem(QDeclarativeItem *parent) , m_hasShaderPrograms(false) , m_mirrored(false) , m_defaultVertexShader(true) + , m_contextObserver(0) { setFlag(QGraphicsItem::ItemHasNoContents, false); connect(this, SIGNAL(visibleChanged()), this, SLOT(handleVisibilityChange())); m_active = isVisible(); + +#ifndef OBSERVE_GL_CONTEXT_LOSS + m_program = new QGLShaderProgram(this); +#endif } ShaderEffectItem::~ShaderEffectItem() { reset(); + delete m_contextObserver; } @@ -422,10 +433,38 @@ void ShaderEffectItem::renderEffect(QPainter *painter, const QMatrix4x4 &matrix) if (!painter || !painter->device()) return; - if (!m_program.isLinked() || m_program_dirty) +#ifdef OBSERVE_GL_CONTEXT_LOSS + QGLContext *context = const_cast <QGLContext*> (QGLContext::currentContext()); + if (!m_program || !m_contextObserver || !m_contextObserver->isValid()) { + // Context has changed, re-create QGLShaderProgram + if (context) { + delete m_program; + m_program = 0; + + delete m_contextObserver; + m_contextObserver = 0; + + m_program = new QGLShaderProgram(this); + m_contextObserver = new QGLFramebufferObject(QSize(2,2)); + + if (!m_contextObserver || !m_program) { + delete m_program; + m_program = 0; + delete m_contextObserver; + m_contextObserver = 0; + qWarning() << "ShaderEffectItem::renderEffect - Creating QGLShaderProgram or QGLFrameBufferObject failed!"; + } + } + } +#endif + + if (!m_program) + return; + + if (!m_program->isLinked() || m_program_dirty) updateShaderProgram(); - m_program.bind(); + m_program->bind(); QMatrix4x4 combinedMatrix; combinedMatrix.scale(2.0 / painter->device()->width(), -2.0 / painter->device()->height(), 1.0); @@ -434,7 +473,7 @@ void ShaderEffectItem::renderEffect(QPainter *painter, const QMatrix4x4 &matrix) updateEffectState(combinedMatrix); for (int i = 0; i < m_attributeNames.size(); ++i) { - m_program.enableAttributeArray(m_geometry.attributes()[i].position); + m_program->enableAttributeArray(m_geometry.attributes()[i].position); } bindGeometry(); @@ -472,11 +511,14 @@ void ShaderEffectItem::renderEffect(QPainter *painter, const QMatrix4x4 &matrix) glDisable(GL_DEPTH_TEST); for (int i = 0; i < m_attributeNames.size(); ++i) - m_program.disableAttributeArray(m_geometry.attributes()[i].position); + m_program->disableAttributeArray(m_geometry.attributes()[i].position); } void ShaderEffectItem::updateEffectState(const QMatrix4x4 &matrix) { + if (!m_program) + return; + for (int i = m_sources.size() - 1; i >= 0; --i) { const ShaderEffectItem::SourceData &source = m_sources.at(i); if (!source.source) @@ -487,10 +529,10 @@ void ShaderEffectItem::updateEffectState(const QMatrix4x4 &matrix) } if (m_respectsOpacity) - m_program.setUniformValue("qt_Opacity", static_cast<float> (effectiveOpacity())); + m_program->setUniformValue("qt_Opacity", static_cast<float> (effectiveOpacity())); if (m_respectsMatrix){ - m_program.setUniformValue("qt_ModelViewProjectionMatrix", matrix); + m_program->setUniformValue("qt_ModelViewProjectionMatrix", matrix); } QSet<QByteArray>::const_iterator it; @@ -500,37 +542,37 @@ void ShaderEffectItem::updateEffectState(const QMatrix4x4 &matrix) switch (v.type()) { case QVariant::Color: - m_program.setUniformValue(name.constData(), qvariant_cast<QColor>(v)); + m_program->setUniformValue(name.constData(), qvariant_cast<QColor>(v)); break; case QVariant::Double: - m_program.setUniformValue(name.constData(), (float) qvariant_cast<double>(v)); + m_program->setUniformValue(name.constData(), (float) qvariant_cast<double>(v)); break; case QVariant::Transform: - m_program.setUniformValue(name.constData(), qvariant_cast<QTransform>(v)); + m_program->setUniformValue(name.constData(), qvariant_cast<QTransform>(v)); break; case QVariant::Int: - m_program.setUniformValue(name.constData(), v.toInt()); + m_program->setUniformValue(name.constData(), GLint(v.toInt())); break; case QVariant::Bool: - m_program.setUniformValue(name.constData(), GLint(v.toBool())); + m_program->setUniformValue(name.constData(), GLint(v.toBool())); break; case QVariant::Size: case QVariant::SizeF: - m_program.setUniformValue(name.constData(), v.toSizeF()); + m_program->setUniformValue(name.constData(), v.toSizeF()); break; case QVariant::Point: case QVariant::PointF: - m_program.setUniformValue(name.constData(), v.toPointF()); + m_program->setUniformValue(name.constData(), v.toPointF()); break; case QVariant::Rect: case QVariant::RectF: { QRectF r = v.toRectF(); - m_program.setUniformValue(name.constData(), r.x(), r.y(), r.width(), r.height()); + m_program->setUniformValue(name.constData(), r.x(), r.y(), r.width(), r.height()); } break; case QVariant::Vector3D: - m_program.setUniformValue(name.constData(), qvariant_cast<QVector3D>(v)); + m_program->setUniformValue(name.constData(), qvariant_cast<QVector3D>(v)); break; default: break; @@ -558,6 +600,9 @@ static inline int size_of_type(GLenum type) void ShaderEffectItem::bindGeometry() { + if (!m_program) + return; + char const *const *attrNames = m_attributeNames.constData(); int offset = 0; for (int j = 0; j < m_attributeNames.size(); ++j) { @@ -574,7 +619,7 @@ void ShaderEffectItem::bindGeometry() if (normalize) qWarning() << "ShaderEffectItem::bindGeometry() - non supported attribute type!"; - m_program.setAttributeArray(a.position, (GLfloat*) (((char*) m_geometry.vertexData()) + offset), a.tupleSize, m_geometry.stride()); + m_program->setAttributeArray(a.position, (GLfloat*) (((char*) m_geometry.vertexData()) + offset), a.tupleSize, m_geometry.stride()); //glVertexAttribPointer(a.position, a.tupleSize, a.type, normalize, m_geometry.stride(), (char *) m_geometry.vertexData() + offset); offset += a.tupleSize * size_of_type(a.type); } @@ -657,6 +702,16 @@ void ShaderEffectItem::setActive(bool enable) } } + // QGLShaderProgram is deleted when not active (to minimize GPU memory usage). +#ifdef OBSERVE_GL_CONTEXT_LOSS + if (!m_active && m_program) { + delete m_program; + m_program = 0; + delete m_contextObserver; + m_contextObserver = 0; + } +#endif + emit activeChanged(); markDirty(); } @@ -776,7 +831,9 @@ void ShaderEffectItem::reset() { disconnectPropertySignals(); - m_program.removeAllShaders(); + if (m_program) + m_program->removeAllShaders(); + m_attributeNames.clear(); m_uniformNames.clear(); for (int i = 0; i < m_sources.size(); ++i) { @@ -821,6 +878,9 @@ void ShaderEffectItem::updateProperties() void ShaderEffectItem::updateShaderProgram() { + if (!m_program) + return; + QString vertexCode = m_vertex_code; QString fragmentCode = m_fragment_code; @@ -830,16 +890,16 @@ void ShaderEffectItem::updateShaderProgram() if (fragmentCode.isEmpty()) fragmentCode = QString::fromLatin1(qt_default_fragment_code); - m_program.addShaderFromSourceCode(QGLShader::Vertex, vertexCode); - m_program.addShaderFromSourceCode(QGLShader::Fragment, fragmentCode); + m_program->addShaderFromSourceCode(QGLShader::Vertex, vertexCode); + m_program->addShaderFromSourceCode(QGLShader::Fragment, fragmentCode); for (int i = 0; i < m_attributeNames.size(); ++i) { - m_program.bindAttributeLocation(m_attributeNames.at(i), m_geometry.attributes()[i].position); + m_program->bindAttributeLocation(m_attributeNames.at(i), m_geometry.attributes()[i].position); } - if (!m_program.link()) { + if (!m_program->link()) { qWarning("ShaderEffectItem: Shader compilation failed:"); - qWarning() << m_program.log(); + qWarning() << m_program->log(); } if (!m_attributeNames.contains(qt_postion_attribute_name)) @@ -849,10 +909,10 @@ void ShaderEffectItem::updateShaderProgram() if (!m_respectsMatrix) qWarning("ShaderEffectItem: Missing reference to \'qt_ModelViewProjectionMatrix\'."); - if (m_program.isLinked()) { - m_program.bind(); + if (m_program->isLinked()) { + m_program->bind(); for (int i = 0; i < m_sources.size(); ++i) - m_program.setUniformValue(m_sources.at(i).name.constData(), i); + m_program->setUniformValue(m_sources.at(i).name.constData(), (GLint) i); } m_program_dirty = false; diff --git a/src/imports/shaders/shadereffectitem.h b/src/imports/shaders/shadereffectitem.h index aebe897..6c225a2 100644 --- a/src/imports/shaders/shadereffectitem.h +++ b/src/imports/shaders/shadereffectitem.h @@ -115,7 +115,7 @@ private: private: QString m_fragment_code; QString m_vertex_code; - QGLShaderProgram m_program; + QGLShaderProgram* m_program; QVector<const char *> m_attributeNames; QSet<QByteArray> m_uniformNames; QSize m_meshResolution; @@ -143,6 +143,8 @@ private: bool m_hasShaderPrograms : 1; bool m_mirrored : 1; bool m_defaultVertexShader : 1; + + QGLFramebufferObject* m_contextObserver; }; QT_END_HEADER diff --git a/src/imports/shaders/shadereffectsource.cpp b/src/imports/shaders/shadereffectsource.cpp index 6210c41..21d814a 100644 --- a/src/imports/shaders/shadereffectsource.cpp +++ b/src/imports/shaders/shadereffectsource.cpp @@ -170,15 +170,11 @@ void ShaderEffectSource::setSourceRect(const QRectF &rect) return; m_sourceRect = rect; updateSizeAndTexture(); - updateBackbuffer(); emit sourceRectChanged(); emit repaintRequired(); - if (m_sourceItem) { - ShaderEffect* effect = qobject_cast<ShaderEffect*> (m_sourceItem->graphicsEffect()); - if (effect) - effect->m_changed = true; - } + m_dirtyTexture = true; + markSourceItemDirty(); } /*! @@ -207,11 +203,8 @@ void ShaderEffectSource::setTextureSize(const QSize &size) emit textureSizeChanged(); emit repaintRequired(); - if (m_sourceItem) { - ShaderEffect* effect = qobject_cast<ShaderEffect*> (m_sourceItem->graphicsEffect()); - if (effect) - effect->m_changed = true; - } + m_dirtyTexture = true; + markSourceItemDirty(); } /*! @@ -294,8 +287,10 @@ void ShaderEffectSource::setWrapMode(WrapMode mode) return; m_wrapMode = mode; - updateBackbuffer(); emit wrapModeChanged(); + + m_dirtyTexture = true; + markSourceItemDirty(); } /*! @@ -314,7 +309,7 @@ void ShaderEffectSource::grab() emit repaintRequired(); } -void ShaderEffectSource::bind() const +void ShaderEffectSource::bind() { GLint filtering = smooth() ? GL_LINEAR : GL_NEAREST; GLuint hwrap = (m_wrapMode == Repeat || m_wrapMode == RepeatHorizontally) ? GL_REPEAT : GL_CLAMP_TO_EDGE; @@ -323,9 +318,13 @@ void ShaderEffectSource::bind() const #if !defined(QT_OPENGL_ES_2) glEnable(GL_TEXTURE_2D); #endif - if (m_fbo) { + + if (m_fbo && m_fbo->isValid()) { glBindTexture(GL_TEXTURE_2D, m_fbo->texture()); } else { + m_dirtyTexture = true; + emit repaintRequired(); + markSourceItemDirty(); glBindTexture(GL_TEXTURE_2D, 0); } @@ -354,7 +353,7 @@ void ShaderEffectSource::derefFromEffectItem() void ShaderEffectSource::updateBackbuffer() { - if (!m_sourceItem) + if (!m_sourceItem || !QGLContext::currentContext()) return; // Multisampling is not (for now) supported. @@ -370,7 +369,7 @@ void ShaderEffectSource::updateBackbuffer() if (!m_fbo) { m_fbo = new ShaderEffectBuffer(size, format); } else { - if (m_fbo->size() != size || m_fbo->format().internalTextureFormat() != GLenum(m_format)) { + if (!m_fbo->isValid() || m_fbo->size() != size || m_fbo->format().internalTextureFormat() != GLenum(m_format)) { delete m_fbo; m_fbo = 0; m_fbo = new ShaderEffectBuffer(size, format); @@ -397,6 +396,16 @@ void ShaderEffectSource::markSourceSizeDirty() emit repaintRequired(); } +void ShaderEffectSource::markSourceItemDirty() +{ + m_dirtyTexture = true; + if (m_sourceItem) { + ShaderEffect* effect = qobject_cast<ShaderEffect*> (m_sourceItem->graphicsEffect()); + if (effect) + effect->m_changed = true; + } +} + void ShaderEffectSource::updateSizeAndTexture() { if (m_sourceItem) { @@ -407,7 +416,7 @@ void ShaderEffectSource::updateSizeAndTexture() size.setWidth(1); if (size.height() < 1) size.setHeight(1); - if (m_fbo && m_fbo->size() != size) { + if (m_fbo && (m_fbo->size() != size || !m_fbo->isValid())) { delete m_fbo; m_fbo = 0; delete m_multisampledFbo; diff --git a/src/imports/shaders/shadereffectsource.h b/src/imports/shaders/shadereffectsource.h index 0f03a6a..af8a815 100644 --- a/src/imports/shaders/shadereffectsource.h +++ b/src/imports/shaders/shadereffectsource.h @@ -99,7 +99,7 @@ public: void setWrapMode(WrapMode mode); bool isActive() const { return m_refs; } - void bind() const; + void bind(); void refFromEffectItem(); void derefFromEffectItem(); void updateBackbuffer(); @@ -124,6 +124,7 @@ Q_SIGNALS: public Q_SLOTS: void markSceneGraphDirty(); void markSourceSizeDirty(); + void markSourceItemDirty(); private: void updateSizeAndTexture(); -- cgit v0.12 From c691fc126a61a6153628a176d4375dd7ac76c0e1 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Thu, 25 Aug 2011 11:11:28 +0300 Subject: QS60Style omits drawing theme background in some Symbian SDKs Latest internal RnD releases have upgraded Symbian version to 5.4. As QS60Style was not aware of this, all the textures that didn't define any version information (i.e. available in all versions) were not drawn at all. Task-number: QT-5176 Reviewed-by: Miikka Heikkinen --- src/gui/styles/qs60style_s60.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 67181af..f1cf2f6 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -91,6 +91,7 @@ enum TSupportRelease { ES60_5_1 = 0x0008, ES60_5_2 = 0x0010, ES60_5_3 = 0x0020, + ES60_5_4 = 0x0040, ES60_3_X = ES60_3_1 | ES60_3_2, // Releases before Symbian Foundation ES60_PreSF = ES60_3_1 | ES60_3_2 | ES60_5_0, @@ -98,8 +99,10 @@ enum TSupportRelease { ES60_Pre52 = ES60_3_1 | ES60_3_2 | ES60_5_0 | ES60_5_1, // Releases before S60 5.3 ES60_Pre53 = ES60_3_1 | ES60_3_2 | ES60_5_0 | ES60_5_1 | ES60_5_2, + // Releases before S60 5.4 + ES60_Pre54 = ES60_3_1 | ES60_3_2 | ES60_5_0 | ES60_5_1 | ES60_5_2 | ES60_5_3, // Add all new releases here - ES60_All = ES60_3_1 | ES60_3_2 | ES60_5_0 | ES60_5_1 | ES60_5_2 | ES60_5_3 + ES60_All = ES60_3_1 | ES60_3_2 | ES60_5_0 | ES60_5_1 | ES60_5_2 | ES60_5_3 | ES60_5_4 }; typedef struct { @@ -1264,7 +1267,8 @@ bool QS60StyleModeSpecifics::checkSupport(const int supportedRelease) (currentRelease == QSysInfo::SV_S60_5_0 && supportedRelease & ES60_5_0) || (currentRelease == QSysInfo::SV_S60_5_1 && supportedRelease & ES60_5_1) || (currentRelease == QSysInfo::SV_S60_5_2 && supportedRelease & ES60_5_2) || - (currentRelease == QSysInfo::SV_S60_5_3 && supportedRelease & ES60_5_3) ); + (currentRelease == QSysInfo::SV_S60_5_3 && supportedRelease & ES60_5_3) || + (currentRelease == QSysInfo::SV_S60_5_4 && supportedRelease & ES60_5_4) ); } TAknsItemID QS60StyleModeSpecifics::partSpecificThemeId(int part) -- cgit v0.12 From c1491c356f3cca92a359468ce37f38bc1873eec4 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Thu, 25 Aug 2011 18:13:44 +1000 Subject: Fix memory leak in ListModel custom parser ModelNodes created by the parser for ListElement definitions were not deleted. Task-number: QTBUG-21084 Reviewed-by: Michael Brasser --- src/declarative/util/qdeclarativelistmodel.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp index 28c2df6..9604117 100644 --- a/src/declarative/util/qdeclarativelistmodel.cpp +++ b/src/declarative/util/qdeclarativelistmodel.cpp @@ -784,6 +784,7 @@ void QDeclarativeListModelParser::setCustomData(QObject *obj, const QByteArray & QDeclarativeListModel *rv = static_cast<QDeclarativeListModel *>(obj); ModelNode *root = new ModelNode(rv->m_nested); + rv->m_nested->m_ownsRoot = true; rv->m_nested->_root = root; QStack<ModelNode *> nodes; nodes << root; -- cgit v0.12 From 338346ceae99ec0d8f7227af12333d63393992be Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Thu, 25 Aug 2011 14:21:30 +0300 Subject: Crash when creating scroll bar skin graphics on S60 (debug only) When fetching bitmap graphics from native without fallback information, do not define fallback-mif file, since native side uses ASSERT_DEBUG to crash the client if file info exists, but bitmap ID is not defined. This started crashing when root theme removed default scrollbar graphics from its content for Belle release. Task-number: QTBUG-15993 Reviewed-by: Miikka Heikkinen --- src/gui/styles/qs60style_s60.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index f1cf2f6..2051362 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -711,7 +711,7 @@ QPixmap QS60StyleModeSpecifics::colorSkinnedGraphicsLX( colorIndex, icon, iconMask, - AknIconUtils::AvkonIconFileName(), + (fallbackGraphicID != KErrNotFound ? AknIconUtils::AvkonIconFileName() : KNullDesC), fallbackGraphicID, fallbackGraphicsMaskID, defaultColor); @@ -949,7 +949,7 @@ QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX( skinId, icon, iconMask, - AknIconUtils::AvkonIconFileName(), + (fallbackGraphicID != KErrNotFound ? AknIconUtils::AvkonIconFileName() : KNullDesC), fallbackGraphicID , fallbackGraphicsMaskID); @@ -1043,7 +1043,7 @@ QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX( KAknsIIDDefault, //animation is not themed, lets force fallback graphics animationFrame, frameMask, - AknIconUtils::AvkonIconFileName(), + (fallbackGraphicID != KErrNotFound ? AknIconUtils::AvkonIconFileName() : KNullDesC), fallbackGraphicID , fallbackGraphicsMaskID); } -- cgit v0.12 From e9b3c429337a3ddc144aa1f39d40cd8dd151a566 Mon Sep 17 00:00:00 2001 From: peterpa <peter.azmanov@gmail.com> Date: Thu, 25 Aug 2011 15:04:48 +0200 Subject: QWindowsStyle: fix bug in eventFilter on KeyPressed event with alt pressed: incorrect work with list Merge-request: 2664 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com> --- src/gui/styles/qwindowsstyle.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/styles/qwindowsstyle.cpp b/src/gui/styles/qwindowsstyle.cpp index c099273..9732c7e 100644 --- a/src/gui/styles/qwindowsstyle.cpp +++ b/src/gui/styles/qwindowsstyle.cpp @@ -177,11 +177,14 @@ bool QWindowsStyle::eventFilter(QObject *o, QEvent *e) // Alt has been pressed - find all widgets that care QList<QWidget *> l = widget->findChildren<QWidget *>(); - for (int pos=0 ; pos < l.size() ; ++pos) { + for (int pos=0 ; pos < l.size() ;) { QWidget *w = l.at(pos); if (w->isWindow() || !w->isVisible() || - w->style()->styleHint(SH_UnderlineShortcut, 0, w)) + w->style()->styleHint(SH_UnderlineShortcut, 0, w)) { l.removeAt(pos); + continue; + } + pos++; } // Update states before repainting d->seenAlt.append(widget); -- cgit v0.12 From 520dc46f9fad5f6adba9b71cebd007c04123dd30 Mon Sep 17 00:00:00 2001 From: Eike Ziller <eike.ziller@nokia.com> Date: Thu, 25 Aug 2011 13:03:42 +0200 Subject: uikit: update README --- src/plugins/platforms/uikit/README | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/plugins/platforms/uikit/README b/src/plugins/platforms/uikit/README index 795e72a..a8031e6 100644 --- a/src/plugins/platforms/uikit/README +++ b/src/plugins/platforms/uikit/README @@ -7,8 +7,8 @@ There have no tests been run whatsoever. * Open GL ES 1/2 based backend * Single touch -* Text/font drawing using font shipped with application -* Text input (Opening/closing software input panel. +* Text/font drawing using system fonts (CoreText) +* Text input (Opening/closing software input panel Application has to perform necessary layout changes itself.) * Initial showing/hiding of status bar (as defined in the Info.plist) * Interface orientations as defined in the Info.plist of the application @@ -21,7 +21,16 @@ Building/Deploying the application has to be done in Xcode. You need to generate necessary moc_ files in advance and add these to the Xcode project. More details on the Xcode setup see below. -1) Build Qt +1) Known Issues + +* Console message + "QEventDispatcherUNIX: internal error, wakeUps.testAndSetRelease(1, 0) failed!" + seems to appear sometimes for some people for unknown reasons and + unknown effect +* JavaScript XmlHttpRequest doesn't work reliably even though networking + in general seems to + +2) Build Qt The example Xcode project in the examples subdirectory requires that you do shadow builds of Qt in qt-lighthouse-ios-simulator and qt-lighthouse-ios-device directories @@ -43,7 +52,7 @@ Device: ------- configure -qpa -xplatform qpa/macx-iphonedevice-g++ -arch armv7 -no-neon -developer-build -release -opengl es2 -no-accessibility -no-qt3support -no-multimedia -no-phonon-backend -no-webkit -no-scripttools -no-openssl -no-sql-mysql -no-sql-odbc -no-cups -no-iconv -no-dbus -static -nomake tools -nomake demos -nomake docs -nomake examples -nomake translations -2) XCode setup: +3) XCode setup: - there are examples in the examples subdirectory of the platform plugin - to create something fresh do something like: - Xcode: Create a "View-based Appplication" @@ -64,5 +73,5 @@ configure -qpa -xplatform qpa/macx-iphonedevice-g++ -arch armv7 -no-neon -develo and call Phonon::Factory::setBackend(qt_plugin_instance_phonon_av()); Link to libphonon and to plugins/phonon/phonon_av -3) Done: Build and Run. +4) Done: Build and Run. -- cgit v0.12 From 41da349eb2bf25dba633578068b9bf2a7e7a6e24 Mon Sep 17 00:00:00 2001 From: Eike Ziller <eike.ziller@nokia.com> Date: Thu, 25 Aug 2011 12:33:08 +0200 Subject: uikit: get rid of the "min 30fps" for event handling. This is actually not needed if done correctly. --- src/plugins/platforms/uikit/quikiteventloop.mm | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/plugins/platforms/uikit/quikiteventloop.mm b/src/plugins/platforms/uikit/quikiteventloop.mm index 7df7ec8..152a34a 100644 --- a/src/plugins/platforms/uikit/quikiteventloop.mm +++ b/src/plugins/platforms/uikit/quikiteventloop.mm @@ -67,7 +67,6 @@ - (id)initWithEventLoopIntegration:(QUIKitEventLoop *)integration; -- (void)processEvents; - (void)processEventsAndSchedule; @end @@ -160,17 +159,11 @@ return self; } -- (void)processEvents -{ - QPlatformEventLoopIntegration::processEvents(); -} - - (void)processEventsAndSchedule { QPlatformEventLoopIntegration::processEvents(); - qint64 nextTime = qMin((qint64)33, mIntegration->nextTimerEvent()); // at least 30fps NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; - NSDate *nextDate = [[NSDate date] dateByAddingTimeInterval:((double)nextTime/1000)]; + NSDate *nextDate = [[NSDate date] dateByAddingTimeInterval:((double)mIntegration->nextTimerEvent()/1000.)]; [mIntegration->mTimer setFireDate:nextDate]; [pool release]; } @@ -211,7 +204,7 @@ void QUIKitEventLoop::quitEventLoop() void QUIKitEventLoop::qtNeedsToProcessEvents() { - [mHelper performSelectorOnMainThread:@selector(processEvents) withObject:nil waitUntilDone:NO]; + [mHelper performSelectorOnMainThread:@selector(processEventsAndSchedule) withObject:nil waitUntilDone:NO]; } static UIReturnKeyType keyTypeForObject(QObject *obj) -- cgit v0.12 From 40600537c19962c8e0268b5d485afc304c3568ed Mon Sep 17 00:00:00 2001 From: Ademar de Souza Reis Jr <ademar.reis@openbossa.org> Date: Thu, 25 Aug 2011 14:38:12 -0300 Subject: Updated WebKit to 836fa24be73978fb292e954abb151fb46b1d97e0 --- src/3rdparty/webkit/.tag | 2 +- .../webkit/Source/JavaScriptCore/ChangeLog | 16 ++ .../Source/JavaScriptCore/wtf/text/StringImpl.cpp | 6 +- .../Source/JavaScriptCore/wtf/text/StringImpl.h | 4 +- .../Source/JavaScriptCore/wtf/text/WTFString.h | 2 +- src/3rdparty/webkit/Source/WebCore/ChangeLog | 243 +++++++++++++++++++++ .../webkit/Source/WebCore/CodeGenerators.pri | 2 + src/3rdparty/webkit/Source/WebCore/WebCore.exp.in | 6 +- src/3rdparty/webkit/Source/WebCore/WebCore.gypi | 11 + src/3rdparty/webkit/Source/WebCore/WebCore.pri | 7 +- src/3rdparty/webkit/Source/WebCore/WebCore.pro | 8 +- .../Source/WebCore/bindings/js/JSDOMWrapper.cpp | 7 +- .../Source/WebCore/bindings/js/JSDOMWrapper.h | 8 +- .../WebCore/bindings/js/JSImageDataCustom.cpp | 6 +- .../Source/WebCore/dom/ProcessingInstruction.cpp | 3 + .../webkit/Source/WebCore/dom/StyleElement.cpp | 9 + .../webkit/Source/WebCore/dom/StyleElement.h | 1 + .../WebCore/editing/InsertIntoTextNodeCommand.cpp | 10 +- .../webkit/Source/WebCore/editing/TextIterator.cpp | 114 ++++++++-- .../webkit/Source/WebCore/editing/TextIterator.h | 4 + .../Source/WebCore/editing/visible_units.cpp | 4 +- .../Source/WebCore/generated/JSInternals.cpp | 134 ++++++++++++ .../webkit/Source/WebCore/generated/JSInternals.h | 79 +++++++ .../webkit/Source/WebCore/html/HTMLLinkElement.cpp | 3 + .../Source/WebCore/html/HTMLStyleElement.cpp | 3 +- .../webkit/Source/WebCore/page/FocusController.cpp | 12 +- .../webkit/Source/WebCore/page/Settings.cpp | 2 + src/3rdparty/webkit/Source/WebCore/page/Settings.h | 8 + .../mac/WebVideoFullscreenHUDWindowController.mm | 2 +- .../WebCore/platform/qt/WebCoreSystemInterface.h | 11 + .../Source/WebCore/rendering/CounterNode.cpp | 43 ++++ .../webkit/Source/WebCore/rendering/RenderText.cpp | 76 ++++++- .../webkit/Source/WebCore/rendering/RenderText.h | 4 + .../webkit/Source/WebCore/svg/SVGStyleElement.cpp | 3 +- .../webkit/Source/WebCore/testing/Internals.cpp | 97 ++++++++ .../webkit/Source/WebCore/testing/Internals.h | 60 +++++ .../webkit/Source/WebCore/testing/Internals.idl | 31 +++ .../WebCore/testing/js/WebCoreTestSupport.cpp | 62 ++++++ .../Source/WebCore/testing/js/WebCoreTestSupport.h | 38 ++++ .../WebCore/testing/v8/WebCoreTestSupport.cpp | 62 ++++++ .../Source/WebCore/testing/v8/WebCoreTestSupport.h | 41 ++++ .../webkit/Source/WebKit/qt/Api/qwebsettings.cpp | 5 + src/3rdparty/webkit/Source/WebKit/qt/ChangeLog | 70 ++++++ src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro | 19 +- .../qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp | 42 ++++ .../qt/WebCoreSupport/DumpRenderTreeSupportQt.h | 1 + src/3rdparty/webkit/VERSION | 2 +- 47 files changed, 1312 insertions(+), 71 deletions(-) create mode 100644 src/3rdparty/webkit/Source/WebCore/generated/JSInternals.cpp create mode 100644 src/3rdparty/webkit/Source/WebCore/generated/JSInternals.h create mode 100644 src/3rdparty/webkit/Source/WebCore/testing/Internals.cpp create mode 100644 src/3rdparty/webkit/Source/WebCore/testing/Internals.h create mode 100644 src/3rdparty/webkit/Source/WebCore/testing/Internals.idl create mode 100644 src/3rdparty/webkit/Source/WebCore/testing/js/WebCoreTestSupport.cpp create mode 100644 src/3rdparty/webkit/Source/WebCore/testing/js/WebCoreTestSupport.h create mode 100644 src/3rdparty/webkit/Source/WebCore/testing/v8/WebCoreTestSupport.cpp create mode 100644 src/3rdparty/webkit/Source/WebCore/testing/v8/WebCoreTestSupport.h diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index b3cdc28..6ff8541 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -4277f8277b1daf3ec33c996f5a760ccd1113af4b +836fa24be73978fb292e954abb151fb46b1d97e0 diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog index 0c8c131..ce9eee0 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog +++ b/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog @@ -1,3 +1,19 @@ +2011-07-08 Chang Shu <cshu@webkit.org> + + Rename "makeSecure" to "fill" and remove the support for displaying last character + to avoid layering violatation. + https://bugs.webkit.org/show_bug.cgi?id=59114 + + Reviewed by Alexey Proskuryakov. + + * JavaScriptCore.exp: + * JavaScriptCore.order: + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::fill): + * wtf/text/StringImpl.h: + * wtf/text/WTFString.h: + (WTF::String::fill): + 2011-08-15 Gavin Barraclough <barraclough@apple.com> Crash accessing static property on sealed object diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/StringImpl.cpp b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/StringImpl.cpp index 17b4d7d..ea8770a 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/StringImpl.cpp +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/StringImpl.cpp @@ -270,17 +270,15 @@ PassRefPtr<StringImpl> StringImpl::upper() return newImpl.release(); } -PassRefPtr<StringImpl> StringImpl::secure(UChar character, LastCharacterBehavior behavior) +PassRefPtr<StringImpl> StringImpl::fill(UChar character) { if (!m_length) return this; UChar* data; RefPtr<StringImpl> newImpl = createUninitialized(m_length, data); - unsigned lastCharacterIndex = m_length - 1; - for (unsigned i = 0; i < lastCharacterIndex; ++i) + for (unsigned i = 0; i < m_length; ++i) data[i] = character; - data[lastCharacterIndex] = (behavior == ObscureLastCharacter) ? character : m_data[lastCharacterIndex]; return newImpl.release(); } diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/StringImpl.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/StringImpl.h index 81911b3..b0ec163 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/StringImpl.h +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/StringImpl.h @@ -284,9 +284,7 @@ public: PassRefPtr<StringImpl> lower(); PassRefPtr<StringImpl> upper(); - enum LastCharacterBehavior { ObscureLastCharacter, DisplayLastCharacter }; - - PassRefPtr<StringImpl> secure(UChar, LastCharacterBehavior = ObscureLastCharacter); + PassRefPtr<StringImpl> fill(UChar); PassRefPtr<StringImpl> foldCase(); PassRefPtr<StringImpl> stripWhiteSpace(); diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/WTFString.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/WTFString.h index b593d20..f29228b 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/WTFString.h +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/text/WTFString.h @@ -219,7 +219,7 @@ public: void makeLower() { if (m_impl) m_impl = m_impl->lower(); } void makeUpper() { if (m_impl) m_impl = m_impl->upper(); } - void makeSecure(UChar aChar) { if (m_impl) m_impl = m_impl->secure(aChar); } + void fill(UChar c) { if (m_impl) m_impl = m_impl->fill(c); } void truncate(unsigned len); void remove(unsigned pos, int len = 1); diff --git a/src/3rdparty/webkit/Source/WebCore/ChangeLog b/src/3rdparty/webkit/Source/WebCore/ChangeLog index 97db9dd..98af823 100644 --- a/src/3rdparty/webkit/Source/WebCore/ChangeLog +++ b/src/3rdparty/webkit/Source/WebCore/ChangeLog @@ -1,3 +1,246 @@ +2011-08-23 Chang Shu <cshu@webkit.org> + + Added support for momentarily revealing last typed character in password input. + Code change was partially based on Apple's iOS code and Samuel Nevala's work. + https://bugs.webkit.org/show_bug.cgi?id=32509 + + Reviewed by Alexey Proskuryakov. + + * editing/InsertIntoTextNodeCommand.cpp: + (WebCore::InsertIntoTextNodeCommand::doApply): + * rendering/RenderText.cpp: + (WebCore::SecureTextTimer::SecureTextTimer): + (WebCore::SecureTextTimer::restartWithNewText): + (WebCore::SecureTextTimer::invalidate): + (WebCore::SecureTextTimer::lastTypedCharacterOffset): + (WebCore::SecureTextTimer::fired): + (WebCore::RenderText::willBeDestroyed): + (WebCore::RenderText::setTextInternal): + (WebCore::RenderText::secureText): + (WebCore::RenderText::momentarilyRevealLastTypedCharacter): + * rendering/RenderText.h: + (WebCore::RenderText::isSecure): + * testing/Internals.cpp: + (WebCore::Internals::setPasswordEchoEnabled): Fixed some silly coding in Internals. + (WebCore::Internals::setPasswordEchoDurationInSeconds): + (WebCore::Internals::reset): + +2011-07-08 Chang Shu <cshu@webkit.org> + + Update calling sites after function renamed. + https://bugs.webkit.org/show_bug.cgi?id=59114 + + Reviewed by Alexey Proskuryakov. + + No new tests, just refactoring. + + * editing/visible_units.cpp: + (WebCore::previousBoundary): + (WebCore::nextBoundary): + * rendering/RenderText.cpp: + (WebCore::RenderText::setTextInternal): + +2011-08-18 Chang Shu <cshu@webkit.org> + + Add support of setPasswordEchoEnabled and setPasswordEchoDuration for password echo feature + https://bugs.webkit.org/show_bug.cgi?id=66052 + + Reviewed by Alexey Proskuryakov. + + Added runtime settings in WebCore. + Added support in window.internals for testing. + + Tests: editing/input/password-echo-passnode.html + editing/input/password-echo-passnode2.html + editing/input/password-echo-passnode3.html + editing/input/password-echo-textnode.html + + * page/Settings.cpp: + (WebCore::Settings::Settings): + * page/Settings.h: + (WebCore::Settings::setPasswordEchoEnabled): + (WebCore::Settings::passwordEchoEnabled): + (WebCore::Settings::setPasswordEchoDurationInSeconds): + (WebCore::Settings::passwordEchoDurationInSeconds): + * testing/Internals.cpp: + (WebCore::Internals::Internals): + (WebCore::Internals::setPasswordEchoEnabled): + (WebCore::Internals::setPasswordEchoDurationInSeconds): + (WebCore::Internals::reset): + * testing/Internals.h: + * testing/Internals.idl: + +2011-08-16 Chang Shu <cshu@webkit.org> + + Support reset in WebCore::Internals + https://bugs.webkit.org/show_bug.cgi?id=66307 + + Reviewed by Dimitri Glazkov. + + New tests will be added when function reset is implemented. + + Added framework code in WebCoreTestSupport. The real implementation of + Internals::reset() depends on the need from the settings that require a reset. + + * testing/Internals.cpp: + (WebCore::Internals::reset): + * testing/Internals.h: + * testing/js/WebCoreTestSupport.cpp: + (WebCoreTestSupport::resetInternalsObject): + * testing/js/WebCoreTestSupport.h: + * testing/v8/WebCoreTestSupport.cpp: + (WebCoreTestSupport::resetInternalsObject): + * testing/v8/WebCoreTestSupport.h: + +2011-06-09 Robert Hogan <robert@webkit.org> + + Reviewed by Andreas Kling. + + Teach Qt about window.internals + https://bugs.webkit.org/show_bug.cgi?id=61074 + + A weakness of the Qt DRT setup is that things like JSContextRef are abstracted + away from the QtWebKit API so we need DumpRenderTreeSupportQt to access WebCore internals. + Since the window.internals object requires JSContextRef we need to implement it in DumpRenderTreeSupportQt + where we can access it. DumpRenderTreeSupportQt cannot be compiled outside Qt's WebCore and as it + is our only possible route into the WebCoreTestSupport class neither can the new window.internals plumbing. + Likewise we can't put the accessor in WebCoreTestSupport because it would then need to know about QWebFrame + and others. The only alternative seems like a compile time guard which we would have to teach the bots about. + + * CodeGenerators.pri: + * WebCore.pri: + * WebCore.pro: + +2011-06-02 Dimitri Glazkov <dglazkov@chromium.org> + + Reviewed by Darin Adler. + + Add build logistics and plumbing for window.internals object. + https://bugs.webkit.org/show_bug.cgi?id=60313 + + Test: fast/harness/internals-object.html + + * Configurations/WebCoreTestSupport.xcconfig: Added. + * DerivedSources.make: Added support for generating from Internals.idl. + * WebCore.gyp/WebCore.gyp: Added new webcore_test_support library. + * WebCore.gypi: Ditto. + * WebCore.xcodeproj/project.pbxproj: Added WebCoreTestSupport library. + * testing/Internals.cpp: Added. + * testing/Internals.h: Added. + * testing/Internals.idl: Added. + * testing/js/WebCoreTestSupport.cpp: Added. + * testing/js/WebCoreTestSupport.h: Added. + * testing/v8/WebCoreTestSupport.cpp: Added. + * testing/v8/WebCoreTestSupport.h: Added. + +2011-08-22 Abhishek Arya <inferno@chromium.org> + + Crash in FocusController::advanceFocusInDocumentOrder + https://bugs.webkit.org/show_bug.cgi?id=66678 + + RefPtr the focusable node to prevent getting deleted by mutation + event. + + Reviewed by Dave Hyatt. + + Test: fast/frames/focus-controller-crash-change-event.html + + * page/FocusController.cpp: + (WebCore::FocusController::advanceFocusInDocumentOrder): + +2011-08-18 Ryosuke Niwa <rniwa@webkit.org> + + SimplifiedBackwardsTextIterator returns incorrect offset with first-letter rule + https://bugs.webkit.org/show_bug.cgi?id=66086 + + Reviewed by Darin Adler. + + The bug was caused by SimplifiedBackwardsTextIterator's not taking care of first-letter at all. + Fixing the bug by detecting RenderTextFragment in handleTextNode. + + Also added m_shouldHandleFirstLetter to SimplifiedBackwardsTextIterator to keep track of whether or not + the next call to handleTextNode needs to process the first-letter part of the text fragment. + + Test: editing/text-iterator/backward-textiterator-first-letter-crash.html + + * editing/TextIterator.cpp: + (WebCore::firstRenderTextInFirstLetter): Extracted from handleTextNodeFirstLetter. + (WebCore::TextIterator::handleTextNodeFirstLetter): Calls firstRenderTextInFirstLetter. + (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator): + (WebCore::SimplifiedBackwardsTextIterator::handleTextNode): + (WebCore::SimplifiedBackwardsTextIterator::handleFirstLetter): Added. + * editing/TextIterator.h: + +2011-08-23 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + [Qt] Fix build on Lion + + https://bugs.webkit.org/show_bug.cgi?id=66770 + + Reviewed by Andreas Kling. + + We were mistakenly picking up mac/WebCoreSystemInterface.h instead of + the Qt one, and building on Lion revealed this when a typedef for + IOSurfaceRef was wrapped in PLATFORM(MAC). + + For now we fix this by including WebCoreSystemInterface using + brackets, so that we'll pick up the right file based on the + include paths. This also means exposing a few missing enums + in our own version of the file, so those were added. + + Lasty, we need to link against the right system interface library + on Lion. + + * platform/mac/WebVideoFullscreenHUDWindowController.mm: + * platform/qt/WebCoreSystemInterface.h: + +2011-08-08 Cris Neckar <cdn@chromium.org> + + Remove counter nodes from the tree and fix-up children when they are removed from the counter map. + https://bugs.webkit.org/show_bug.cgi?id=65346 + + Reviewed by Adam Barth. + + Covered by existing CSS counter tests. + + * rendering/CounterNode.cpp: + (WebCore::CounterNode::~CounterNode): + +2011-08-17 Oliver Hunt <oliver@apple.com> + + Move towards supporting user controlled prototypes on CanvasPixelArray + https://bugs.webkit.org/show_bug.cgi?id=66429 + + Reviewed by Gavin Barraclough. + + Start using a per-global object structure for canvas pixel array. + + * bindings/js/JSImageDataCustom.cpp: + (WebCore::toJS): + +2011-08-17 Abhishek Arya <inferno@chromium.org> + + Crash in Document::recalcStyleSelector + https://bugs.webkit.org/show_bug.cgi?id=66335 + + Reviewed by Simon Fraser. + + When node is getting destroyed and its removedFromDocument + is not called due to entire document structure torn down(using + removeAllChildren), make sure to clear out the stylesheet + candidate node from document's structures in its destructor. + + Test: svg/dom/stylesheet-candidate-node-crash-main.html + + * dom/ProcessingInstruction.cpp: + (WebCore::ProcessingInstruction::~ProcessingInstruction): + * html/HTMLLinkElement.cpp: + (WebCore::HTMLLinkElement::~HTMLLinkElement): + * html/HTMLStyleElement.cpp: + (WebCore::HTMLStyleElement::~HTMLStyleElement): + * svg/SVGStyleElement.cpp: + (WebCore::SVGStyleElement::~SVGStyleElement): + 2011-08-12 Abhishek Arya <inferno@chromium.org> Crash in WebCore::editingIgnoresContent diff --git a/src/3rdparty/webkit/Source/WebCore/CodeGenerators.pri b/src/3rdparty/webkit/Source/WebCore/CodeGenerators.pri index cc29660..db6f7af 100644 --- a/src/3rdparty/webkit/Source/WebCore/CodeGenerators.pri +++ b/src/3rdparty/webkit/Source/WebCore/CodeGenerators.pri @@ -509,6 +509,7 @@ IDL_BINDINGS += \ svg/SVGUseElement.idl \ svg/SVGViewElement.idl \ svg/SVGVKernElement.idl \ + testing/Internals.idl \ webaudio/AudioBuffer.idl \ webaudio/AudioBufferSourceNode.idl \ webaudio/AudioChannelMerger.idl \ @@ -613,6 +614,7 @@ idl.commands = perl -I$$PWD/bindings/scripts $$idl.wkScript \ --include $$PWD/svg \ --include $$PWD/storage \ --include $$PWD/css \ + --include $$PWD/testing \ --include $$PWD/webaudio \ --include $$PWD/workers \ --outputDir $$WC_GENERATED_SOURCES_DIR \ diff --git a/src/3rdparty/webkit/Source/WebCore/WebCore.exp.in b/src/3rdparty/webkit/Source/WebCore/WebCore.exp.in index a183d66..982a8ef 100644 --- a/src/3rdparty/webkit/Source/WebCore/WebCore.exp.in +++ b/src/3rdparty/webkit/Source/WebCore/WebCore.exp.in @@ -263,6 +263,7 @@ __ZN7WebCore12IconDatabase27checkIntegrityBeforeOpeningEv __ZN7WebCore12IconDatabase5closeEv __ZN7WebCore12IconDatabase9setClientEPNS_18IconDatabaseClientE __ZN7WebCore12IconDatabaseC1Ev +__ZN7WebCore12JSDOMWrapper34virtualFunctionToPreventWeakVtableEv __ZN7WebCore12PopupMenuMacC1EPNS_15PopupMenuClientE __ZN7WebCore12PrintContext12pagePropertyEPNS_5FrameEPKci __ZN7WebCore12PrintContext13numberOfPagesEPNS_5FrameERKNS_9FloatSizeE @@ -1011,6 +1012,8 @@ __ZN7WebCore9makeRangeERKNS_15VisiblePositionES2_ __ZN7WebCore9pageCacheEv __ZN7WebCore9plainTextEPKNS_5RangeENS_20TextIteratorBehaviorE __ZN7WebCore9toElementEN3JSC7JSValueE +__ZN7WebCore17cacheDOMStructureEPNS_17JSDOMGlobalObjectEPN3JSC9StructureEPKNS2_9ClassInfoE +__ZN7WebCore21getCachedDOMStructureEPNS_17JSDOMGlobalObjectEPKN3JSC9ClassInfoE __ZNK3JSC8Bindings10RootObject12globalObjectEv __ZNK3WTF6String14createCFStringEv __ZNK7WebCore5Frame26getDocumentBackgroundColorEv @@ -1304,6 +1307,7 @@ __ZNK7WebCore9FrameView28isEnclosedInCompositingLayerEv __ZNK7WebCore9PageCache10frameCountEv __ZNK7WebCore9PageCache21autoreleasedPageCountEv __ZTVN7WebCore12ChromeClientE +__ZTVN7WebCore12JSDOMWrapperE __ZTVN7WebCore16IconDatabaseBaseE __ZTVN7WebCore17FileChooserClientE __ZTVN7WebCore17FrameLoaderClientE @@ -1636,8 +1640,6 @@ __ZN3JSC8Bindings8InstanceC2EN3WTF10PassRefPtrINS0_10RootObjectEEE __ZN3JSC8Bindings8InstanceD2Ev __ZN7WebCore13IdentifierRep7isValidEPS0_ __ZN7WebCore16ScriptController16createRootObjectEPv -__ZN7WebCore17cacheDOMStructureEPNS_17JSDOMGlobalObjectEPN3JSC9StructureEPKNS2_9ClassInfoE -__ZN7WebCore21getCachedDOMStructureEPNS_17JSDOMGlobalObjectEPKN3JSC9ClassInfoE __ZNK3JSC8Bindings13RuntimeObject12defaultValueEPNS_9ExecStateENS_22PreferredPrimitiveTypeE __ZTVN3JSC13RuntimeMethodE #endif diff --git a/src/3rdparty/webkit/Source/WebCore/WebCore.gypi b/src/3rdparty/webkit/Source/WebCore/WebCore.gypi index e418f7f..7383db1 100644 --- a/src/3rdparty/webkit/Source/WebCore/WebCore.gypi +++ b/src/3rdparty/webkit/Source/WebCore/WebCore.gypi @@ -6054,6 +6054,17 @@ 'xml/XSLTUnicodeSort.cpp', 'xml/XSLTUnicodeSort.h', ], + 'webcore_test_support_idl_files': [ + 'testing/Internals.idl', + ], + 'webcore_test_support_files': [ + 'testing/v8/WebCoreTestSupport.cpp', + 'testing/v8/WebCoreTestSupport.h', + 'testing/js/WebCoreTestSupport.cpp', + 'testing/js/WebCoreTestSupport.h', + 'testing/Internals.cpp', + 'testing/Internals.h', + ], 'webcore_resource_files': [ 'English.lproj/Localizable.strings', 'English.lproj/localizedStrings.js', diff --git a/src/3rdparty/webkit/Source/WebCore/WebCore.pri b/src/3rdparty/webkit/Source/WebCore/WebCore.pri index 97644ed..82311d2 100644 --- a/src/3rdparty/webkit/Source/WebCore/WebCore.pri +++ b/src/3rdparty/webkit/Source/WebCore/WebCore.pri @@ -48,14 +48,16 @@ v8 { $$SOURCE_DIR/WebCore/bindings/v8 \ $$SOURCE_DIR/WebCore/bindings/v8/custom \ $$SOURCE_DIR/WebCore/bindings/v8/specialization \ - $$SOURCE_DIR/WebCore/bridge/qt/v8 + $$SOURCE_DIR/WebCore/bridge/qt/v8 \ + $$SOURCE_DIR/WebCore/testing/v8 } else { WEBCORE_INCLUDEPATH = \ $$SOURCE_DIR/WebCore/bridge/jsc \ $$SOURCE_DIR/WebCore/bindings/js \ $$SOURCE_DIR/WebCore/bindings/js/specialization \ - $$SOURCE_DIR/WebCore/bridge/c + $$SOURCE_DIR/WebCore/bridge/c \ + $$SOURCE_DIR/WebCore/testing/js } WEBCORE_INCLUDEPATH = \ @@ -110,6 +112,7 @@ WEBCORE_INCLUDEPATH = \ $$SOURCE_DIR/WebCore/svg/graphics \ $$SOURCE_DIR/WebCore/svg/graphics/filters \ $$SOURCE_DIR/WebCore/svg/properties \ + $$SOURCE_DIR/WebCore/testing \ $$SOURCE_DIR/WebCore/webaudio \ $$SOURCE_DIR/WebCore/websockets \ $$SOURCE_DIR/WebCore/wml \ diff --git a/src/3rdparty/webkit/Source/WebCore/WebCore.pro b/src/3rdparty/webkit/Source/WebCore/WebCore.pro index 141290d..a305549 100644 --- a/src/3rdparty/webkit/Source/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/Source/WebCore/WebCore.pro @@ -222,7 +222,8 @@ v8 { bindings/v8/custom/V8NotificationCenterCustom.cpp \ bindings/v8/custom/V8ConsoleCustom.cpp \ bindings/v8/custom/V8SQLTransactionSyncCustom.cpp \ - bindings/v8/V8WorkerContextErrorHandler.cpp + bindings/v8/V8WorkerContextErrorHandler.cpp \ + testing/v8/WebCoreTestSupport.cpp } else { SOURCES += \ bindings/ScriptControllerBase.cpp \ @@ -374,7 +375,8 @@ v8 { bridge/runtime_array.cpp \ bridge/runtime_method.cpp \ bridge/runtime_object.cpp \ - bridge/runtime_root.cpp + bridge/runtime_root.cpp \ + testing/js/WebCoreTestSupport.cpp } SOURCES += \ @@ -1173,6 +1175,7 @@ SOURCES += \ rendering/style/StyleSurroundData.cpp \ rendering/style/StyleTransformData.cpp \ rendering/style/StyleVisualData.cpp \ + testing/Internals.cpp \ xml/DOMParser.cpp \ xml/XMLHttpRequest.cpp \ xml/XMLHttpRequestProgressEventThrottle.cpp \ @@ -2420,6 +2423,7 @@ HEADERS += \ svg/SVGVKernElement.h \ svg/SVGZoomAndPan.h \ svg/SVGZoomEvent.h \ + testing/Internals.h \ workers/AbstractWorker.h \ workers/DedicatedWorkerContext.h \ workers/DedicatedWorkerThread.h \ diff --git a/src/3rdparty/webkit/Source/WebCore/bindings/js/JSDOMWrapper.cpp b/src/3rdparty/webkit/Source/WebCore/bindings/js/JSDOMWrapper.cpp index 60c0ed1..d54fe74 100644 --- a/src/3rdparty/webkit/Source/WebCore/bindings/js/JSDOMWrapper.cpp +++ b/src/3rdparty/webkit/Source/WebCore/bindings/js/JSDOMWrapper.cpp @@ -32,12 +32,9 @@ using namespace JSC; namespace WebCore { -#ifndef NDEBUG - -JSDOMWrapper::~JSDOMWrapper() +void JSDOMWrapper::virtualFunctionToPreventWeakVtable() { + ASSERT_NOT_REACHED(); } -#endif - } // namespace WebCore diff --git a/src/3rdparty/webkit/Source/WebCore/bindings/js/JSDOMWrapper.h b/src/3rdparty/webkit/Source/WebCore/bindings/js/JSDOMWrapper.h index 2f5bebd..9a4aca5 100644 --- a/src/3rdparty/webkit/Source/WebCore/bindings/js/JSDOMWrapper.h +++ b/src/3rdparty/webkit/Source/WebCore/bindings/js/JSDOMWrapper.h @@ -48,6 +48,10 @@ public: } protected: + // An inline function cannot be the first non-abstract virtual function declared + // in the class as it results in the vtable being generated as a weak symbol. + virtual void virtualFunctionToPreventWeakVtable(); + explicit JSDOMWrapper(JSC::Structure* structure, JSC::JSGlobalObject* globalObject) : JSObjectWithGlobalObject(globalObject, structure) { @@ -56,10 +60,6 @@ protected: // needing to reach through the frame to get to the Document*. See bug 27640. // ASSERT(globalObject->scriptExecutionContext()); } - -#ifndef NDEBUG - virtual ~JSDOMWrapper(); -#endif }; } // namespace WebCore diff --git a/src/3rdparty/webkit/Source/WebCore/bindings/js/JSImageDataCustom.cpp b/src/3rdparty/webkit/Source/WebCore/bindings/js/JSImageDataCustom.cpp index 420b60c..6e242b0 100644 --- a/src/3rdparty/webkit/Source/WebCore/bindings/js/JSImageDataCustom.cpp +++ b/src/3rdparty/webkit/Source/WebCore/bindings/js/JSImageDataCustom.cpp @@ -48,8 +48,10 @@ JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, ImageData* imageD wrapper = CREATE_DOM_WRAPPER(exec, globalObject, ImageData, imageData); Identifier dataName(exec, "data"); static const ClassInfo cpaClassInfo = { "CanvasPixelArray", &JSByteArray::Base::s_info, 0, 0 }; - DEFINE_STATIC_LOCAL(Strong<Structure>, cpaStructure, (exec->globalData(), JSByteArray::createStructure(exec->globalData(), jsNull(), &cpaClassInfo))); - wrapper->putDirect(exec->globalData(), dataName, new (exec) JSByteArray(exec, cpaStructure.get(), imageData->data()->data()), DontDelete | ReadOnly); + Structure* cpaStructure = getCachedDOMStructure(globalObject, &cpaClassInfo); + if (!cpaStructure) + cpaStructure = cacheDOMStructure(globalObject, JSByteArray::createStructure(exec->globalData(), jsNull(), &cpaClassInfo), &cpaClassInfo); + wrapper->putDirect(exec->globalData(), dataName, new (exec) JSByteArray(exec, cpaStructure, imageData->data()->data()), DontDelete | ReadOnly); exec->heap()->reportExtraMemoryCost(imageData->data()->length()); return wrapper; diff --git a/src/3rdparty/webkit/Source/WebCore/dom/ProcessingInstruction.cpp b/src/3rdparty/webkit/Source/WebCore/dom/ProcessingInstruction.cpp index 30111d8..f7dcfd2 100644 --- a/src/3rdparty/webkit/Source/WebCore/dom/ProcessingInstruction.cpp +++ b/src/3rdparty/webkit/Source/WebCore/dom/ProcessingInstruction.cpp @@ -62,6 +62,9 @@ ProcessingInstruction::~ProcessingInstruction() if (m_cachedSheet) m_cachedSheet->removeClient(this); + + if (inDocument()) + document()->removeStyleSheetCandidateNode(this); } void ProcessingInstruction::setData(const String& data, ExceptionCode&) diff --git a/src/3rdparty/webkit/Source/WebCore/dom/StyleElement.cpp b/src/3rdparty/webkit/Source/WebCore/dom/StyleElement.cpp index 5b0e2ad..3bed5ae 100644 --- a/src/3rdparty/webkit/Source/WebCore/dom/StyleElement.cpp +++ b/src/3rdparty/webkit/Source/WebCore/dom/StyleElement.cpp @@ -84,6 +84,15 @@ void StyleElement::removedFromDocument(Document* document, Element* element) document->styleSelectorChanged(DeferRecalcStyle); } +void StyleElement::clearDocumentData(Document* document, Element* element) +{ + if (m_sheet) + m_sheet->clearOwnerNode(); + + if (element->inDocument()) + document->removeStyleSheetCandidateNode(element); +} + void StyleElement::childrenChanged(Element* element) { ASSERT(element); diff --git a/src/3rdparty/webkit/Source/WebCore/dom/StyleElement.h b/src/3rdparty/webkit/Source/WebCore/dom/StyleElement.h index 4356c17..1f50c6e 100644 --- a/src/3rdparty/webkit/Source/WebCore/dom/StyleElement.h +++ b/src/3rdparty/webkit/Source/WebCore/dom/StyleElement.h @@ -44,6 +44,7 @@ protected: void insertedIntoDocument(Document*, Element*); void removedFromDocument(Document*, Element*); + void clearDocumentData(Document*, Element*); void childrenChanged(Element*); void finishParsingChildren(Element*); diff --git a/src/3rdparty/webkit/Source/WebCore/editing/InsertIntoTextNodeCommand.cpp b/src/3rdparty/webkit/Source/WebCore/editing/InsertIntoTextNodeCommand.cpp index b1a455b..0fbc2af 100644 --- a/src/3rdparty/webkit/Source/WebCore/editing/InsertIntoTextNodeCommand.cpp +++ b/src/3rdparty/webkit/Source/WebCore/editing/InsertIntoTextNodeCommand.cpp @@ -27,6 +27,8 @@ #include "InsertIntoTextNodeCommand.h" #include "AXObjectCache.h" +#include "RenderText.h" +#include "Settings.h" #include "Text.h" namespace WebCore { @@ -46,7 +48,13 @@ void InsertIntoTextNodeCommand::doApply() { if (!m_node->rendererIsEditable()) return; - + + if (document()->settings() && document()->settings()->passwordEchoEnabled()) { + RenderText* renderText = toRenderText(m_node->renderer()); + if (renderText && renderText->isSecure()) + renderText->momentarilyRevealLastTypedCharacter(m_offset + m_text.length() - 1); + } + ExceptionCode ec; m_node->insertData(m_offset, m_text, ec); diff --git a/src/3rdparty/webkit/Source/WebCore/editing/TextIterator.cpp b/src/3rdparty/webkit/Source/WebCore/editing/TextIterator.cpp index 3de365b..38ade02 100644 --- a/src/3rdparty/webkit/Source/WebCore/editing/TextIterator.cpp +++ b/src/3rdparty/webkit/Source/WebCore/editing/TextIterator.cpp @@ -602,21 +602,30 @@ void TextIterator::handleTextBox() } } +static inline RenderText* firstRenderTextInFirstLetter(RenderObject* firstLetter) +{ + if (!firstLetter) + return 0; + + // FIXME: Should this check descendent objects? + for (RenderObject* current = firstLetter->firstChild(); current; current = current->nextSibling()) { + if (current->isText()) + return toRenderText(current); + } + return 0; +} + void TextIterator::handleTextNodeFirstLetter(RenderTextFragment* renderer) { if (renderer->firstLetter()) { RenderObject* r = renderer->firstLetter(); if (r->style()->visibility() != VISIBLE && !m_ignoresStyleVisibility) return; - for (RenderObject *currChild = r->firstChild(); currChild; currChild->nextSibling()) { - if (currChild->isText()) { - RenderText* firstLetter = toRenderText(currChild); - m_handledFirstLetter = true; - m_remainingTextBox = m_textBox; - m_textBox = firstLetter->firstTextBox(); - m_firstLetterText = firstLetter; - return; - } + if (RenderText* firstLetter = firstRenderTextInFirstLetter(r)) { + m_handledFirstLetter = true; + m_remainingTextBox = m_textBox; + m_textBox = firstLetter->firstTextBox(); + m_firstLetterText = firstLetter; } } m_handledFirstLetter = true; @@ -1042,14 +1051,46 @@ Node* TextIterator::node() const SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator() : m_behavior(TextIteratorDefaultBehavior) , m_node(0) + , m_offset(0) + , m_handledNode(false) + , m_handledChildren(false) + , m_startNode(0) + , m_startOffset(0) + , m_endNode(0) + , m_endOffset(0) , m_positionNode(0) + , m_positionStartOffset(0) + , m_positionEndOffset(0) + , m_textCharacters(0) + , m_textLength(0) + , m_lastTextNode(0) + , m_lastCharacter(0) + , m_singleCharacterBuffer(0) + , m_havePassedStartNode(false) + , m_shouldHandleFirstLetter(false) { } SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator(const Range* r, TextIteratorBehavior behavior) : m_behavior(behavior) , m_node(0) + , m_offset(0) + , m_handledNode(false) + , m_handledChildren(false) + , m_startNode(0) + , m_startOffset(0) + , m_endNode(0) + , m_endOffset(0) , m_positionNode(0) + , m_positionStartOffset(0) + , m_positionEndOffset(0) + , m_textCharacters(0) + , m_textLength(0) + , m_lastTextNode(0) + , m_lastCharacter(0) + , m_singleCharacterBuffer(0) + , m_havePassedStartNode(false) + , m_shouldHandleFirstLetter(false) { ASSERT(m_behavior == TextIteratorDefaultBehavior); @@ -1177,23 +1218,62 @@ bool SimplifiedBackwardsTextIterator::handleTextNode() { m_lastTextNode = m_node; - RenderText* renderer = toRenderText(m_node->renderer()); - String str = renderer->text(); + int startOffset; + int offsetInNode; + RenderText* renderer = handleFirstLetter(startOffset, offsetInNode); + if (!renderer) + return true; - if (!renderer->firstTextBox() && str.length() > 0) + String text = renderer->text(); + if (!renderer->firstTextBox() && text.length() > 0) return true; m_positionEndOffset = m_offset; - - m_offset = (m_node == m_startNode) ? m_startOffset : 0; + m_offset = startOffset + offsetInNode; m_positionNode = m_node; m_positionStartOffset = m_offset; + + ASSERT(0 <= m_positionStartOffset - offsetInNode && m_positionStartOffset - offsetInNode <= static_cast<int>(text.length())); + ASSERT(1 <= m_positionEndOffset - offsetInNode && m_positionEndOffset - offsetInNode <= static_cast<int>(text.length())); + ASSERT(m_positionStartOffset <= m_positionEndOffset); + m_textLength = m_positionEndOffset - m_positionStartOffset; - m_textCharacters = str.characters() + m_positionStartOffset; + m_textCharacters = text.characters() + (m_positionStartOffset - offsetInNode); + ASSERT(m_textCharacters >= text.characters()); + ASSERT(m_textCharacters + m_textLength <= text.characters() + static_cast<int>(text.length())); - m_lastCharacter = str[m_positionEndOffset - 1]; + m_lastCharacter = text[m_positionEndOffset - 1]; - return true; + return !m_shouldHandleFirstLetter; +} + +RenderText* SimplifiedBackwardsTextIterator::handleFirstLetter(int& startOffset, int& offsetInNode) +{ + RenderText* renderer = toRenderText(m_node->renderer()); + startOffset = (m_node == m_startNode) ? m_startOffset : 0; + + if (!renderer->isTextFragment()) { + offsetInNode = 0; + return renderer; + } + + RenderTextFragment* fragment = toRenderTextFragment(renderer); + int offsetAfterFirstLetter = fragment->start(); + if (startOffset >= offsetAfterFirstLetter) { + ASSERT(!m_shouldHandleFirstLetter); + offsetInNode = offsetAfterFirstLetter; + return renderer; + } + + if (!m_shouldHandleFirstLetter && offsetAfterFirstLetter < m_offset) { + m_shouldHandleFirstLetter = true; + offsetInNode = offsetAfterFirstLetter; + return renderer; + } + + m_shouldHandleFirstLetter = false; + offsetInNode = 0; + return firstRenderTextInFirstLetter(fragment->firstLetter()); } bool SimplifiedBackwardsTextIterator::handleReplacedElement() diff --git a/src/3rdparty/webkit/Source/WebCore/editing/TextIterator.h b/src/3rdparty/webkit/Source/WebCore/editing/TextIterator.h index 9fe4ceb..8820388 100644 --- a/src/3rdparty/webkit/Source/WebCore/editing/TextIterator.h +++ b/src/3rdparty/webkit/Source/WebCore/editing/TextIterator.h @@ -203,6 +203,7 @@ public: private: void exitNode(); bool handleTextNode(); + RenderText* handleFirstLetter(int& startOffset, int& offsetInNode); bool handleReplacedElement(); bool handleNonTextNode(); void emitCharacter(UChar, Node*, int startOffset, int endOffset); @@ -240,6 +241,9 @@ private: // Whether m_node has advanced beyond the iteration range (i.e. m_startNode). bool m_havePassedStartNode; + + // Should handle first-letter renderer in the next call to handleTextNode. + bool m_shouldHandleFirstLetter; }; // Builds on the text iterator, adding a character position so we can walk one diff --git a/src/3rdparty/webkit/Source/WebCore/editing/visible_units.cpp b/src/3rdparty/webkit/Source/WebCore/editing/visible_units.cpp index ff683a5..b2b52f3 100644 --- a/src/3rdparty/webkit/Source/WebCore/editing/visible_units.cpp +++ b/src/3rdparty/webkit/Source/WebCore/editing/visible_units.cpp @@ -101,7 +101,7 @@ static VisiblePosition previousBoundary(const VisiblePosition& c, BoundarySearch else { // Treat bullets used in the text security mode as regular characters when looking for boundaries String iteratorString(it.characters(), it.length()); - iteratorString = iteratorString.impl()->secure('x'); + iteratorString.fill('x'); string.prepend(iteratorString.characters(), iteratorString.length()); } next = searchFunction(string.data(), string.size(), string.size() - suffixLength, MayHaveMoreContext, needMoreContext); @@ -176,7 +176,7 @@ static VisiblePosition nextBoundary(const VisiblePosition& c, BoundarySearchFunc else { // Treat bullets used in the text security mode as regular characters when looking for boundaries String iteratorString(it.characters(), it.length()); - iteratorString = iteratorString.impl()->secure('x'); + iteratorString.fill('x'); string.append(iteratorString.characters(), iteratorString.length()); } next = searchFunction(string.data(), string.size(), prefixLength, MayHaveMoreContext, needMoreContext); diff --git a/src/3rdparty/webkit/Source/WebCore/generated/JSInternals.cpp b/src/3rdparty/webkit/Source/WebCore/generated/JSInternals.cpp new file mode 100644 index 0000000..1a29b36 --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/generated/JSInternals.cpp @@ -0,0 +1,134 @@ +/* + This file is part of the WebKit open source project. + This file has been generated by generate-bindings.pl. DO NOT MODIFY! + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "config.h" +#include "JSInternals.h" + +#include "ExceptionCode.h" +#include "Internals.h" +#include "JSDOMBinding.h" +#include "JSDocument.h" +#include <runtime/Error.h> +#include <wtf/GetPtr.h> + +using namespace JSC; + +namespace WebCore { + +ASSERT_CLASS_FITS_IN_CELL(JSInternals); + +/* Hash table for prototype */ +#if ENABLE(JIT) +#define THUNK_GENERATOR(generator) , generator +#else +#define THUNK_GENERATOR(generator) +#endif + +static const HashTableValue JSInternalsPrototypeTableValues[3] = +{ + { "setPasswordEchoEnabled", DontDelete | Function, (intptr_t)static_cast<NativeFunction>(jsInternalsPrototypeFunctionSetPasswordEchoEnabled), (intptr_t)2 THUNK_GENERATOR(0) }, + { "setPasswordEchoDurationInSeconds", DontDelete | Function, (intptr_t)static_cast<NativeFunction>(jsInternalsPrototypeFunctionSetPasswordEchoDurationInSeconds), (intptr_t)2 THUNK_GENERATOR(0) }, + { 0, 0, 0, 0 THUNK_GENERATOR(0) } +}; + +#undef THUNK_GENERATOR +static JSC_CONST_HASHTABLE HashTable JSInternalsPrototypeTable = { 5, 3, JSInternalsPrototypeTableValues, 0 }; +const ClassInfo JSInternalsPrototype::s_info = { "InternalsPrototype", &JSC::JSObjectWithGlobalObject::s_info, &JSInternalsPrototypeTable, 0 }; + +JSObject* JSInternalsPrototype::self(ExecState* exec, JSGlobalObject* globalObject) +{ + return getDOMPrototype<JSInternals>(exec, globalObject); +} + +bool JSInternalsPrototype::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot) +{ + return getStaticFunctionSlot<JSObject>(exec, &JSInternalsPrototypeTable, this, propertyName, slot); +} + +bool JSInternalsPrototype::getOwnPropertyDescriptor(ExecState* exec, const Identifier& propertyName, PropertyDescriptor& descriptor) +{ + return getStaticFunctionDescriptor<JSObject>(exec, &JSInternalsPrototypeTable, this, propertyName, descriptor); +} + +const ClassInfo JSInternals::s_info = { "Internals", &JSDOMWrapper::s_info, 0, 0 }; + +JSInternals::JSInternals(Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr<Internals> impl) + : JSDOMWrapper(structure, globalObject) + , m_impl(impl) +{ + ASSERT(inherits(&s_info)); +} + +JSObject* JSInternals::createPrototype(ExecState* exec, JSGlobalObject* globalObject) +{ + return new (exec) JSInternalsPrototype(exec->globalData(), globalObject, JSInternalsPrototype::createStructure(globalObject->globalData(), globalObject->objectPrototype())); +} + +EncodedJSValue JSC_HOST_CALL jsInternalsPrototypeFunctionSetPasswordEchoEnabled(ExecState* exec) +{ + JSValue thisValue = exec->hostThisValue(); + if (!thisValue.inherits(&JSInternals::s_info)) + return throwVMTypeError(exec); + JSInternals* castedThis = static_cast<JSInternals*>(asObject(thisValue)); + Internals* imp = static_cast<Internals*>(castedThis->impl()); + ExceptionCode ec = 0; + Document* document(toDocument(exec->argument(0))); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + bool enabled(exec->argument(1).toBoolean(exec)); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + + imp->setPasswordEchoEnabled(document, enabled, ec); + setDOMException(exec, ec); + return JSValue::encode(jsUndefined()); +} + +EncodedJSValue JSC_HOST_CALL jsInternalsPrototypeFunctionSetPasswordEchoDurationInSeconds(ExecState* exec) +{ + JSValue thisValue = exec->hostThisValue(); + if (!thisValue.inherits(&JSInternals::s_info)) + return throwVMTypeError(exec); + JSInternals* castedThis = static_cast<JSInternals*>(asObject(thisValue)); + Internals* imp = static_cast<Internals*>(castedThis->impl()); + ExceptionCode ec = 0; + Document* document(toDocument(exec->argument(0))); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + double durationInSeconds(exec->argument(1).toNumber(exec)); + if (exec->hadException()) + return JSValue::encode(jsUndefined()); + + imp->setPasswordEchoDurationInSeconds(document, durationInSeconds, ec); + setDOMException(exec, ec); + return JSValue::encode(jsUndefined()); +} + +JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, Internals* impl) +{ + return wrap<JSInternals>(exec, globalObject, impl); +} + +Internals* toInternals(JSC::JSValue value) +{ + return value.inherits(&JSInternals::s_info) ? static_cast<JSInternals*>(asObject(value))->impl() : 0; +} + +} diff --git a/src/3rdparty/webkit/Source/WebCore/generated/JSInternals.h b/src/3rdparty/webkit/Source/WebCore/generated/JSInternals.h new file mode 100644 index 0000000..08e2751 --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/generated/JSInternals.h @@ -0,0 +1,79 @@ +/* + This file is part of the WebKit open source project. + This file has been generated by generate-bindings.pl. DO NOT MODIFY! + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef JSInternals_h +#define JSInternals_h + +#include "JSDOMBinding.h" +#include <runtime/JSGlobalObject.h> +#include <runtime/JSObjectWithGlobalObject.h> +#include <runtime/ObjectPrototype.h> + +namespace WebCore { + +class Internals; + +class JSInternals : public JSDOMWrapper { + typedef JSDOMWrapper Base; +public: + JSInternals(JSC::Structure*, JSDOMGlobalObject*, PassRefPtr<Internals>); + static JSC::JSObject* createPrototype(JSC::ExecState*, JSC::JSGlobalObject*); + static const JSC::ClassInfo s_info; + + static JSC::Structure* createStructure(JSC::JSGlobalData& globalData, JSC::JSValue prototype) + { + return JSC::Structure::create(globalData, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), AnonymousSlotCount, &s_info); + } + + Internals* impl() const { return m_impl.get(); } + +private: + RefPtr<Internals> m_impl; +protected: + static const unsigned StructureFlags = Base::StructureFlags; +}; + +JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, Internals*); +Internals* toInternals(JSC::JSValue); + +class JSInternalsPrototype : public JSC::JSObjectWithGlobalObject { + typedef JSC::JSObjectWithGlobalObject Base; +public: + static JSC::JSObject* self(JSC::ExecState*, JSC::JSGlobalObject*); + static const JSC::ClassInfo s_info; + virtual bool getOwnPropertySlot(JSC::ExecState*, const JSC::Identifier&, JSC::PropertySlot&); + virtual bool getOwnPropertyDescriptor(JSC::ExecState*, const JSC::Identifier&, JSC::PropertyDescriptor&); + static JSC::Structure* createStructure(JSC::JSGlobalData& globalData, JSC::JSValue prototype) + { + return JSC::Structure::create(globalData, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), AnonymousSlotCount, &s_info); + } + JSInternalsPrototype(JSC::JSGlobalData& globalData, JSC::JSGlobalObject* globalObject, JSC::Structure* structure) : JSC::JSObjectWithGlobalObject(globalData, globalObject, structure) { } +protected: + static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags; +}; + +// Functions + +JSC::EncodedJSValue JSC_HOST_CALL jsInternalsPrototypeFunctionSetPasswordEchoEnabled(JSC::ExecState*); +JSC::EncodedJSValue JSC_HOST_CALL jsInternalsPrototypeFunctionSetPasswordEchoDurationInSeconds(JSC::ExecState*); + +} // namespace WebCore + +#endif diff --git a/src/3rdparty/webkit/Source/WebCore/html/HTMLLinkElement.cpp b/src/3rdparty/webkit/Source/WebCore/html/HTMLLinkElement.cpp index 633dd1e..d7ca918 100644 --- a/src/3rdparty/webkit/Source/WebCore/html/HTMLLinkElement.cpp +++ b/src/3rdparty/webkit/Source/WebCore/html/HTMLLinkElement.cpp @@ -83,6 +83,9 @@ HTMLLinkElement::~HTMLLinkElement() if (m_cachedLinkResource) m_cachedLinkResource->removeClient(this); #endif + + if (inDocument()) + document()->removeStyleSheetCandidateNode(this); } void HTMLLinkElement::setDisabled(bool disabled) diff --git a/src/3rdparty/webkit/Source/WebCore/html/HTMLStyleElement.cpp b/src/3rdparty/webkit/Source/WebCore/html/HTMLStyleElement.cpp index 0f256e1..0213f40 100644 --- a/src/3rdparty/webkit/Source/WebCore/html/HTMLStyleElement.cpp +++ b/src/3rdparty/webkit/Source/WebCore/html/HTMLStyleElement.cpp @@ -44,8 +44,7 @@ inline HTMLStyleElement::HTMLStyleElement(const QualifiedName& tagName, Document HTMLStyleElement::~HTMLStyleElement() { - if (m_sheet) - m_sheet->clearOwnerNode(); + StyleElement::clearDocumentData(document(), this); } PassRefPtr<HTMLStyleElement> HTMLStyleElement::create(const QualifiedName& tagName, Document* document, bool createdByParser) diff --git a/src/3rdparty/webkit/Source/WebCore/page/FocusController.cpp b/src/3rdparty/webkit/Source/WebCore/page/FocusController.cpp index 5b91eeb..e7a44ca 100644 --- a/src/3rdparty/webkit/Source/WebCore/page/FocusController.cpp +++ b/src/3rdparty/webkit/Source/WebCore/page/FocusController.cpp @@ -214,7 +214,7 @@ bool FocusController::advanceFocusInDocumentOrder(FocusDirection direction, Keyb document->updateLayoutIgnorePendingStylesheets(); - Node* node = (direction == FocusDirectionForward) + RefPtr<Node> node = (direction == FocusDirectionForward) ? document->nextFocusableNode(currentNode, event) : document->previousFocusableNode(currentNode, event); @@ -237,7 +237,7 @@ bool FocusController::advanceFocusInDocumentOrder(FocusDirection direction, Keyb frame = parentFrame; } - node = deepFocusableNode(direction, node, event); + node = deepFocusableNode(direction, node.get(), event); if (!node) { // We didn't find a node to focus, so we should try to pass focus to Chrome. @@ -254,7 +254,7 @@ bool FocusController::advanceFocusInDocumentOrder(FocusDirection direction, Keyb ? d->nextFocusableNode(0, event) : d->previousFocusableNode(0, event); - node = deepFocusableNode(direction, node, event); + node = deepFocusableNode(direction, node.get(), event); if (!node) return false; @@ -273,7 +273,7 @@ bool FocusController::advanceFocusInDocumentOrder(FocusDirection direction, Keyb if (node->isFrameOwnerElement()) { // We focus frames rather than frame owners. // FIXME: We should not focus frames that have no scrollbars, as focusing them isn't useful to the user. - HTMLFrameOwnerElement* owner = static_cast<HTMLFrameOwnerElement*>(node); + HTMLFrameOwnerElement* owner = static_cast<HTMLFrameOwnerElement*>(node.get()); if (!owner->contentFrame()) return false; @@ -296,13 +296,13 @@ bool FocusController::advanceFocusInDocumentOrder(FocusDirection direction, Keyb setFocusedFrame(newDocument->frame()); if (caretBrowsing) { - Position position = firstPositionInOrBeforeNode(node); + Position position = firstPositionInOrBeforeNode(node.get()); VisibleSelection newSelection(position, position, DOWNSTREAM); if (frame->selection()->shouldChangeSelection(newSelection)) frame->selection()->setSelection(newSelection); } - static_cast<Element*>(node)->focus(false); + static_cast<Element*>(node.get())->focus(false); return true; } diff --git a/src/3rdparty/webkit/Source/WebCore/page/Settings.cpp b/src/3rdparty/webkit/Source/WebCore/page/Settings.cpp index 2b9e8b7..2025bd0 100644 --- a/src/3rdparty/webkit/Source/WebCore/page/Settings.cpp +++ b/src/3rdparty/webkit/Source/WebCore/page/Settings.cpp @@ -89,6 +89,7 @@ Settings::Settings(Page* page) : m_page(page) , m_editableLinkBehavior(EditableLinkDefaultBehavior) , m_textDirectionSubmenuInclusionBehavior(TextDirectionSubmenuAutomaticallyIncluded) + , m_passwordEchoDurationInSeconds(1) , m_minimumFontSize(0) , m_minimumLogicalFontSize(0) , m_defaultFontSize(0) @@ -182,6 +183,7 @@ Settings::Settings(Page* page) , m_shouldInjectUserScriptsInInitialEmptyDocument(false) , m_allowDisplayOfInsecureContent(true) , m_allowRunningOfInsecureContent(true) + , m_passwordEchoEnabled(false) { // A Frame may not have been created yet, so we initialize the AtomicString // hash before trying to use it. diff --git a/src/3rdparty/webkit/Source/WebCore/page/Settings.h b/src/3rdparty/webkit/Source/WebCore/page/Settings.h index ffe1037..1d2a138 100644 --- a/src/3rdparty/webkit/Source/WebCore/page/Settings.h +++ b/src/3rdparty/webkit/Source/WebCore/page/Settings.h @@ -407,6 +407,12 @@ namespace WebCore { void setAllowRunningOfInsecureContent(bool flag) { m_allowRunningOfInsecureContent = flag; } bool allowRunningOfInsecureContent() const { return m_allowRunningOfInsecureContent; } + void setPasswordEchoEnabled(bool flag) { m_passwordEchoEnabled = flag; } + bool passwordEchoEnabled() const { return m_passwordEchoEnabled; } + + void setPasswordEchoDurationInSeconds(double durationInSeconds) { m_passwordEchoDurationInSeconds = durationInSeconds; } + double passwordEchoDurationInSeconds() const { return m_passwordEchoDurationInSeconds; } + private: Page* m_page; @@ -422,6 +428,7 @@ namespace WebCore { AtomicString m_fantasyFontFamily; EditableLinkBehavior m_editableLinkBehavior; TextDirectionSubmenuInclusionBehavior m_textDirectionSubmenuInclusionBehavior; + double m_passwordEchoDurationInSeconds; int m_minimumFontSize; int m_minimumLogicalFontSize; int m_defaultFontSize; @@ -513,6 +520,7 @@ namespace WebCore { bool m_shouldInjectUserScriptsInInitialEmptyDocument : 1; bool m_allowDisplayOfInsecureContent : 1; bool m_allowRunningOfInsecureContent : 1; + bool m_passwordEchoEnabled : 1; #if USE(AVFOUNDATION) static bool gAVFoundationEnabled; diff --git a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.mm b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.mm index 63f15a2..1637c1c 100644 --- a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.mm +++ b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.mm @@ -29,7 +29,7 @@ #import "WebVideoFullscreenHUDWindowController.h" #import "FloatConversion.h" -#import "WebCoreSystemInterface.h" +#import <WebCoreSystemInterface.h> #import <WebCore/HTMLMediaElement.h> #import <wtf/RetainPtr.h> #import <wtf/UnusedParam.h> diff --git a/src/3rdparty/webkit/Source/WebCore/platform/qt/WebCoreSystemInterface.h b/src/3rdparty/webkit/Source/WebCore/platform/qt/WebCoreSystemInterface.h index 40cb449..e82a6fc 100644 --- a/src/3rdparty/webkit/Source/WebCore/platform/qt/WebCoreSystemInterface.h +++ b/src/3rdparty/webkit/Source/WebCore/platform/qt/WebCoreSystemInterface.h @@ -79,6 +79,17 @@ extern void (*wkQTClearMediaDownloadCache)(); extern void (*wkWindowSetAlpha)(NSWindow *, float); extern void (*wkWindowSetScaledFrame)(NSWindow *, NSRect, NSRect); +typedef enum { + wkMediaUIControlTimeline, + wkMediaUIControlSlider, + wkMediaUIControlPlayPauseButton, + wkMediaUIControlExitFullscreenButton, + wkMediaUIControlRewindButton, + wkMediaUIControlFastForwardButton, + wkMediaUIControlVolumeUpButton, + wkMediaUIControlVolumeDownButton +} wkMediaUIControlType; + } #endif diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/CounterNode.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/CounterNode.cpp index 323f5db..8a88fc9 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/CounterNode.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/CounterNode.cpp @@ -44,6 +44,49 @@ CounterNode::CounterNode(RenderObject* o, bool hasResetType, int value) CounterNode::~CounterNode() { + // Ideally this would be an assert and this would never be reached. In reality this happens a lot + // so we need to handle these cases. The node is still connected to the tree so we need to detach it. + if (m_parent || m_previousSibling || m_nextSibling || m_firstChild || m_lastChild) { + CounterNode* oldParent = 0; + CounterNode* oldPreviousSibling = 0; + // Instead of calling removeChild() we do this safely as the tree is likely broken if we get here. + if (m_parent) { + if (m_parent->m_firstChild == this) + m_parent->m_firstChild = m_nextSibling; + if (m_parent->m_lastChild == this) + m_parent->m_lastChild = m_previousSibling; + oldParent = m_parent; + m_parent = 0; + } + if (m_previousSibling) { + if (m_previousSibling->m_nextSibling == this) + m_previousSibling->m_nextSibling = m_nextSibling; + oldPreviousSibling = m_previousSibling; + m_previousSibling = 0; + } + if (m_nextSibling) { + if (m_nextSibling->m_previousSibling == this) + m_nextSibling->m_previousSibling = oldPreviousSibling; + m_nextSibling = 0; + } + if (m_firstChild) { + // The node's children are reparented to the old parent. + for (CounterNode* child = m_firstChild; child; ) { + CounterNode* nextChild = child->m_nextSibling; + CounterNode* nextSibling = 0; + child->m_parent = oldParent; + if (oldPreviousSibling) { + nextSibling = oldPreviousSibling->m_nextSibling; + child->m_previousSibling = oldPreviousSibling; + oldPreviousSibling->m_nextSibling = child; + child->m_nextSibling = nextSibling; + nextSibling->m_previousSibling = child; + oldPreviousSibling = child; + } + child = nextChild; + } + } + } resetRenderers(); } diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderText.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderText.cpp index 3d20df4..556379e 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderText.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderText.cpp @@ -37,6 +37,7 @@ #include "RenderCombineText.h" #include "RenderLayer.h" #include "RenderView.h" +#include "Settings.h" #include "Text.h" #include "TextBreakIterator.h" #include "TextResourceDecoder.h" @@ -53,6 +54,37 @@ using namespace Unicode; namespace WebCore { +class SecureTextTimer; +typedef HashMap<RenderText*, SecureTextTimer*> SecureTextTimerMap; +static SecureTextTimerMap* gSecureTextTimers = 0; + +class SecureTextTimer : public TimerBase { +public: + SecureTextTimer(RenderText* renderText) + : m_renderText(renderText) + , m_lastTypedCharacterOffset(-1) + { + } + + void restartWithNewText(unsigned lastTypedCharacterOffset) + { + m_lastTypedCharacterOffset = lastTypedCharacterOffset; + startOneShot(m_renderText->document()->settings()->passwordEchoDurationInSeconds()); + } + void invalidate() { m_lastTypedCharacterOffset = -1; } + unsigned lastTypedCharacterOffset() { return m_lastTypedCharacterOffset; } + +private: + virtual void fired() + { + ASSERT(gSecureTextTimers->contains(m_renderText)); + m_renderText->setText(m_renderText->text(), true /* forcing setting text as it may be masked later */); + } + + RenderText* m_renderText; + int m_lastTypedCharacterOffset; +}; + static void makeCapitalized(String* string, UChar previous) { if (string->isNull()) @@ -196,6 +228,9 @@ void RenderText::removeAndDestroyTextBoxes() void RenderText::destroy() { + if (SecureTextTimer* secureTextTimer = gSecureTextTimers ? gSecureTextTimers->take(this) : 0) + delete secureTextTimer; + removeAndDestroyTextBoxes(); RenderObject::destroy(); } @@ -1158,13 +1193,13 @@ void RenderText::setTextInternal(PassRefPtr<StringImpl> text) case TSNONE: break; case TSCIRCLE: - m_text.makeSecure(whiteBullet); + secureText(whiteBullet); break; case TSDISC: - m_text.makeSecure(bullet); + secureText(bullet); break; case TSSQUARE: - m_text.makeSecure(blackSquare); + secureText(blackSquare); } } @@ -1174,6 +1209,28 @@ void RenderText::setTextInternal(PassRefPtr<StringImpl> text) m_isAllASCII = m_text.containsOnlyASCII(); } +void RenderText::secureText(UChar mask) +{ + if (!m_text.length()) + return; + + int lastTypedCharacterOffsetToReveal = -1; + String revealedText; + SecureTextTimer* secureTextTimer = gSecureTextTimers ? gSecureTextTimers->get(this) : 0; + if (secureTextTimer && secureTextTimer->isActive()) { + lastTypedCharacterOffsetToReveal = secureTextTimer->lastTypedCharacterOffset(); + if (lastTypedCharacterOffsetToReveal >= 0) + revealedText.append(m_text[lastTypedCharacterOffsetToReveal]); + } + + m_text.fill(mask); + if (lastTypedCharacterOffsetToReveal >= 0) { + m_text.replace(lastTypedCharacterOffsetToReveal, 1, revealedText); + // m_text may be updated later before timer fires. We invalidate the lastTypedCharacterOffset to avoid inconsistency. + secureTextTimer->invalidate(); + } +} + void RenderText::setText(PassRefPtr<StringImpl> text, bool force) { ASSERT(text); @@ -1597,4 +1654,17 @@ void RenderText::checkConsistency() const #endif +void RenderText::momentarilyRevealLastTypedCharacter(unsigned lastTypedCharacterOffset) +{ + if (!gSecureTextTimers) + gSecureTextTimers = new SecureTextTimerMap; + + SecureTextTimer* secureTextTimer = gSecureTextTimers->get(this); + if (!secureTextTimer) { + secureTextTimer = new SecureTextTimer(this); + gSecureTextTimers->add(this, secureTextTimer); + } + secureTextTimer->restartWithNewText(lastTypedCharacterOffset); +} + } // namespace WebCore diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderText.h b/src/3rdparty/webkit/Source/WebCore/rendering/RenderText.h index 2008dad..f89a762 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderText.h +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderText.h @@ -117,6 +117,9 @@ public: bool containsReversedText() const { return m_containsReversedText; } + bool isSecure() const { return style()->textSecurity() != TSNONE; } + void momentarilyRevealLastTypedCharacter(unsigned lastTypedCharacterOffset); + InlineTextBox* findNextInlineTextBox(int offset, int& pos) const; bool allowTabs() const { return !style()->collapseWhiteSpace(); } @@ -158,6 +161,7 @@ private: void updateNeedsTranscoding(); inline void transformText(String&) const; + void secureText(UChar mask); float m_minWidth; // here to minimize padding in 64-bit. diff --git a/src/3rdparty/webkit/Source/WebCore/svg/SVGStyleElement.cpp b/src/3rdparty/webkit/Source/WebCore/svg/SVGStyleElement.cpp index 042af1c..01adb35 100644 --- a/src/3rdparty/webkit/Source/WebCore/svg/SVGStyleElement.cpp +++ b/src/3rdparty/webkit/Source/WebCore/svg/SVGStyleElement.cpp @@ -42,8 +42,7 @@ inline SVGStyleElement::SVGStyleElement(const QualifiedName& tagName, Document* SVGStyleElement::~SVGStyleElement() { - if (m_sheet) - m_sheet->clearOwnerNode(); + StyleElement::clearDocumentData(document(), this); } PassRefPtr<SVGStyleElement> SVGStyleElement::create(const QualifiedName& tagName, Document* document, bool createdByParser) diff --git a/src/3rdparty/webkit/Source/WebCore/testing/Internals.cpp b/src/3rdparty/webkit/Source/WebCore/testing/Internals.cpp new file mode 100644 index 0000000..caa1274 --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/testing/Internals.cpp @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "Internals.h" + +#include "Document.h" +#include "ExceptionCode.h" +#include "Settings.h" + +namespace WebCore { + +const char* Internals::internalsId = "internals"; + +PassRefPtr<Internals> Internals::create() +{ + return adoptRef(new Internals); +} + +Internals::~Internals() +{ +} + +Internals::Internals() + : passwordEchoDurationInSecondsBackedUp(false) + , passwordEchoEnabledBackedUp(false) +{ +} + +void Internals::setPasswordEchoEnabled(Document* document, bool enabled, ExceptionCode& ec) +{ + if (!document || !document->settings()) { + ec = INVALID_ACCESS_ERR; + return; + } + + if (!passwordEchoEnabledBackedUp) { + passwordEchoEnabledBackup = document->settings()->passwordEchoEnabled(); + passwordEchoEnabledBackedUp = true; + } + document->settings()->setPasswordEchoEnabled(enabled); +} + +void Internals::setPasswordEchoDurationInSeconds(Document* document, double durationInSeconds, ExceptionCode& ec) +{ + if (!document || !document->settings()) { + ec = INVALID_ACCESS_ERR; + return; + } + + if (!passwordEchoDurationInSecondsBackedUp) { + passwordEchoDurationInSecondsBackup = document->settings()->passwordEchoDurationInSeconds(); + passwordEchoDurationInSecondsBackedUp = true; + } + document->settings()->setPasswordEchoDurationInSeconds(durationInSeconds); +} + +void Internals::reset(Document* document) +{ + if (!document || !document->settings()) + return; + + if (passwordEchoDurationInSecondsBackedUp) { + document->settings()->setPasswordEchoDurationInSeconds(passwordEchoDurationInSecondsBackup); + passwordEchoDurationInSecondsBackedUp = false; + } + + if (passwordEchoEnabledBackedUp) { + document->settings()->setPasswordEchoEnabled(passwordEchoEnabledBackup); + passwordEchoEnabledBackedUp = false; + } +} + +} + diff --git a/src/3rdparty/webkit/Source/WebCore/testing/Internals.h b/src/3rdparty/webkit/Source/WebCore/testing/Internals.h new file mode 100644 index 0000000..a56240a --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/testing/Internals.h @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef Internals_h +#define Internals_h + +#include "ExceptionCode.h" +#include <wtf/PassRefPtr.h> +#include <wtf/RefCounted.h> + +namespace WebCore { + +class Document; + +class Internals : public RefCounted<Internals> { +public: + static PassRefPtr<Internals> create(); + virtual ~Internals(); + + void reset(Document*); + + void setPasswordEchoEnabled(Document*, bool enabled, ExceptionCode&); + void setPasswordEchoDurationInSeconds(Document*, double durationInSeconds, ExceptionCode&); + + static const char* internalsId; + +private: + Internals(); + + double passwordEchoDurationInSecondsBackup; + bool passwordEchoEnabledBackup : 1; + bool passwordEchoDurationInSecondsBackedUp : 1; + bool passwordEchoEnabledBackedUp : 1; +}; + +} // namespace WebCore + +#endif diff --git a/src/3rdparty/webkit/Source/WebCore/testing/Internals.idl b/src/3rdparty/webkit/Source/WebCore/testing/Internals.idl new file mode 100644 index 0000000..e647c9c --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/testing/Internals.idl @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +module window { + interface [OmitConstructor] Internals { + void setPasswordEchoEnabled(in Document document, in boolean enabled) raises(DOMException); + void setPasswordEchoDurationInSeconds(in Document document, in double durationInSeconds) raises(DOMException); + }; +} diff --git a/src/3rdparty/webkit/Source/WebCore/testing/js/WebCoreTestSupport.cpp b/src/3rdparty/webkit/Source/WebCore/testing/js/WebCoreTestSupport.cpp new file mode 100644 index 0000000..8a795bf --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/testing/js/WebCoreTestSupport.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "WebCoreTestSupport.h" + +#include "Internals.h" +#include "JSDOMGlobalObject.h" +#include "JSDocument.h" +#include "JSInternals.h" +#include <JavaScriptCore/APICast.h> +#include <interpreter/CallFrame.h> + +using namespace JSC; +using namespace WebCore; + +namespace WebCoreTestSupport { + +void injectInternalsObject(JSContextRef context) +{ + JSLock lock(SilenceAssertionsOnly); + ExecState* exec = toJS(context); + JSDOMGlobalObject* globalObject = static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()); + globalObject->putDirect(exec->globalData(), Identifier(exec, Internals::internalsId), toJS(exec, globalObject, Internals::create())); +} + +void resetInternalsObject(JSContextRef context) +{ + JSLock lock(SilenceAssertionsOnly); + ExecState* exec = toJS(context); + JSDOMGlobalObject* globalObject = static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()); + Internals * internals = toInternals(globalObject->getDirect(exec->globalData(), Identifier(exec, Internals::internalsId))); + if (internals) { + ScriptExecutionContext* scriptContext = globalObject->scriptExecutionContext(); + if (scriptContext->isDocument()) + internals->reset(static_cast<Document*>(scriptContext)); + } +} + +} diff --git a/src/3rdparty/webkit/Source/WebCore/testing/js/WebCoreTestSupport.h b/src/3rdparty/webkit/Source/WebCore/testing/js/WebCoreTestSupport.h new file mode 100644 index 0000000..bfd8a8b --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/testing/js/WebCoreTestSupport.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef WebCoreTestSupport_h +#define WebCoreTestSupport_h + +typedef const struct OpaqueJSContext* JSContextRef; + +namespace WebCoreTestSupport { + +void injectInternalsObject(JSContextRef); +void resetInternalsObject(JSContextRef); + +} // namespace WebCore + +#endif diff --git a/src/3rdparty/webkit/Source/WebCore/testing/v8/WebCoreTestSupport.cpp b/src/3rdparty/webkit/Source/WebCore/testing/v8/WebCoreTestSupport.cpp new file mode 100644 index 0000000..1f2c2e5 --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/testing/v8/WebCoreTestSupport.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "WebCoreTestSupport.h" + +#include "Document.h" +#include "Internals.h" +#include "ScriptExecutionContext.h" +#include "V8Internals.h" + +#include <v8.h> + +using namespace WebCore; + +namespace WebCoreTestSupport { + +void injectInternalsObject(v8::Local<v8::Context> context) +{ + v8::Context::Scope contextScope(context); + v8::HandleScope scope; + + context->Global()->Set(v8::String::New(Internals::internalsId), toV8(Internals::create())); +} + +void resetInternalsObject(v8::Local<v8::Context> context) +{ + v8::Context::Scope contextScope(context); + v8::HandleScope scope; + + v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(context->Global()->Get(v8::String::New(Internals::internalsId))); + Internals * internals = V8Internals::toNative(object); + if (internals) { + ScriptExecutionContext* scriptContext = getScriptExecutionContext(); + if (scriptContext->isDocument()) + internals->reset(static_cast<Document*>(scriptContext)); + } +} + +} diff --git a/src/3rdparty/webkit/Source/WebCore/testing/v8/WebCoreTestSupport.h b/src/3rdparty/webkit/Source/WebCore/testing/v8/WebCoreTestSupport.h new file mode 100644 index 0000000..fa49c60 --- /dev/null +++ b/src/3rdparty/webkit/Source/WebCore/testing/v8/WebCoreTestSupport.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef WebCoreTestSupport_h +#define WebCoreTestSupport_h + +namespace v8 { +class Context; +template <class T> class Local; +} + +namespace WebCoreTestSupport { + +void injectInternalsObject(v8::Local<v8::Context>); +void resetInternalsObject(v8::Local<v8::Context>); + +} // namespace WebCore + +#endif diff --git a/src/3rdparty/webkit/Source/WebKit/qt/Api/qwebsettings.cpp b/src/3rdparty/webkit/Source/WebKit/qt/Api/qwebsettings.cpp index 3606764..9123ede 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/Api/qwebsettings.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/Api/qwebsettings.cpp @@ -273,6 +273,11 @@ void QWebSettingsPrivate::apply() settings->setNeedsSiteSpecificQuirks(value); settings->setUsesPageCache(WebCore::pageCache()->capacity()); + +#if ENABLE(PASSWORD_ECHO) + settings->setPasswordEchoEnabled(true); + settings->setPasswordEchoDurationInSeconds(1); +#endif } else { QList<QWebSettingsPrivate*> settings = *::allSettings(); for (int i = 0; i < settings.count(); ++i) diff --git a/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog b/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog index a9d5e7a..33ee4c2 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog @@ -1,3 +1,73 @@ +2011-08-25 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> + + Unreviewed QtWebKit.pro fix for when building inside Qt + + Patch by Simo Fält <simo.falt@nokia.com> + + The QtWebKit version was being overwritten by a global Qt version when + QtWebKit was built inside Qt. Fixed by moving the version + definition after the inclusion of qbase.pri. + + * QtWebKit.pro: + +2011-08-18 Chang Shu <cshu@webkit.org> + + Add support of setPasswordEchoEnabled and setPasswordEchoDuration for password echo feature + https://bugs.webkit.org/show_bug.cgi?id=66052 + + Reviewed by Alexey Proskuryakov. + + Enable password echo under the build flag. + + * Api/qwebsettings.cpp: + (QWebSettingsPrivate::apply): + +2011-08-16 Chang Shu <cshu@webkit.org> + + Support reset in WebCore::Internals + https://bugs.webkit.org/show_bug.cgi?id=66307 + + Reviewed by Dimitri Glazkov. + + Added framework code in WebKit. + + * WebCoreSupport/DumpRenderTreeSupportQt.cpp: + (DumpRenderTreeSupportQt::resetInternalsObject): + * WebCoreSupport/DumpRenderTreeSupportQt.h: + +2011-06-09 Robert Hogan <robert@webkit.org> + + Reviewed by Andreas Kling. + + Teach Qt about window.internals + https://bugs.webkit.org/show_bug.cgi?id=61074 + + * WebCoreSupport/DumpRenderTreeSupportQt.cpp: + (DumpRenderTreeSupportQt::injectInternalsObject): + * WebCoreSupport/DumpRenderTreeSupportQt.h: + +2011-08-23 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + [Qt] Fix build on Lion + + https://bugs.webkit.org/show_bug.cgi?id=66770 + + Reviewed by Andreas Kling. + + We were mistakenly picking up mac/WebCoreSystemInterface.h instead of + the Qt one, and building on Lion revealed this when a typedef for + IOSurfaceRef was wrapped in PLATFORM(MAC). + + For now we fix this by including WebCoreSystemInterface using + brackets, so that we'll pick up the right file based on the + include paths. This also means exposing a few missing enums + in our own version of the file, so those were added. + + Lasty, we need to link against the right system interface library + on Lion. + + * QtWebKit.pro: + 2011-08-05 Dawit Alemayehu <adawit@kde.org> Reviewed by Andreas Kling. diff --git a/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro b/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro index 0c5ca2f..41b0d39 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro +++ b/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro @@ -42,10 +42,6 @@ win32*:!win32-msvc* { contains(DEFINES, ENABLE_WEBGL=1)|contains(CONFIG, texmap): LIBS += $$QMAKE_LIBS_OPENGL } -moduleFile=$$PWD/qt_webkit_version.pri -isEmpty(QT_BUILD_TREE):include($$moduleFile) -VERSION = $${QT_WEBKIT_MAJOR_VERSION}.$${QT_WEBKIT_MINOR_VERSION}.$${QT_WEBKIT_PATCH_VERSION} - include_webinspector: RESOURCES += $$SOURCE_DIR/WebCore/inspector/front-end/WebKit.qrc $$WC_GENERATED_SOURCES_DIR/InspectorBackendStub.qrc # Extract sources to build from the generator definitions @@ -87,6 +83,9 @@ CONFIG(QTDIR_build) { symbian: TARGET =$$TARGET$${QT_LIBINFIX} } +moduleFile=$$PWD/qt_webkit_version.pri +isEmpty(QT_BUILD_TREE):include($$moduleFile) +VERSION = $${QT_WEBKIT_MAJOR_VERSION}.$${QT_WEBKIT_MINOR_VERSION}.$${QT_WEBKIT_PATCH_VERSION} symbian { TARGET.EPOCALLOWDLLDATA=1 @@ -245,12 +244,12 @@ contains(DEFINES, ENABLE_VIDEO=1) { # We can know the Mac OS version by using the Darwin major version DARWIN_VERSION = $$split(QMAKE_HOST.version, ".") DARWIN_MAJOR_VERSION = $$first(DARWIN_VERSION) - equals(DARWIN_MAJOR_VERSION, "10") { - LIBS+= $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a - } else { - equals(DARWIN_MAJOR_VERSION, "9") { - LIBS+= $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceLeopard.a - } + equals(DARWIN_MAJOR_VERSION, "11") { + LIBS += $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceLion.a + } else:equals(DARWIN_MAJOR_VERSION, "10") { + LIBS += $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a + } else:equals(DARWIN_MAJOR_VERSION, "9") { + LIBS += $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceLeopard.a } } } diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp index 9d0b4f9..2fc8e84 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp @@ -23,6 +23,9 @@ #include "config.h" #include "DumpRenderTreeSupportQt.h" +#if USE(JSC) +#include "APICast.h" +#endif #include "ApplicationCacheStorage.h" #include "CSSComputedStyleDeclaration.h" #include "ChromeClientQt.h" @@ -74,6 +77,7 @@ #include "SVGSMILElement.h" #endif #include "TextIterator.h" +#include "WebCoreTestSupport.h" #include "WorkerThread.h" #include <wtf/CurrentTime.h> @@ -1109,6 +1113,44 @@ void DumpRenderTreeSupportQt::removeShadowRoot(const QWebElement& element) webElement->removeShadowRoot(); } +void DumpRenderTreeSupportQt::injectInternalsObject(QWebFrame* frame) +{ + WebCore::Frame* coreFrame = QWebFramePrivate::core(frame); +#if USE(JSC) + JSC::JSLock lock(JSC::SilenceAssertionsOnly); + + JSDOMWindow* window = toJSDOMWindow(coreFrame, mainThreadNormalWorld()); + Q_ASSERT(window); + + JSC::ExecState* exec = window->globalExec(); + Q_ASSERT(exec); + + JSContextRef context = toRef(exec); + WebCoreTestSupport::injectInternalsObject(context); +#elif USE(V8) + WebCoreTestSupport::injectInternalsObject(V8Proxy::mainWorldContext(coreFrame)); +#endif +} + +void DumpRenderTreeSupportQt::resetInternalsObject(QWebFrame* frame) +{ + WebCore::Frame* coreFrame = QWebFramePrivate::core(frame); +#if USE(JSC) + JSC::JSLock lock(JSC::SilenceAssertionsOnly); + + JSDOMWindow* window = toJSDOMWindow(coreFrame, mainThreadNormalWorld()); + Q_ASSERT(window); + + JSC::ExecState* exec = window->globalExec(); + Q_ASSERT(exec); + + JSContextRef context = toRef(exec); + WebCoreTestSupport::resetInternalsObject(context); +#elif USE(V8) + WebCoreTestSupport::resetInternalsObject(V8Proxy::mainWorldContext(coreFrame)); +#endif +} + // Provide a backward compatibility with previously exported private symbols as of QtWebKit 4.6 release void QWEBKIT_EXPORT qt_resumeActiveDOMObjects(QWebFrame* frame) diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h index c93942c..7040ea1 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h @@ -218,6 +218,7 @@ public: static QString layerTreeAsText(QWebFrame*); static void injectInternalsObject(QWebFrame*); + static void resetInternalsObject(QWebFrame*); }; #endif diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index a90dc4e..97448a7 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - 4277f8277b1daf3ec33c996f5a760ccd1113af4b + 836fa24be73978fb292e954abb151fb46b1d97e0 -- cgit v0.12 From f801bd952c23e0d34c48f35d4d1b80d4bf355051 Mon Sep 17 00:00:00 2001 From: Ademar de Souza Reis Jr <ademar.reis@openbossa.org> Date: Thu, 25 Aug 2011 19:42:19 -0300 Subject: Updated WebKit to 85d4df147ac7b239497b05979a51fd6fde7580fd This time also including WebKitLibraries/*.a, needed for the Mac build. --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/Source/WebCore/ChangeLog | 11 +++++++++++ src/3rdparty/webkit/Source/WebCore/config.h | 1 + src/3rdparty/webkit/VERSION | 2 +- .../webkit/WebKitLibraries/libWebCoreSQLite3.a | Bin 0 -> 4157656 bytes .../WebKitLibraries/libWebKitSystemInterfaceLeopard.a | Bin 0 -> 1742208 bytes .../WebKitLibraries/libWebKitSystemInterfaceLion.a | Bin 0 -> 942816 bytes .../libWebKitSystemInterfaceSnowLeopard.a | Bin 0 -> 1472252 bytes 8 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 src/3rdparty/webkit/WebKitLibraries/libWebCoreSQLite3.a create mode 100644 src/3rdparty/webkit/WebKitLibraries/libWebKitSystemInterfaceLeopard.a create mode 100644 src/3rdparty/webkit/WebKitLibraries/libWebKitSystemInterfaceLion.a create mode 100644 src/3rdparty/webkit/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 6ff8541..0b8bae5 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -836fa24be73978fb292e954abb151fb46b1d97e0 +85d4df147ac7b239497b05979a51fd6fde7580fd diff --git a/src/3rdparty/webkit/Source/WebCore/ChangeLog b/src/3rdparty/webkit/Source/WebCore/ChangeLog index 98af823..41d2ba7 100644 --- a/src/3rdparty/webkit/Source/WebCore/ChangeLog +++ b/src/3rdparty/webkit/Source/WebCore/ChangeLog @@ -1,3 +1,14 @@ +2011-08-25 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> + + [Qt] Enable password echo on Symbian builds + https://bugs.webkit.org/show_bug.cgi?id=66954 + + Reviewed by Chang Shu. + + No tests, as this is just a build change. + + * config.h: + 2011-08-23 Chang Shu <cshu@webkit.org> Added support for momentarily revealing last typed character in password input. diff --git a/src/3rdparty/webkit/Source/WebCore/config.h b/src/3rdparty/webkit/Source/WebCore/config.h index 001753e..a7ddcee 100644 --- a/src/3rdparty/webkit/Source/WebCore/config.h +++ b/src/3rdparty/webkit/Source/WebCore/config.h @@ -197,6 +197,7 @@ #if OS(SYMBIAN) #define USE_SYSTEM_MALLOC 1 +#define ENABLE_PASSWORD_ECHO 1 #endif #if OS(UNIX) || OS(WINDOWS) diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index 97448a7..a6f6ced 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - 836fa24be73978fb292e954abb151fb46b1d97e0 + 85d4df147ac7b239497b05979a51fd6fde7580fd diff --git a/src/3rdparty/webkit/WebKitLibraries/libWebCoreSQLite3.a b/src/3rdparty/webkit/WebKitLibraries/libWebCoreSQLite3.a new file mode 100644 index 0000000..2e5fd15 Binary files /dev/null and b/src/3rdparty/webkit/WebKitLibraries/libWebCoreSQLite3.a differ diff --git a/src/3rdparty/webkit/WebKitLibraries/libWebKitSystemInterfaceLeopard.a b/src/3rdparty/webkit/WebKitLibraries/libWebKitSystemInterfaceLeopard.a new file mode 100644 index 0000000..43b6043 Binary files /dev/null and b/src/3rdparty/webkit/WebKitLibraries/libWebKitSystemInterfaceLeopard.a differ diff --git a/src/3rdparty/webkit/WebKitLibraries/libWebKitSystemInterfaceLion.a b/src/3rdparty/webkit/WebKitLibraries/libWebKitSystemInterfaceLion.a new file mode 100644 index 0000000..345860c Binary files /dev/null and b/src/3rdparty/webkit/WebKitLibraries/libWebKitSystemInterfaceLion.a differ diff --git a/src/3rdparty/webkit/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a b/src/3rdparty/webkit/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a new file mode 100644 index 0000000..845ca54 Binary files /dev/null and b/src/3rdparty/webkit/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a differ -- cgit v0.12 From 1dd59e4cf52b189d6ddf9fe7ff46a30e64e5a2ac Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn <frederik.gladhorn@nokia.com> Date: Fri, 26 Aug 2011 10:33:20 +0200 Subject: Check if bridge plugin vector is still valid. Q_GLOBAL_STATIC may be destroyed and we still send ObjectDestroyed notifications. This only shows now that we actually send the Destroyed notifications. --- src/gui/accessible/qaccessible_unix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/accessible/qaccessible_unix.cpp b/src/gui/accessible/qaccessible_unix.cpp index 19fbe78..1c1eb2a 100644 --- a/src/gui/accessible/qaccessible_unix.cpp +++ b/src/gui/accessible/qaccessible_unix.cpp @@ -96,7 +96,7 @@ void QAccessible::updateAccessibility(QObject *o, int who, Event reason) } initialize(); - if (bridges()->isEmpty()) + if (!bridges() || bridges()->isEmpty()) return; QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(o); -- cgit v0.12 From a4eae8a44ca38739755ba8994251e2b120878ec8 Mon Sep 17 00:00:00 2001 From: mread <qt-info@nokia.com> Date: Fri, 26 Aug 2011 12:07:31 +0100 Subject: Fixed use of deleted object in XmlPatterns EvaluationCache This problem was shown up by the Ilta-Sanomat QML app on Symbian. Changes to the EvaluationCache class in 23267553627ac3c4cbcd918283bee8e665deeff9 meant that it was now trying to access the declaration object after it had been deleted. This change takes the data needed from the declaration object (1 bool) and stores that instead Task-number: QTTH-1492 Reviewed-by: Honglei Zhang --- src/xmlpatterns/expr/qevaluationcache.cpp | 5 ++--- src/xmlpatterns/expr/qevaluationcache_p.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/xmlpatterns/expr/qevaluationcache.cpp b/src/xmlpatterns/expr/qevaluationcache.cpp index 67109eb..3b6fc92 100644 --- a/src/xmlpatterns/expr/qevaluationcache.cpp +++ b/src/xmlpatterns/expr/qevaluationcache.cpp @@ -49,10 +49,9 @@ template<bool IsForGlobal> EvaluationCache<IsForGlobal>::EvaluationCache(const Expression::Ptr &op, const VariableDeclaration *varDecl, const VariableSlotID aSlot) : SingleContainer(op) - , m_declaration(varDecl) + , m_declarationUsedByMany(varDecl->usedByMany()) , m_varSlot(aSlot) { - Q_ASSERT(m_declaration); Q_ASSERT(m_varSlot > -1); } @@ -199,7 +198,7 @@ Expression::Ptr EvaluationCache<IsForGlobal>::compress(const StaticContext::Ptr if(m_operand->is(IDRangeVariableReference)) return m_operand; - if(m_declaration->usedByMany()) + if (m_declarationUsedByMany) { /* If it's only an atomic value an EvaluationCache is overkill. However, * it's still needed for functions like fn:current-time() that must adhere to diff --git a/src/xmlpatterns/expr/qevaluationcache_p.h b/src/xmlpatterns/expr/qevaluationcache_p.h index 6080157..77d9c11 100644 --- a/src/xmlpatterns/expr/qevaluationcache_p.h +++ b/src/xmlpatterns/expr/qevaluationcache_p.h @@ -124,7 +124,7 @@ namespace QPatternist private: static DynamicContext::Ptr topFocusContext(const DynamicContext::Ptr &context); - const VariableDeclaration *m_declaration; + bool m_declarationUsedByMany; /** * This variable must not be called m_slot. If it so, a compiler bug on * HP-UX-aCC-64 is triggered in the constructor initializor. See the -- cgit v0.12 From dcee6e1371d899eb79717b8e3f3eec08b765db82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Thu, 11 Aug 2011 15:49:37 +0200 Subject: Fix QDir::operator==(const QDir &) const We can't rely on absolute paths when comparing directories for equality as these don't take into account symbolic links and may also bypass ../ and ./ simplification. Instead, canonical paths must be computed and can then be compared according to the case sensitivity rules for the platform or file engine, as is done in QFileInfo. Task-number: QTBUG-20495 Reviewed-by: Prasanth Ullattil --- src/corelib/io/qdir.cpp | 6 +++--- src/corelib/io/qfileinfo.cpp | 1 + tests/auto/qdir/tst_qdir.cpp | 6 ++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index f9196e0..6e25d91 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -1633,9 +1633,9 @@ bool QDir::operator==(const QDir &dir) const if (d->filters == other->filters && d->sort == other->sort && d->nameFilters == other->nameFilters) { - d->resolveAbsoluteEntry(); - other->resolveAbsoluteEntry(); - return d->absoluteDirEntry.filePath().compare(other->absoluteDirEntry.filePath(), sensitive) == 0; + + // Fallback to expensive canonical path computation + return canonicalPath().compare(dir.canonicalPath(), sensitive) == 0; } return false; } diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp index ca42c87..6e25206 100644 --- a/src/corelib/io/qfileinfo.cpp +++ b/src/corelib/io/qfileinfo.cpp @@ -406,6 +406,7 @@ bool QFileInfo::operator==(const QFileInfo &fileinfo) const if (fileinfo.size() != size()) //if the size isn't the same... return false; + // Fallback to expensive canonical path computation return canonicalFilePath().compare(fileinfo.canonicalFilePath(), sensitive) == 0; } diff --git a/tests/auto/qdir/tst_qdir.cpp b/tests/auto/qdir/tst_qdir.cpp index 0a42a97..419eaae 100644 --- a/tests/auto/qdir/tst_qdir.cpp +++ b/tests/auto/qdir/tst_qdir.cpp @@ -444,9 +444,15 @@ void tst_QDir::QDir_default() void tst_QDir::compare() { // operator== + + // Not using QCOMPARE to test result of QDir::operator== + QDir dir; dir.makeAbsolute(); QVERIFY(dir == QDir::currentPath()); + + QVERIFY(QDir() == QDir(QDir::currentPath())); + QVERIFY(QDir("../") == QDir(QDir::currentPath() + "/..")); } static QStringList filterLinks(const QStringList &list) -- cgit v0.12 From 664abe11efdbf582a5433abccf0d8c6fdbe2b040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Thu, 11 Aug 2011 16:17:40 +0200 Subject: Compare non-canonical paths before falling back on expensive computation Reviewed-by: Prasanth Ullattil --- src/corelib/io/qdir.cpp | 4 ++++ src/corelib/io/qfileinfo.cpp | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index 6e25d91..c0c62e1 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -1634,6 +1634,10 @@ bool QDir::operator==(const QDir &dir) const && d->sort == other->sort && d->nameFilters == other->nameFilters) { + // Assume directories are the same if path is the same + if (d->dirEntry.filePath() == other->dirEntry.filePath()) + return true; + // Fallback to expensive canonical path computation return canonicalPath().compare(dir.canonicalPath(), sensitive) == 0; } diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp index 6e25206..ff328da 100644 --- a/src/corelib/io/qfileinfo.cpp +++ b/src/corelib/io/qfileinfo.cpp @@ -391,6 +391,11 @@ bool QFileInfo::operator==(const QFileInfo &fileinfo) const return true; if (d->isDefaultConstructed || fileinfo.d_ptr->isDefaultConstructed) return false; + + // Assume files are the same if path is the same + if (d->fileEntry.filePath() == fileinfo.d_ptr->fileEntry.filePath()) + return true; + Qt::CaseSensitivity sensitive; if (d->fileEngine == 0 || fileinfo.d_ptr->fileEngine == 0) { if (d->fileEngine != fileinfo.d_ptr->fileEngine) // one is native, the other is a custom file-engine -- cgit v0.12 From 07afddbf4bc029f776810381c7317fffa100eb60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Fri, 26 Aug 2011 10:39:52 +0200 Subject: Don't second-guess the "engine"; call cleanPath on absolutePaths This ensures there is a single definition of what constitutes an absolute path in Qt. Task-number: QTBUG-19995 Reviewed-by: Prasanth Ullattil --- src/corelib/io/qdir.cpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index c0c62e1..cbe635f 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -197,16 +197,10 @@ inline void QDirPrivate::resolveAbsoluteEntry() const return; QString absoluteName; - if (fileEngine.isNull()) { - if (!dirEntry.isRelative()) { - absoluteDirEntry = dirEntry; - return; - } - + if (fileEngine.isNull()) absoluteName = QFileSystemEngine::absoluteName(dirEntry).filePath(); - } else { + else absoluteName = fileEngine->fileName(QAbstractFileEngine::AbsoluteName); - } absoluteDirEntry = QFileSystemEntry(QDir::cleanPath(absoluteName), QFileSystemEntry::FromInternalPath()); } -- cgit v0.12 From 13899108ed57548d3c4f40e595481f8ee76e4fcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Fri, 26 Aug 2011 11:03:55 +0200 Subject: We prefer capitalized drive letters, make it so sooner Reviewed-by: Prasanth Ullattil --- src/corelib/io/qfilesystemengine_win.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index f704fc3..993c946 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -1052,11 +1052,12 @@ QString QFileSystemEngine::tempPath() } if (ret.isEmpty()) { #if !defined(Q_OS_WINCE) - ret = QLatin1String("c:/tmp"); + ret = QLatin1String("C:/tmp"); #else ret = QLatin1String("/Temp"); #endif - } + } else if (ret.length() >= 2 && ret[1] == QLatin1Char(':')) + ret[0] = ret.at(0).toUpper(); // Force uppercase drive letters. return ret; } -- cgit v0.12 From d4aa1777389f41da60a862a8c371d13839938d43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Fri, 26 Aug 2011 11:01:48 +0200 Subject: ret is an "internal" path, no need to re-process it Where "internal" means that it uses Qt's separator '/', regardless of the native one. --- src/corelib/io/qfilesystemengine_win.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index 993c946..764ee6d 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -536,7 +536,7 @@ QFileSystemEntry QFileSystemEngine::absoluteName(const QFileSystemEntry &entry) // Force uppercase drive letters. ret[0] = ret.at(0).toUpper(); } - return QFileSystemEntry(ret); + return QFileSystemEntry(ret, QFileSystemEntry::FromInternalPath()); } //static -- cgit v0.12 From 91096126440aafba22aeb9307cb72135b3156a4c Mon Sep 17 00:00:00 2001 From: mread <qt-info@nokia.com> Date: Fri, 26 Aug 2011 13:30:53 +0100 Subject: Porting the QTBUG-21084 fix to 4.7.4 This fixes a memory leak. It's SR1 tagged for 4.7.4. Task-number: QTBUG-21084 Reviewed-by: Honglei Zhang --- src/declarative/util/qdeclarativelistmodel.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp index d0c8cc8..92aa6d0 100644 --- a/src/declarative/util/qdeclarativelistmodel.cpp +++ b/src/declarative/util/qdeclarativelistmodel.cpp @@ -784,6 +784,7 @@ void QDeclarativeListModelParser::setCustomData(QObject *obj, const QByteArray & QDeclarativeListModel *rv = static_cast<QDeclarativeListModel *>(obj); ModelNode *root = new ModelNode(rv->m_nested); + rv->m_nested->m_ownsRoot = true; rv->m_nested->_root = root; QStack<ModelNode *> nodes; nodes << root; -- cgit v0.12 From 2e32fca2c0f5252864d348df929d9858486763b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Fri, 26 Aug 2011 17:09:01 +0200 Subject: In 4.7 QFileInfo::absolute(File)Path returned clean paths Let's play nice and keep that "feature". Task-number: QTBUG-19995 --- src/corelib/io/qfileinfo.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp index ff328da..e317d1e 100644 --- a/src/corelib/io/qfileinfo.cpp +++ b/src/corelib/io/qfileinfo.cpp @@ -76,7 +76,9 @@ QString QFileInfoPrivate::getFileName(QAbstractFileEngine::FileName name) const break; case QAbstractFileEngine::AbsoluteName: case QAbstractFileEngine::AbsolutePathName: { - QFileSystemEntry entry = QFileSystemEngine::absoluteName(fileEntry); + QFileSystemEntry entry = QFileSystemEntry( + QDir::cleanPath(QFileSystemEngine::absoluteName(fileEntry).filePath()), + QFileSystemEntry::FromInternalPath()); if (cache_enabled) { // be smart and store both fileNames[QAbstractFileEngine::AbsoluteName] = entry.filePath(); fileNames[QAbstractFileEngine::AbsolutePathName] = entry.path(); -- cgit v0.12 From c0278760008efa18a068c6b5b2634b6cdb473dbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Fri, 26 Aug 2011 17:33:47 +0200 Subject: Revert "In 4.7 QFileInfo::absolute(File)Path returned clean paths" This reverts commit 2e32fca2c0f5252864d348df929d9858486763b1. The fix there is incorrect as it breaks QFileInfo autotests. --- src/corelib/io/qfileinfo.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp index e317d1e..ff328da 100644 --- a/src/corelib/io/qfileinfo.cpp +++ b/src/corelib/io/qfileinfo.cpp @@ -76,9 +76,7 @@ QString QFileInfoPrivate::getFileName(QAbstractFileEngine::FileName name) const break; case QAbstractFileEngine::AbsoluteName: case QAbstractFileEngine::AbsolutePathName: { - QFileSystemEntry entry = QFileSystemEntry( - QDir::cleanPath(QFileSystemEngine::absoluteName(fileEntry).filePath()), - QFileSystemEntry::FromInternalPath()); + QFileSystemEntry entry = QFileSystemEngine::absoluteName(fileEntry); if (cache_enabled) { // be smart and store both fileNames[QAbstractFileEngine::AbsoluteName] = entry.filePath(); fileNames[QAbstractFileEngine::AbsolutePathName] = entry.path(); -- cgit v0.12 From 7b45a4cbf7593c8d7a837d826d9827fee243c46c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao.abecasis@nokia.com> Date: Fri, 26 Aug 2011 17:58:27 +0200 Subject: Revert "Don't second-guess the "engine"; call cleanPath on absolutePaths" This reverts commit 07afddbf4bc029f776810381c7317fffa100eb60. This breaks QDir autotests on windows. --- src/corelib/io/qdir.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index cbe635f..c0c62e1 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -197,10 +197,16 @@ inline void QDirPrivate::resolveAbsoluteEntry() const return; QString absoluteName; - if (fileEngine.isNull()) + if (fileEngine.isNull()) { + if (!dirEntry.isRelative()) { + absoluteDirEntry = dirEntry; + return; + } + absoluteName = QFileSystemEngine::absoluteName(dirEntry).filePath(); - else + } else { absoluteName = fileEngine->fileName(QAbstractFileEngine::AbsoluteName); + } absoluteDirEntry = QFileSystemEntry(QDir::cleanPath(absoluteName), QFileSystemEntry::FromInternalPath()); } -- cgit v0.12 From fe2da7c82f52e16b87569fe8ef3561014bc8c854 Mon Sep 17 00:00:00 2001 From: Ademar de Souza Reis Jr <ademar.reis@openbossa.org> Date: Fri, 26 Aug 2011 18:12:05 -0300 Subject: Updated WebKit to dda59e50379214c098f365a39c4d64b39ced427e --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/ChangeLog | 23 +++++++++ .../webkit/Source/JavaScriptCore/ChangeLog | 23 +++++++++ .../webkit/Source/JavaScriptCore/wtf/Platform.h | 4 ++ src/3rdparty/webkit/Source/WebKit.pri | 3 ++ src/3rdparty/webkit/Source/WebKit/qt/ChangeLog | 33 ------------- .../WebKit/qt/tests/qwebframe/tst_qwebframe.cpp | 57 ++++++---------------- src/3rdparty/webkit/VERSION | 2 +- 8 files changed, 69 insertions(+), 78 deletions(-) diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 0b8bae5..a560e52 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -85d4df147ac7b239497b05979a51fd6fde7580fd +dda59e50379214c098f365a39c4d64b39ced427e diff --git a/src/3rdparty/webkit/ChangeLog b/src/3rdparty/webkit/ChangeLog index bc11b4d..5f97e57 100644 --- a/src/3rdparty/webkit/ChangeLog +++ b/src/3rdparty/webkit/ChangeLog @@ -1,3 +1,26 @@ +2011-08-26 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> + + [Qt] libwebcore.a source is compiled without -fvisibility=hidden + -fvisibility-inlines-hidden + https://bugs.webkit.org/show_bug.cgi?id=65470 + + Patch by Holger Freyther <zecke@selfish.org> + Rubberstamped by Andreas Kling. + + (qtwebkit-2.2 only by now) + + WTF_USE_EXPORT_MACROS is still not enabled on trunk because there are + pending issues with WebKit2, but it appears to be safe to enable this + on QtWebKit, so this change is being added to the qtwebkit-2.2 branch. + + The patch also adds CONFIG += hide_symbols and on Unix, += + bsymbolic_functions, which should help reduce the library binary size. + + Testing this is quite easy, so if there's any problem we'll soon + know. :-) + + * Source/WebKit.pri: + 2011-08-06 Aron Rosenberg <arosenberg@logitech.com> Reviewed by Benjamin Poulain. diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog index ce9eee0..010e66a 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog +++ b/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog @@ -1,3 +1,26 @@ +2011-08-26 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> + + [Qt] libwebcore.a source is compiled without -fvisibility=hidden + -fvisibility-inlines-hidden + https://bugs.webkit.org/show_bug.cgi?id=65470 + + Patch by Holger Freyther <zecke@selfish.org> + Rubberstamped by Andreas Kling. + + (qtwebkit-2.2 only by now) + + WTF_USE_EXPORT_MACROS is still not enabled on trunk because there are + pending issues with WebKit2, but it appears to be safe to enable this + on QtWebKit, so this change is being added to the qtwebkit-2.2 branch. + + The patch also adds CONFIG += hide_symbols and on Unix, += + bsymbolic_functions, which should help reduce the library binary size. + + Testing this is quite easy, so if there's any problem we'll soon + know. :-) + + * wtf/Platform.h: + 2011-07-08 Chang Shu <cshu@webkit.org> Rename "makeSecure" to "fill" and remove the support for displaying last character diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h index 55f0b58..8309acc 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h @@ -1221,7 +1221,11 @@ since most ports try to support sub-project independence, adding new headers to WTF causes many ports to break, and so this way we can address the build breakages one port at a time. */ +#if PLATFORM(QT) +#define WTF_USE_EXPORT_MACROS 1 +#else #define WTF_USE_EXPORT_MACROS 0 +#endif #if PLATFORM(QT) || PLATFORM(GTK) #define WTF_USE_UNIX_DOMAIN_SOCKETS 1 diff --git a/src/3rdparty/webkit/Source/WebKit.pri b/src/3rdparty/webkit/Source/WebKit.pri index 5bd9577..be1c7b7 100644 --- a/src/3rdparty/webkit/Source/WebKit.pri +++ b/src/3rdparty/webkit/Source/WebKit.pri @@ -2,6 +2,9 @@ contains(QT_CONFIG, qpa)|contains(QT_CONFIG, embedded): CONFIG += embedded +contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols +unix:contains(QT_CONFIG, reduce_relocations):CONFIG += bsymbolic_functions + # Detect that we are building as a standalone package by the presence of # either the generated files directory or as part of the Qt package through # QTDIR_build diff --git a/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog b/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog index 33ee4c2..0bca4b2 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog @@ -254,22 +254,6 @@ (WebCore::ChromeClientQt::allowsAcceleratedCompositing): * WebCoreSupport/ChromeClientQt.h: -2011-07-05 Rafael Brandao <rafael.lobo@openbossa.org> - - [Qt] Fix tst_QWebFrame::setHtmlWithResource() API test - https://bugs.webkit.org/show_bug.cgi?id=63235 - - Modified baseUrl to be a local file in order to get a security origin - that is allowed to request local resources. Removed QSignalSpy from it - as loadFinished always happens, and the original test was split into two. - - Reviewed by Benjamin Poulain. - - * tests/qwebframe/tst_qwebframe.cpp: - (tst_QWebFrame::setHtmlWithImageResource): - (tst_QWebFrame::setHtmlWithStylesheetResource): - (tst_QWebFrame::setHtmlWithBaseURL): - 2011-07-01 Jade Han <jade.han@nokia.com> [Qt][Symbian] Update .def file for Symbian to build Tools @@ -336,23 +320,6 @@ Rubber-stamped by Andreas Kling. - [Qt] Fix tst_QWebFrame::setHtmlWithResource() API test - https://bugs.webkit.org/show_bug.cgi?id=63235 - - [Qt] Fix tst_QWebFrame::renderGeometry() API test - https://bugs.webkit.org/show_bug.cgi?id=63236 - - [Qt] Fix tst_QWebFrame::setUrlWithPendingLoads() API test - https://bugs.webkit.org/show_bug.cgi?id=63237 - - * tests/qwebframe/tst_qwebframe.cpp: Mark failing test cases as expected fails until real fix. - (tst_QWebFrame::setHtmlWithResource): - (tst_QWebFrame::renderGeometry): - -2011-06-23 Csaba Osztrogonác <ossy@webkit.org> - - Rubber-stamped by Andreas Kling. - [Qt] Fix tst_QWebPage::showModalDialog() API test https://bugs.webkit.org/show_bug.cgi?id=63244 diff --git a/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp b/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp index b423317..c9e862a 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp @@ -619,8 +619,7 @@ private slots: void javaScriptWindowObjectCleared(); void javaScriptWindowObjectClearedOnEvaluate(); void setHtml(); - void setHtmlWithImageResource(); - void setHtmlWithStylesheetResource(); + void setHtmlWithResource(); void setHtmlWithBaseURL(); void setHtmlWithJSAlert(); void ipv6HostEncoding(); @@ -650,7 +649,7 @@ private slots: void setContent_data(); void setContent(); void setCacheLoadControlAttribute(); - //void setUrlWithPendingLoads(); + void setUrlWithPendingLoads(); void setUrlWithFragment_data(); void setUrlWithFragment(); void setUrlToEmpty(); @@ -2500,37 +2499,24 @@ void tst_QWebFrame::setHtml() QCOMPARE(spy.count(), 1); } -void tst_QWebFrame::setHtmlWithImageResource() +void tst_QWebFrame::setHtmlWithResource() { - // By default, only security origins of local files can load local resources. - // So we should specify baseUrl to be a local file in order to get a proper origin and load the local image. + QString html("<html><body><p>hello world</p><img src='qrc:/image.png'/></body></html>"); - QLatin1String html("<html><body><p>hello world</p><img src='qrc:/image.png'/></body></html>"); QWebPage page; QWebFrame* frame = page.mainFrame(); - frame->setHtml(html, QUrl(QLatin1String("file:///path/to/file"))); + // in few seconds, the image should be completey loaded + QSignalSpy spy(&page, SIGNAL(loadFinished(bool))); + frame->setHtml(html); waitForSignal(frame, SIGNAL(loadFinished(bool)), 200); + QCOMPARE(spy.count(), 1); QCOMPARE(frame->evaluateJavaScript("document.images.length").toInt(), 1); QCOMPARE(frame->evaluateJavaScript("document.images[0].width").toInt(), 128); QCOMPARE(frame->evaluateJavaScript("document.images[0].height").toInt(), 128); - // Now we test the opposite: without a baseUrl as a local file, we cannot request local resources. - - frame->setHtml(html); - waitForSignal(frame, SIGNAL(loadFinished(bool)), 200); - QCOMPARE(frame->evaluateJavaScript("document.images.length").toInt(), 1); - QCOMPARE(frame->evaluateJavaScript("document.images[0].width").toInt(), 0); - QCOMPARE(frame->evaluateJavaScript("document.images[0].height").toInt(), 0); -} - -void tst_QWebFrame::setHtmlWithStylesheetResource() -{ - // By default, only security origins of local files can load local resources. - // So we should specify baseUrl to be a local file in order to be able to download the local stylesheet. - - const char* htmlData = + QString html2 = "<html>" "<head>" "<link rel='stylesheet' href='qrc:/style.css' type='text/css' />" @@ -2539,29 +2525,18 @@ void tst_QWebFrame::setHtmlWithStylesheetResource() "<p id='idP'>some text</p>" "</body>" "</html>"; - QLatin1String html(htmlData); - QWebPage page; - QWebFrame* frame = page.mainFrame(); - QWebElement webElement; - frame->setHtml(html, QUrl(QLatin1String("qrc:///file"))); + // in few seconds, the CSS should be completey loaded + frame->setHtml(html2); waitForSignal(frame, SIGNAL(loadFinished(bool)), 200); - webElement = frame->documentElement().findFirst("p"); - QCOMPARE(webElement.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("red")); + QCOMPARE(spy.size(), 2); - // Now we test the opposite: without a baseUrl as a local file, we cannot request local resources. - - frame->setHtml(html, QUrl(QLatin1String("http://www.example.com/"))); - waitForSignal(frame, SIGNAL(loadFinished(bool)), 200); - webElement = frame->documentElement().findFirst("p"); - QCOMPARE(webElement.styleProperty("color", QWebElement::CascadedStyle), QString()); + QWebElement p = frame->documentElement().findAll("p").at(0); + QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("red")); } void tst_QWebFrame::setHtmlWithBaseURL() { - // This tests if baseUrl is indeed affecting the relative paths from resources. - // As we are using a local file as baseUrl, its security origin should be able to load local resources. - if (!QDir(TESTS_SOURCE_DIR).exists()) QSKIP(QString("This test requires access to resources found in '%1'").arg(TESTS_SOURCE_DIR).toLatin1().constData(), SkipAll); @@ -3391,16 +3366,12 @@ void tst_QWebFrame::webElementSlotOnly() QCOMPARE(evalJS("myWebElementSlotObject.tagName"), QString("BODY")); } -// [Qt] Fix tst_QWebFrame::setUrlWithPendingLoads() API test -// https://bugs.webkit.org/show_bug.cgi?id=63237 -/* void tst_QWebFrame::setUrlWithPendingLoads() { QWebPage page; page.mainFrame()->setHtml("<img src='dummy:'/>"); page.mainFrame()->setUrl(QUrl("about:blank")); } -*/ void tst_QWebFrame::setUrlWithFragment_data() { diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index a6f6ced..413f504 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - 85d4df147ac7b239497b05979a51fd6fde7580fd + dda59e50379214c098f365a39c4d64b39ced427e -- cgit v0.12 From 53794d94994cb3149581b1a91762dfa2d6defac0 Mon Sep 17 00:00:00 2001 From: Rohan McGovern <rohan.mcgovern@nokia.com> Date: Fri, 19 Aug 2011 09:03:51 +1000 Subject: Do not unconditionally use pkg-config in .pro files Using the first pkg-config in PATH is prone to errors when cross compiling. This is a known issue, and `configure' already avoids using pkg-config for cross compiling (unless -force-pkg-config is used). However, there was previously no way for a .pro file to test whether or not the user had passed -force-pkg-config. Let !contains(QT_CONFIG, no-pkg-config) be used to test whether or not it is safe to run pkg-config. --- configure | 4 ++++ src/3rdparty/webkit/Source/JavaScriptCore/wtf/wtf.pri | 2 +- src/3rdparty/webkit/Source/WebCore/features.pri | 2 +- src/plugins/platforms/wayland/wayland.pro | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/configure b/configure index ec04414..a0e237e 100755 --- a/configure +++ b/configure @@ -3269,6 +3269,10 @@ if [ "$QT_CROSS_COMPILE" = "yes" ]; then fi fi +if [ ! -n "$PKG_CONFIG" ]; then + QT_CONFIG="$QT_CONFIG no-pkg-config" +fi + # process CFG_MAC_ARCHS if [ "$PLATFORM_MAC" = "yes" ]; then # check -arch arguments for validity. diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/wtf.pri b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/wtf.pri index 5e48f9a..5af613e 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/wtf.pri +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/wtf.pri @@ -42,7 +42,7 @@ SOURCES += \ wtf/unicode/UTF8.cpp linux-*:!contains(DEFINES, USE_QTMULTIMEDIA=1) { - system(pkg-config --exists glib-2.0 gio-2.0 gstreamer-0.10): { + !contains(QT_CONFIG, no-pkg-config):system(pkg-config --exists glib-2.0 gio-2.0 gstreamer-0.10) { DEFINES += ENABLE_GLIB_SUPPORT=1 PKGCONFIG += glib-2.0 gio-2.0 CONFIG += link_pkgconfig diff --git a/src/3rdparty/webkit/Source/WebCore/features.pri b/src/3rdparty/webkit/Source/WebCore/features.pri index 2db8eb5..3e397a1 100644 --- a/src/3rdparty/webkit/Source/WebCore/features.pri +++ b/src/3rdparty/webkit/Source/WebCore/features.pri @@ -168,7 +168,7 @@ symbian|maemo5|maemo6 { DEFINES += WTF_USE_QTKIT=1 DEFINES -= WTF_USE_QTKIT=0 } else: linux-*:!contains(DEFINES, USE_QTMULTIMEDIA=1) { - system(pkg-config --exists glib-2.0 gio-2.0 gstreamer-0.10): { + !contains(QT_CONFIG, no-pkg-config):system(pkg-config --exists glib-2.0 gio-2.0 gstreamer-0.10) { DEFINES -= ENABLE_VIDEO=0 DEFINES += ENABLE_VIDEO=1 DEFINES += WTF_USE_GSTREAMER=1 diff --git a/src/plugins/platforms/wayland/wayland.pro b/src/plugins/platforms/wayland/wayland.pro index 5b20a87..cbd67ea 100644 --- a/src/plugins/platforms/wayland/wayland.pro +++ b/src/plugins/platforms/wayland/wayland.pro @@ -33,7 +33,7 @@ INCLUDEPATH += $$QMAKE_INCDIR_WAYLAND LIBS += $$QMAKE_LIBS_WAYLAND QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_WAYLAND -!isEmpty(QMAKE_LFLAGS_RPATH) { +!isEmpty(QMAKE_LFLAGS_RPATH):!contains(QT_CONFIG, no-pkg-config) { WAYLAND_NEEDS_RPATH = $$system(pkg-config --libs-only-L wayland-client) !isEmpty(WAYLAND_NEEDS_RPATH) { !isEmpty(QMAKE_LIBDIR_WAYLAND):QMAKE_LFLAGS += $${QMAKE_LFLAGS_RPATH}$${QMAKE_LIBDIR_WAYLAND} -- cgit v0.12 From b64817858484db6e7c280d41ed81d4c87dff2275 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Mon, 29 Aug 2011 16:35:23 +1000 Subject: Fix conversion of QAbstractItemModel::rowsMoved() parameters VisualDataModel was emitting itemsMoved() signal with incorrect "to" value when multiple items were moved forwards. Reviewed-by: Martin Jones --- .../graphicsitems/qdeclarativevisualitemmodel.cpp | 2 +- .../tst_qdeclarativevisualdatamodel.cpp | 79 +++++++++++++++++++++- 2 files changed, 77 insertions(+), 4 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index 26757b5..b896a77 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -1375,7 +1375,7 @@ void QDeclarativeVisualDataModel::_q_rowsMoved(const QModelIndex &sourceParent, Q_D(QDeclarativeVisualDataModel); const int count = sourceEnd - sourceStart + 1; if (destinationParent == d->m_root && sourceParent == d->m_root) { - _q_itemsMoved(sourceStart, sourceStart > destinationRow ? destinationRow : destinationRow-1, count); + _q_itemsMoved(sourceStart, sourceStart > destinationRow ? destinationRow : destinationRow-count, count); } else if (sourceParent == d->m_root) { _q_itemsRemoved(sourceStart, count); } else if (destinationParent == d->m_root) { diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp index 39c3a94..ec22768 100644 --- a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp +++ b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp @@ -38,6 +38,7 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +#include "../../../shared/util.h" #include <qtest.h> #include <QtTest/QSignalSpy> #include <QStandardItemModel> @@ -87,6 +88,13 @@ public: list << "one" << "two" << "three" << "four"; } + void emitMove(int sourceFirst, int sourceLast, int destinationChild) { + emit beginMoveRows(QModelIndex(), sourceFirst, sourceLast, QModelIndex(), destinationChild); + emit endMoveRows(); + } + + QStringList list; + public slots: void set(int idx, QString string) { list[idx] = string; @@ -102,9 +110,6 @@ protected: return list.at(index.row()); return QVariant(); } - -private: - QStringList list; }; @@ -122,6 +127,8 @@ private slots: void singleRole(); void modelProperties(); void noDelegate(); + void qaimRowsMoved(); + void qaimRowsMoved_data(); private: QDeclarativeEngine engine; @@ -501,6 +508,72 @@ void tst_qdeclarativevisualdatamodel::noDelegate() } +void tst_qdeclarativevisualdatamodel::qaimRowsMoved() +{ + // Test parameters passed in QAIM::rowsMoved() signal are converted correctly + // when translated and emitted as the QListModelInterface::itemsMoved() signal + QFETCH(int, sourceFirst); + QFETCH(int, sourceLast); + QFETCH(int, destinationChild); + QFETCH(int, expectFrom); + QFETCH(int, expectTo); + QFETCH(int, expectCount); + + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/visualdatamodel.qml")); + + SingleRoleModel model; + model.list.clear(); + for (int i=0; i<30; i++) + model.list << ("item " + i); + engine.rootContext()->setContextProperty("myModel", &model); + + QDeclarativeVisualDataModel *obj = qobject_cast<QDeclarativeVisualDataModel*>(c.create()); + QVERIFY(obj != 0); + + QSignalSpy spy(obj, SIGNAL(itemsMoved(int,int,int))); + model.emitMove(sourceFirst, sourceLast, destinationChild); + QTRY_COMPARE(spy.count(), 1); + + QCOMPARE(spy[0].count(), 3); + QCOMPARE(spy[0][0].toInt(), expectFrom); + QCOMPARE(spy[0][1].toInt(), expectTo); + QCOMPARE(spy[0][2].toInt(), expectCount); + + delete obj; +} + +void tst_qdeclarativevisualdatamodel::qaimRowsMoved_data() +{ + QTest::addColumn<int>("sourceFirst"); + QTest::addColumn<int>("sourceLast"); + QTest::addColumn<int>("destinationChild"); + QTest::addColumn<int>("expectFrom"); + QTest::addColumn<int>("expectTo"); + QTest::addColumn<int>("expectCount"); + + QTest::newRow("move 1 forward") + << 1 << 1 << 6 + << 1 << 5 << 1; + + QTest::newRow("move 1 backwards") + << 4 << 4 << 1 + << 4 << 1 << 1; + + QTest::newRow("move multiple forwards") + << 0 << 2 << 13 + << 0 << 10 << 3; + + QTest::newRow("move multiple forwards, with same to") + << 0 << 1 << 3 + << 0 << 1 << 2; + + QTest::newRow("move multiple backwards") + << 10 << 14 << 1 + << 10 << 1 << 5; +} + + template<typename T> T *tst_qdeclarativevisualdatamodel::findItem(QGraphicsObject *parent, const QString &objectName, int index) { -- cgit v0.12 From d6e19d1ecd9f8a26bbd2c3f38083da98c97d599e Mon Sep 17 00:00:00 2001 From: Alan Alpert <alan.alpert@nokia.com> Date: Mon, 15 Aug 2011 13:44:44 +1000 Subject: FocusScope's focusItem must always be a descendent Task-number: QTBUG-20699 Reviewed-by: Michael Brasser --- src/gui/graphicsview/qgraphicsitem.cpp | 34 ++++++++++++++------------ tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 32 ++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 16 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 2ac2bdf..0c218fc 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -1171,24 +1171,26 @@ void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent, const Q // Update focus scope item ptr in new scope. QGraphicsItem *newFocusScopeItem = subFocusItem ? subFocusItem : parentFocusScopeItem; if (newFocusScopeItem && newParent) { - if (subFocusItem) { - // Find the subFocusItem's topmost focus scope. - QGraphicsItem *ancestorScope = 0; - QGraphicsItem *p = subFocusItem->d_ptr->parent; - while (p) { - if (p->d_ptr->flags & QGraphicsItem::ItemIsFocusScope) - ancestorScope = p; - if (p->d_ptr->flags & QGraphicsItem::ItemIsPanel) - break; - p = p->d_ptr->parent; - } - if (ancestorScope) - newFocusScopeItem = ancestorScope; - } - QGraphicsItem *p = newParent; while (p) { if (p->d_ptr->flags & QGraphicsItem::ItemIsFocusScope) { + if (subFocusItem && subFocusItem != q_ptr) { + // Find the subFocusItem's topmost focus scope within the new parent's focusscope + QGraphicsItem *ancestorScope = 0; + QGraphicsItem *p2 = subFocusItem->d_ptr->parent; + while (p2 && p2 != p) { + if (p2->d_ptr->flags & QGraphicsItem::ItemIsFocusScope) + ancestorScope = p2; + if (p2->d_ptr->flags & QGraphicsItem::ItemIsPanel) + break; + if (p2 == q_ptr) + break; + p2 = p2->d_ptr->parent; + } + if (ancestorScope) + newFocusScopeItem = ancestorScope; + } + p->d_ptr->focusScopeItem = newFocusScopeItem; newFocusScopeItem->d_ptr->focusScopeItemChange(true); // Ensure the new item is no longer the subFocusItem. The @@ -3297,7 +3299,7 @@ void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool clim } if (climb) { - while (f->d_ptr->focusScopeItem && f->d_ptr->focusScopeItem->isVisible() && f->d_ptr->focusScopeItem != f) + while (f->d_ptr->focusScopeItem && f->d_ptr->focusScopeItem->isVisible()) f = f->d_ptr->focusScopeItem; } diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index 3665b10..9b834d5 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -475,6 +475,7 @@ private slots: void QTBUG_12112_focusItem(); void QTBUG_13473_sceneposchange(); void QTBUG_16374_crashInDestructor(); + void QTBUG_20699_focusScopeCrash(); private: QList<QGraphicsItem *> paintedItems; @@ -11265,5 +11266,36 @@ void tst_QGraphicsItem::QTBUG_16374_crashInDestructor() QTest::qWaitForWindowShown(&view); } +void tst_QGraphicsItem::QTBUG_20699_focusScopeCrash() +{ + QGraphicsScene scene; + QGraphicsView view(&scene); + QGraphicsPixmapItem fs; + fs.setFlags(QGraphicsItem::ItemIsFocusScope | QGraphicsItem::ItemIsFocusable); + scene.addItem(&fs); + QGraphicsPixmapItem* fs2 = new QGraphicsPixmapItem(&fs); + fs2->setFlags(QGraphicsItem::ItemIsFocusScope | QGraphicsItem::ItemIsFocusable); + QGraphicsPixmapItem* fi2 = new QGraphicsPixmapItem(&fs); + fi2->setFlags(QGraphicsItem::ItemIsFocusable); + QGraphicsPixmapItem* fi = new QGraphicsPixmapItem(fs2); + fi->setFlags(QGraphicsItem::ItemIsFocusable); + fs.setFocus(); + fi->setFocus(); + + view.show(); + QTest::qWaitForWindowShown(&view); + + fi->setParentItem(fi2); + fi->setFocus(); + fs.setFocus(); + fi->setParentItem(fs2); + fi->setFocus(); + fs2->setFocus(); + fs.setFocus(); + fi->setParentItem(fi2); + fi->setFocus(); + fs.setFocus(); +} + QTEST_MAIN(tst_QGraphicsItem) #include "tst_qgraphicsitem.moc" -- cgit v0.12 From a1b2be3c8a64aee832c648c6dcdff003f22318a3 Mon Sep 17 00:00:00 2001 From: Alan Alpert <alan.alpert@nokia.com> Date: Tue, 30 Aug 2011 18:03:32 +1000 Subject: QDeclarative::hasActiveFocus should return false for hidden items In graphics view you can be the focus item without being visible, but you still won't receive events. QML should hide these distinctions. Task-number: QTBUG-21045 --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 4 ++-- .../declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index d36d163..b9d231e 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -3600,8 +3600,8 @@ void QDeclarativeItem::setSize(const QSizeF &size) bool QDeclarativeItem::hasActiveFocus() const { Q_D(const QDeclarativeItem); - return focusItem() == this || - (d->flags & QGraphicsItem::ItemIsFocusScope && focusItem() != 0); + return (focusItem() && focusItem()->isVisible()) && (focusItem() == this || + (d->flags & QGraphicsItem::ItemIsFocusScope && focusItem() != 0)); } /*! diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index 362a8ff..2fdeb71 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -90,6 +90,7 @@ private slots: void testQtQuick11Attributes(); void testQtQuick11Attributes_data(); void qtbug_16871(); + void qtbug_21045(); private: QDeclarativeEngine engine; }; @@ -1238,6 +1239,18 @@ void tst_QDeclarativeItem::qtbug_16871() delete o; } +void tst_QDeclarativeItem::qtbug_21045() +{ + QDeclarativeComponent component(&engine); + QGraphicsScene scene; + component.setData("import QtQuick 1.1\nItem{visible: false; focus: true}", QUrl::fromLocalFile("file:")); + QObject *o = component.create(); + QDeclarativeItem* i = qobject_cast<QDeclarativeItem*>(o); + QVERIFY(i); + scene.addItem(i); + QVERIFY(!i->hasActiveFocus()); +} + QTEST_MAIN(tst_QDeclarativeItem) #include "tst_qdeclarativeitem.moc" -- cgit v0.12 From 70f6a1b91b242174682c30be976c2aa36c450cc7 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Tue, 30 Aug 2011 11:33:01 +0200 Subject: QSslCertificate: blacklist fraudulent *.google.com blacklist the leaf certificate for now. There might well be more fake certificates in the wild, for that either the Diginotar.nl root cert needs to be disabled on the system or OCSP would need to be enabled (not supported by Qt yet). Reviewed-by: Richard J. Moore <rich@kde.org> --- src/network/ssl/qsslcertificate.cpp | 1 + .../blacklisted-google.com-diginotar.pem | 30 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 tests/auto/qsslcertificate/more-certificates/blacklisted-google.com-diginotar.pem diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index 76b7d41..8bf1fb7 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -792,6 +792,7 @@ static const char *certificate_blacklist[] = { "92:39:d5:34:8f:40:d1:69:5a:74:54:70:e1:f2:3f:43", "b0:b7:13:3e:d0:96:f9:b5:6f:ae:91:c8:74:bd:3a:c0", "d8:f3:5f:4e:b7:87:2b:2d:ab:06:92:e3:15:38:2f:b0", + "05:e2:e6:a4:cd:09:ea:54:d6:65:b0:75:fe:22:a2:56", 0 }; diff --git a/tests/auto/qsslcertificate/more-certificates/blacklisted-google.com-diginotar.pem b/tests/auto/qsslcertificate/more-certificates/blacklisted-google.com-diginotar.pem new file mode 100644 index 0000000..12bbcae --- /dev/null +++ b/tests/auto/qsslcertificate/more-certificates/blacklisted-google.com-diginotar.pem @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFKDCCBBCgAwIBAgIQBeLmpM0J6lTWZbB1/iKiVjANBgkqhkiG9w0BAQUFADBm +MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdp +Tm90YXIgUHVibGljIENBIDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5v +dGFyLm5sMB4XDTExMDcxMDE5MDYzMFoXDTEzMDcwOTE5MDYzMFowajELMAkGA1UE +BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxFjAUBgNVBAcTDU1vdW50YWluIFZp +ZXcxFzAVBgNVBAUTDlBLMDAwMjI5MjAwMDAyMRUwEwYDVQQDEwwqLmdvb2dsZS5j +b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNbeKubCV0aCxhOiOS +CSQ/w9HXTYuD5BLKuiqXNw3setdTymeJz2L8aWOHo3nicFNDVwWTgwWomGNr2J6Q +7g1iINNSW0rR4E1l2szRkcnAY6c6i/Eke93nF4i2hDsnIBveolF5yjpuRm73uQQD +ulHjA3BFRF/PTi0fw2/Yt+8ieoMuNcMWN6Eou5Gqt5YZkWv176ofeCbsBmMrP87x +OhhtTDckCapk4VQZG2XrfzZcV6tdzCp5TI8uHdu17cdzXm1imZ8tyvzFeiCEOQN8 +vPNzB/fIr3CJQ5q4uM5aKT3DD5PeVzf4rfJKQNgCTWiIBc9XcWEUuszwAsnmg7e2 +EJRdAgMBAAGjggHMMIIByDA6BggrBgEFBQcBAQQuMCwwKgYIKwYBBQUHMAGGHmh0 +dHA6Ly92YWxpZGF0aW9uLmRpZ2lub3Rhci5ubDAfBgNVHSMEGDAWgBTfM8Cvkv43 +/LbYFhbQ2bGR1fpupTAJBgNVHRMEAjAAMIHGBgNVHSAEgb4wgbswgbgGDmCEEAGH +aQEBAQIEAQICMIGlMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2lub3Rhci5u +bC9jcHMwegYIKwYBBQUHAgIwbhpsQ29uZGl0aW9ucywgYXMgbWVudGlvbmVkIG9u +IG91ciB3ZWJzaXRlICh3d3cuZGlnaW5vdGFyLm5sKSwgYXJlIGFwcGxpY2FibGUg +dG8gYWxsIG91ciBwcm9kdWN0cyBhbmQgc2VydmljZXMuMEkGA1UdHwRCMEAwPqA8 +oDqGOGh0dHA6Ly9zZXJ2aWNlLmRpZ2lub3Rhci5ubC9jcmwvcHVibGljMjAyNS9s +YXRlc3RDUkwuY3JsMA4GA1UdDwEB/wQEAwIEsDAbBgNVHREEFDASgRBhZG1pbkBn +b29nbGUuY29tMB0GA1UdDgQWBBQHSn0WJzIo0eMBMQUNsMqN6eF/7TANBgkqhkiG +9w0BAQUFAAOCAQEAAs5dL7N9wzRJkI4Aq4lC5t8j5ZadqnqUcgYLADzSv4ExytNH +UY2nH6iVTihC0UPSsILWraoeApdT7Rphz/8DLQEBRGdeKWAptNM3EbiXtQaZT2uB +pidL8UoafX0kch3f71Y1scpBEjvu5ZZLnjg0A8AL0tnsereOVdDpU98bKqdbbrnM +FRmBlSf7xdaNca6JJHeEpga4E9Ty683CmccrSGXdU2tTCuHEJww+iOAUtPIZcsum +U7/eYeY1pMyGLyIjbNgRY7nDzRwvM/BsbL9eh4/mSQj/4nncqJd22sVQpCggQiVK +baB2sVGcVNBkK55bT8gPqnx8JypubyUvayzZGg== +-----END CERTIFICATE----- -- cgit v0.12 From 2523d20027404fb09f6feb52b06b25ee604accb9 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Tue, 30 Aug 2011 11:43:17 +0200 Subject: Doc: added since tag to QDateTime::msecsTo --- src/corelib/tools/qdatetime.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index d915989..e33b7d5 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -2788,6 +2788,8 @@ int QDateTime::secsTo(const QDateTime &other) const } /*! + \since 4.7 + Returns the number of milliseconds from this datetime to the \a other datetime. If the \a other datetime is earlier than this datetime, the value returned is negative. -- cgit v0.12 From e95de30977291a251660f72baa84b5ff244711fb Mon Sep 17 00:00:00 2001 From: Konstantin Ritt <ritt.ks@gmail.com> Date: Tue, 30 Aug 2011 12:34:31 +0400 Subject: don't crash when destroying the shortcuts as shortcutDestroyed(..) modifies the shortcuts list. disconnect from shortcutDestroyed() first, or operate on a detach()-ed list this was uncovered by QList::removaAll() optimization patch. --- tests/auto/qshortcut/tst_qshortcut.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/auto/qshortcut/tst_qshortcut.cpp b/tests/auto/qshortcut/tst_qshortcut.cpp index a78e8cf..d761b19 100644 --- a/tests/auto/qshortcut/tst_qshortcut.cpp +++ b/tests/auto/qshortcut/tst_qshortcut.cpp @@ -1124,7 +1124,8 @@ void tst_QShortcut::context() // ------------------------------------------------------------------ void tst_QShortcut::clearAllShortcuts() { - qDeleteAll(shortcuts); + QList<QShortcut *> shortcutsCpy = shortcuts; + qDeleteAll(shortcutsCpy); shortcuts.clear(); } -- cgit v0.12 From a3d22777028b102b7f65cf2db9719f5d57308b04 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Tue, 30 Aug 2011 12:24:30 +0200 Subject: QSslCertificate: regenerate blacklisted certificates, they were expired regenerating blacklisted certificates with same serial number and common name, but longer validity: Now they are valid for 10 years. --- .../more-certificates/blacklisted1.pem | 20 ++++++++++---------- .../more-certificates/blacklisted2.pem | 20 ++++++++++---------- .../more-certificates/blacklisted3.pem | 20 ++++++++++---------- .../more-certificates/blacklisted4.pem | 20 ++++++++++---------- .../more-certificates/blacklisted5.pem | 20 ++++++++++---------- .../more-certificates/blacklisted6.pem | 20 ++++++++++---------- .../more-certificates/blacklisted7.pem | 20 ++++++++++---------- .../more-certificates/blacklisted8.pem | 20 ++++++++++---------- .../more-certificates/blacklisted9.pem | 20 ++++++++++---------- 9 files changed, 90 insertions(+), 90 deletions(-) diff --git a/tests/auto/qsslcertificate/more-certificates/blacklisted1.pem b/tests/auto/qsslcertificate/more-certificates/blacklisted1.pem index 3945aea..7fc0a05 100644 --- a/tests/auto/qsslcertificate/more-certificates/blacklisted1.pem +++ b/tests/auto/qsslcertificate/more-certificates/blacklisted1.pem @@ -2,18 +2,18 @@ MIIDDzCCAnigAwIBAgIQBH7L6fylX3vQnq424QyuHjANBgkqhkiG9w0BAQUFADBf MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50 ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRgwFgYDVQQDEw9tYWlsLmdvb2dsZS5jb20w -HhcNMTEwMzI0MTMwNjI1WhcNMTEwNDIzMTMwNjI1WjBfMQswCQYDVQQGEwJBVTET +HhcNMTEwODMwMTAxOTI2WhcNMjEwODI3MTAxOTI2WjBfMQswCQYDVQQGEwJBVTET MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ dHkgTHRkMRgwFgYDVQQDEw9tYWlsLmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEB -BQADgY0AMIGJAoGBAOeAGV2FbGnT4rLjTvCNEEDjj0/iIUATa6RT8WKF2PVaOzbE -oceiODx6hTStvBnCgs+h/d3eVKgp+uAyBde5sW/HlOwHrNgKF3ZDvxegzIOEHaVI -ndNtBpFS3UyOEkO0NxfioBatNRYpeTRU/DVmazu3yvzgrV1V2mDsrNngVWxJAgMB -AAGjgcswgcgwHQYDVR0OBBYEFHcF1eqRpm7B78aY8ZjseN6zSYbvMIGYBgNVHSME -gZAwgY2AFHcF1eqRpm7B78aY8ZjseN6zSYbvoWOkYTBfMQswCQYDVQQGEwJBVTET +BQADgY0AMIGJAoGBANOvJQGm9vyX8f61SP1XDp23sEDS2SAsDNIxdeONmFthfQRh +EBlJMNDByegnImZPMN4tA2T2iKcvdkxyQhC9vnQ+HEqJxxu0EhOwO+UdsSII7Lns +yQZVj2QAoTvC0+MFHPo+wl39JEe3ZytNwQZLjfZSLdS/j0cAyoTkFNconK0bAgMB +AAGjgcswgcgwHQYDVR0OBBYEFGFxxhfk1fvT8zPfLKPE0YYp9HZEMIGYBgNVHSME +gZAwgY2AFGFxxhfk1fvT8zPfLKPE0YYp9HZEoWOkYTBfMQswCQYDVQQGEwJBVTET MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ dHkgTHRkMRgwFgYDVQQDEw9tYWlsLmdvb2dsZS5jb22CEAR+y+n8pV970J6uNuEM -rh4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQBEb1iF+EbhAJli5Sj2 -+iEdJ5xMP8R6FtgqAYknqXD8+tyEyXxJXdN186qdAWuTD9N22AUqi61BPWxUkufW -xH8FYMEHdFCkitvYE0321+GT5pJz6ON/d5Co+wusumt7T5oSjzj8Ax9V+nmo3Nkb -dSANM4/Lnc6moijcpJZq+GC1ng== +rh4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQAldVSTJ4lNG9Qxx2GG +/y/ccH/BBYkpPXBklKP/U528Zk48jypWsbnZ07rQrPIlSXYQHffdNH3JsEiF/el9 +bIu+6tGJzmjqvtl5fD5S+yBvI3ySx3Fz6lWmUlqT6UY1X8Oob2PsR6u6mfT8Q1da +d02x97EUSiAzYvzxndqD6g8R1w== -----END CERTIFICATE----- diff --git a/tests/auto/qsslcertificate/more-certificates/blacklisted2.pem b/tests/auto/qsslcertificate/more-certificates/blacklisted2.pem index 4b8d059..3c8489f 100644 --- a/tests/auto/qsslcertificate/more-certificates/blacklisted2.pem +++ b/tests/auto/qsslcertificate/more-certificates/blacklisted2.pem @@ -2,18 +2,18 @@ MIIDDjCCAnegAwIBAgIRAPXIavNhYvE6ZPVPbclYfAYwDQYJKoZIhvcNAQEFBQAw XjELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGElu dGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEXMBUGA1UEAxMOd3d3Lmdvb2dsZS5jb20w -HhcNMTEwMzI0MTMwNzExWhcNMTEwNDIzMTMwNzExWjBeMQswCQYDVQQGEwJBVTET +HhcNMTEwODMwMTAxOTUxWhcNMjEwODI3MTAxOTUxWjBeMQswCQYDVQQGEwJBVTET MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ dHkgTHRkMRcwFQYDVQQDEw53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEF -AAOBjQAwgYkCgYEAy1fNDFl65Njfcd1EUJeaxvyiKln+JKlqUmk1x4mrE1BQoa0C -QZaiXAF21rDhivWejZWBiEQ4IWbg3b12ANY74G1KqAfLC4BNKS9UP94hy18vezRA -pFc+m/HAClwc8AdACpl8eZpQW8cMgdvnMBMZTrQkgV0JYykX+uDD9Tb+QNUCAwEA -AaOByzCByDAdBgNVHQ4EFgQUSelG6IVRj2ZQbp049zkQ0X/Po9wwgZgGA1UdIwSB -kDCBjYAUSelG6IVRj2ZQbp049zkQ0X/Po9yhYqRgMF4xCzAJBgNVBAYTAkFVMRMw +AAOBjQAwgYkCgYEAriNo6jkVPi+gyynL2YiPBqDsBa4MuM4rQwM7vcHDRO9GizKi +6gV7/loaqvr7zqKnHmoARP6OqxDMMEWfZ4QGJjToVKS6srE7dPJEh1lRzK+bsl02 +xGCP/RKJqnZcW1oUpFUceRBQ8TWynZ1L7cE/YUlOhqXnMO9aPibqbWj8AGcCAwEA +AaOByzCByDAdBgNVHQ4EFgQUo/E6UVU6oRgxQF8yftx0/9dvzMgwgZgGA1UdIwSB +kDCBjYAUo/E6UVU6oRgxQF8yftx0/9dvzMihYqRgMF4xCzAJBgNVBAYTAkFVMRMw EQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0 eSBMdGQxFzAVBgNVBAMTDnd3dy5nb29nbGUuY29tghEA9chq82Fi8Tpk9U9tyVh8 -BjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBALQyDC/AMQMNj2fa6E8L -umILCklWJwG1K1p/1bUAgm0CB8zm94n1xrh/ZK4+HS+k2a9OQmvLRbFyJn8Wua8p -3UU0267UNkCanA1FKHuO3Mo18wLvjMLWjjCQ4g1C9IvJx6P+8EFDQFG+MJBV/w2k -gJXXVl3q1T1dvahIgfav9QBL +BjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAESHOPB9eAsTKkO4lY8d +EKr2XrRqUkk5KqMFraAHWRekJFwl0R39Q6MDjRHr6NpPJkSKuBPppkr9nk6WDfpt +TG+oN3Yb1rFmJv6eZw8ud9btoquc8jAtaQnihbjFPEP9cCLBw3Gz1C/JBjDw1tgK +zXKNU+jMZYk7c5Z64DocggBH -----END CERTIFICATE----- diff --git a/tests/auto/qsslcertificate/more-certificates/blacklisted3.pem b/tests/auto/qsslcertificate/more-certificates/blacklisted3.pem index e47ece6..fa458cc 100644 --- a/tests/auto/qsslcertificate/more-certificates/blacklisted3.pem +++ b/tests/auto/qsslcertificate/more-certificates/blacklisted3.pem @@ -2,18 +2,18 @@ MIIDETCCAnqgAwIBAgIRANdVj9r18RBbshMoK3B3KaMwDQYJKoZIhvcNAQEFBQAw XzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGElu dGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAxMPbG9naW4ueWFob28uY29t -MB4XDTExMDMyNDEzMDg0MloXDTExMDQyMzEzMDg0MlowXzELMAkGA1UEBhMCQVUx +MB4XDTExMDgzMDEwMjAzNloXDTIxMDgyNzEwMjAzNlowXzELMAkGA1UEBhMCQVUx EzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMg UHR5IEx0ZDEYMBYGA1UEAxMPbG9naW4ueWFob28uY29tMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQCosFLKRvGtxjvdAjWdEAHYycFTa4VtdpXmCNhNHf2xbeLn -xzde10KjEe44pQxNI+UUD1rJkyuH6wUfloyefn0D2Mu+MvusmvOEzFosa4EDbK9s -BAAlsSiyJgrp/GgbEPq/XOl4XJRBIVP1WC6LllduNbskFCipDqS+HQwifXmmwQID -AQABo4HMMIHJMB0GA1UdDgQWBBSEgWnsoYtd5GEx/MGJvKxuIuROJzCBmQYDVR0j -BIGRMIGOgBSEgWnsoYtd5GEx/MGJvKxuIuROJ6FjpGEwXzELMAkGA1UEBhMCQVUx +AQUAA4GNADCBiQKBgQC3TVwiPfNClgadKYuX50szBlIaVWDd+UFHsakbGk0bgqlu +YKgC/cmbjgOyrmsEC2HbJISceTz9CK6mCewEgGFWuq6gjYi4UnSFk1o6h6WJV86A +tLpeVti7lN9/04IW7XHyxuhvS71V+JWlqfu3zboyaVoMIlHDrPFtRiAh7vTTjQID +AQABo4HMMIHJMB0GA1UdDgQWBBQrVExlI4rixsrub6IMDDsLPNB4ezCBmQYDVR0j +BIGRMIGOgBQrVExlI4rixsrub6IMDDsLPNB4e6FjpGEwXzELMAkGA1UEBhMCQVUx EzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMg UHR5IEx0ZDEYMBYGA1UEAxMPbG9naW4ueWFob28uY29tghEA11WP2vXxEFuyEygr -cHcpozAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAKNpIrzTOxIykKZt -EE6HU2nW1lrWUkIMjwjL8ntw7QI4JLMDN1ADVIxWaGTeQ+U/eXFou6dDNAYVAijK -ONDXgOItxW2YvSw0wOZsZj6INX2x88/0yRH+19TqaL/r+Y1D1h/0zefkHgfXufnY -Ex7BHju/rGBTp6R1mr+Tlh1tewva +cHcpozAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAFB5SF2ujZzH9KMj +m4ZDTsyy94/YQZdwgLncKUYTxmZe4BdX+42j799pCG+UeQGwqz9hU/soPgibAvGT +1KCEGQ6qtWSqKJYmC8VKenYvvEFIySj5cbSFmId5aNwhjl8AYoLuM0E+2FRVJQ6a +pWyzYUIOqhsCkt9hEPsDVP4hIhP+ -----END CERTIFICATE----- diff --git a/tests/auto/qsslcertificate/more-certificates/blacklisted4.pem b/tests/auto/qsslcertificate/more-certificates/blacklisted4.pem index 64c7d41..53761bb 100644 --- a/tests/auto/qsslcertificate/more-certificates/blacklisted4.pem +++ b/tests/auto/qsslcertificate/more-certificates/blacklisted4.pem @@ -2,18 +2,18 @@ MIIDDzCCAnigAwIBAgIQOSpDTw4H3x+KowXeNODCKTANBgkqhkiG9w0BAQUFADBf MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50 ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRgwFgYDVQQDEw9sb2dpbi55YWhvby5jb20w -HhcNMTEwMzI0MTMwOTE1WhcNMTEwNDIzMTMwOTE1WjBfMQswCQYDVQQGEwJBVTET +HhcNMTEwODMwMTAyMTE5WhcNMjEwODI3MTAyMTE5WjBfMQswCQYDVQQGEwJBVTET MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ dHkgTHRkMRgwFgYDVQQDEw9sb2dpbi55YWhvby5jb20wgZ8wDQYJKoZIhvcNAQEB -BQADgY0AMIGJAoGBANO2gz9x2H92xz5OvZSEul9gHxqqd+kdjeoS2exyvjC9wzqb -gYXqNmAsbtNp4WmieEQFd0riCAEkIAn8JpHTCsMHN4rHhS+W+4D5a/drI2jfnZEF -orNYJG1PHSQV/rvh6d7wkVdT+0SYOjrFTAA2biGWaK3W9ztf2yX577w+uQtBAgMB -AAGjgcswgcgwHQYDVR0OBBYEFJjDp8Prs7oReRmskIeFixp0vDkGMIGYBgNVHSME -gZAwgY2AFJjDp8Prs7oReRmskIeFixp0vDkGoWOkYTBfMQswCQYDVQQGEwJBVTET +BQADgY0AMIGJAoGBAML+Z5hpY4VfSeTPbMCGaqe5shwcw3yW/egYY6cXcfxtUkjs +Eai48hP/sqtQeFwi3puJ7HO2iGUX72/UnO0t9qwEGtGOHS1qqAYdTcncY5pTpO9L +e4Tn6CkPwFE4VNXVU96xPlUjP/KBZ43VH6gW3M1xDI0DmNh2QUXHN5ErQE8nAgMB +AAGjgcswgcgwHQYDVR0OBBYEFI+gG6PT7vQtUVn2xf+wCYZV5Ht8MIGYBgNVHSME +gZAwgY2AFI+gG6PT7vQtUVn2xf+wCYZV5Ht8oWOkYTBfMQswCQYDVQQGEwJBVTET MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ dHkgTHRkMRgwFgYDVQQDEw9sb2dpbi55YWhvby5jb22CEDkqQ08OB98fiqMF3jTg -wikwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQAZyo0Q3leeM1+lxeCd -Wp0ZYHMSW11ANc6nuMWOmJC+nIQGlyGiP3IqeUvIfekwboV638bahVPwcl2HYWsS -/l01Bgyd25Zn6VTQBfMK01dILyxscjVwdHuojzYBN05sl+qkVoqQr5EroQQbgDc9 -6I88p6Kjajv3IusCwfK6wlqISw== +wikwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQA3eZG/dOXrL7YBPCA8 +joDGfhra98T1iCpul4/L/L4dt/9+QVAu+agbZmHWLYzuAvuB1zj8go0BLIE7b4ap +HPLFYXV3iAWjIRhNEix4FWohlds1B+IwpvWdsl3Op1pZfHQ0yq8wFGawdQTAKUII +lLu1cd6E8B6pCfWwSr+9h6gnTg== -----END CERTIFICATE----- diff --git a/tests/auto/qsslcertificate/more-certificates/blacklisted5.pem b/tests/auto/qsslcertificate/more-certificates/blacklisted5.pem index c7ddbf2..81211ee 100644 --- a/tests/auto/qsslcertificate/more-certificates/blacklisted5.pem +++ b/tests/auto/qsslcertificate/more-certificates/blacklisted5.pem @@ -2,18 +2,18 @@ MIIDDzCCAnigAwIBAgIQPnXO1GtpMCEhiDCuhqgqcTANBgkqhkiG9w0BAQUFADBf MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50 ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRgwFgYDVQQDEw9sb2dpbi55YWhvby5jb20w -HhcNMTEwMzI0MTMwOTQ4WhcNMTEwNDIzMTMwOTQ4WjBfMQswCQYDVQQGEwJBVTET +HhcNMTEwODMwMTAyMTQ4WhcNMjEwODI3MTAyMTQ4WjBfMQswCQYDVQQGEwJBVTET MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ dHkgTHRkMRgwFgYDVQQDEw9sb2dpbi55YWhvby5jb20wgZ8wDQYJKoZIhvcNAQEB -BQADgY0AMIGJAoGBALkiHG9TgTw/00CMW8D23NBDAa3331AL5kTkAaXbAWg2R/1o -yKQfXq3hgHbyWGPccUT+tU6FmaBf3bIndLK7iGx81RGzGgXeoQ5mpgnJ50iCeW73 -G99VlVwutPia7d9qqui84YdcG9t+P2Fuxv+xRqAB6lKOaa4qTPIbH50PgwOvAgMB -AAGjgcswgcgwHQYDVR0OBBYEFBWJrs8bnZ5fikfaLbTxK0ssj69MMIGYBgNVHSME -gZAwgY2AFBWJrs8bnZ5fikfaLbTxK0ssj69MoWOkYTBfMQswCQYDVQQGEwJBVTET +BQADgY0AMIGJAoGBAL5IeUbbQ7HxCBLQaOASV2HyI1tRwPm/7JNsRfh5ipM1sCWE +xnPoqFznX6ZUKi8d61/EIycwUd+FvOp9zoRxDlngoRdhqMCTTG3JfxNf6ZXJPCYd +qPjOKAkMwyG8bbhGCsoCws9b2rpN9536qVXc2QR39F9/ZE5t73oKtEd1fyNnAgMB +AAGjgcswgcgwHQYDVR0OBBYEFNXCkfGdW3WYzBBqB2jWppl6sL99MIGYBgNVHSME +gZAwgY2AFNXCkfGdW3WYzBBqB2jWppl6sL99oWOkYTBfMQswCQYDVQQGEwJBVTET MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ dHkgTHRkMRgwFgYDVQQDEw9sb2dpbi55YWhvby5jb22CED51ztRraTAhIYgwroao -KnEwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCIfqqs1a7RzdmV8U00 -v/xAsxscKvQvmu6BK+HwvY5iL2pSwXTYgRLJLoj5QGOd3mmgOFsyW3BPSCP1+fVE -M1ROhU2u8wHub+hGGds18Fx6F4yZjdh8pNUoOUR9A0Ym+VDJr2p50oUNTTy0RbH8 -9ns/gbemx84cjF9DD2G5stQhYg== +KnEwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCOeih7N7fmkqECWZD/ +bYsFLtbKOwD4YMPIV2wayvaLg2dFwqhBkGml+5ulOh5KTiUh0/nnGmGAU/3K9nt5 +TCMjwMGHm/C5pp7THQriiY8Qw0QVtnFiJGnjblhAbJVIvBJJ42/Qq7T4IzEwqShW +hO2g1M0MUGiOw4vyXJRGc4dg2w== -----END CERTIFICATE----- diff --git a/tests/auto/qsslcertificate/more-certificates/blacklisted6.pem b/tests/auto/qsslcertificate/more-certificates/blacklisted6.pem index bc2be2a..4264a67 100644 --- a/tests/auto/qsslcertificate/more-certificates/blacklisted6.pem +++ b/tests/auto/qsslcertificate/more-certificates/blacklisted6.pem @@ -2,18 +2,18 @@ MIIDETCCAnqgAwIBAgIRAOkCi5V45BXcGnEKK4gVREcwDQYJKoZIhvcNAQEFBQAw XzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGElu dGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAxMPbG9naW4uc2t5cGUuY29t -MB4XDTExMDMyNDEzMTAxNloXDTExMDQyMzEzMTAxNlowXzELMAkGA1UEBhMCQVUx +MB4XDTExMDgzMDEwMjIxOFoXDTIxMDgyNzEwMjIxOFowXzELMAkGA1UEBhMCQVUx EzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMg UHR5IEx0ZDEYMBYGA1UEAxMPbG9naW4uc2t5cGUuY29tMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDFq06qqRl86pP7GRX3m7FMMSaSU6zlNGAo+WPoRfYAzB6x -5KpvlfxMCo3T/nWtInX3Bw9TBWCZSweQ2GEjggO0irjw5UX3MiToLxK+rwzWztm9 -H3LBxTWR0cOOa78kRFvNQ1onvNHbs8fJzXjG7b2IJDOIwG1HAT1LK80oPXZc1wID -AQABo4HMMIHJMB0GA1UdDgQWBBTiGNxw0ImW/wfW0mD3eA65PY5CAzCBmQYDVR0j -BIGRMIGOgBTiGNxw0ImW/wfW0mD3eA65PY5CA6FjpGEwXzELMAkGA1UEBhMCQVUx +AQUAA4GNADCBiQKBgQDAAkuUFRdz1bm95jFsyQRb4PBrly4pJK4f5pSZy99eY8FM +iZbr7brnkiheN4qeJfS1dv/B/B4kAVoGD2Y0KmpZ5ZZYmm3TxopoP0Yeg6juWNKa +iFlfKQIvk0GEmD8oGfEqW1+72p040jAuTn+OQx+7VpydqB/RJoY8qK3zEXbB7wID +AQABo4HMMIHJMB0GA1UdDgQWBBSE9drle8VwSlwYIX5mKaIEvQYX/zCBmQYDVR0j +BIGRMIGOgBSE9drle8VwSlwYIX5mKaIEvQYX/6FjpGEwXzELMAkGA1UEBhMCQVUx EzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMg UHR5IEx0ZDEYMBYGA1UEAxMPbG9naW4uc2t5cGUuY29tghEA6QKLlXjkFdwacQor -iBVERzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAHdb1QY/oxuro/4x -GX9jbm930ysoeXkWZSKVtVxoxrPIferu8jVpb1SLRjGcMnmjJoNWNFpvnbZgoYei -f3wdSWun7ndyQBh61k8eM7UABDOUXUHOsHuHj7s1koMKtet4gykmMfd6VxBkwBvN -ZXOll4X+TKe8nrxbnGUByIwQaRM+ +iBVERzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACm4/Q6e001Fg9uu +ieqHOAxfBafkOsXtgKqTFFdpt9Hbmo9j/BfvrtvfFN5Ph4fV46useGjW79P1IeNK ++KqcaqOKy2q6j1em4j8C5Mx6S4ksZJC25jIPEM7cdxiDGcV505X5mynlu1+WkZAf +nQhnJpA8o3p462ON4S+GXTfOLfoN -----END CERTIFICATE----- diff --git a/tests/auto/qsslcertificate/more-certificates/blacklisted7.pem b/tests/auto/qsslcertificate/more-certificates/blacklisted7.pem index 19d4353..03ab7d4 100644 --- a/tests/auto/qsslcertificate/more-certificates/blacklisted7.pem +++ b/tests/auto/qsslcertificate/more-certificates/blacklisted7.pem @@ -2,18 +2,18 @@ MIIDGjCCAoOgAwIBAgIRAJI51TSPQNFpWnRUcOHyP0MwDQYJKoZIhvcNAQEFBQAw YjELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGElu dGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEbMBkGA1UEAxMSYWRkb25zLm1vemlsbGEu -b3JnMB4XDTExMDMyNDEzMTA0NFoXDTExMDQyMzEzMTA0NFowYjELMAkGA1UEBhMC +b3JnMB4XDTExMDgzMDEwMjIzOVoXDTIxMDgyNzEwMjIzOVowYjELMAkGA1UEBhMC QVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdp dHMgUHR5IEx0ZDEbMBkGA1UEAxMSYWRkb25zLm1vemlsbGEub3JnMIGfMA0GCSqG -SIb3DQEBAQUAA4GNADCBiQKBgQC1lsoAcZTwF8Pf0E9do5avLdobB/O7EhhrCMs2 -/EMO07aIlrLwl3UP/Fmu/cAkKuX8Mx+Eif9x+XT3ZqGKGYKiqPTJcNfeZvgwbn0j -wXDtEo4DuURrwtBU9okS+v4dF6F4RtHQKAGcsXoOjhR7ah71kve+PG2GG0sJ167V -klK1xwIDAQABo4HPMIHMMB0GA1UdDgQWBBRgGDJ4Qp0WFyLIzm4Nz5wgqDSSxjCB -nAYDVR0jBIGUMIGRgBRgGDJ4Qp0WFyLIzm4Nz5wgqDSSxqFmpGQwYjELMAkGA1UE +SIb3DQEBAQUAA4GNADCBiQKBgQC9Yo3DJvs+vewelK5qoK+0Xn4zeRIQ/wJCrQBg +5tNXja+NZsHb0/enlwAZ3dAwCfI0G12mTowgSuZyDX7oN2+G+k6Q5LPnGhj1E5s5 +OJ+ZYsAjTdU0SCAPquva55+jyhqo5w/B5Il7w84mppUrAZgqEGhYkhXeDOULe1Vm +4iLMQwIDAQABo4HPMIHMMB0GA1UdDgQWBBSb8lAIgOnUitVOuZIx3s+5MN1sBzCB +nAYDVR0jBIGUMIGRgBSb8lAIgOnUitVOuZIx3s+5MN1sB6FmpGQwYjELMAkGA1UE BhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdp ZGdpdHMgUHR5IEx0ZDEbMBkGA1UEAxMSYWRkb25zLm1vemlsbGEub3JnghEAkjnV -NI9A0WladFRw4fI/QzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACeE -DHMQ+LWEuoa/6z2EgrgM1k9rvBbUtCR+rjTuyzVW4OLXdpiVwZPOAiKphpq7q8Sb -TQ3zwsCoPLLJk5VolwcPfcD8Y2/tYK3NCYl+HzGxxnzPDFVaZM5Jh8RI861Hc00D -hVoQaptPK/V/lr0KEevqjhusAdFZbwlWA923zASa +NI9A0WladFRw4fI/QzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAFpg +tcp6ynOZ/hwr2axTYK+4rtXmTUJdsg7NUHhXSwGANAuYuc7PYwqtmz3B2W90t3TA +D3pNMRBEXrBXufC0p9vu/hQgb+mdQ7DG6j1Gkkpq4Sq/Puv1bO96KpAufmevnWWB +48kzCgAdfk/N04k7kdPHCp5MjjgmY3kGdsg+jroj -----END CERTIFICATE----- diff --git a/tests/auto/qsslcertificate/more-certificates/blacklisted8.pem b/tests/auto/qsslcertificate/more-certificates/blacklisted8.pem index aedf3f7..acef06f 100644 --- a/tests/auto/qsslcertificate/more-certificates/blacklisted8.pem +++ b/tests/auto/qsslcertificate/more-certificates/blacklisted8.pem @@ -2,18 +2,18 @@ MIIDDjCCAnegAwIBAgIRALC3Ez7Qlvm1b66RyHS9OsAwDQYJKoZIhvcNAQEFBQAw XjELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGElu dGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEXMBUGA1UEAxMObG9naW4ubGl2ZS5jb20w -HhcNMTEwMzI0MTMxMTA2WhcNMTEwNDIzMTMxMTA2WjBeMQswCQYDVQQGEwJBVTET +HhcNMTEwODMwMTAyMzA0WhcNMjEwODI3MTAyMzA0WjBeMQswCQYDVQQGEwJBVTET MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ dHkgTHRkMRcwFQYDVQQDEw5sb2dpbi5saXZlLmNvbTCBnzANBgkqhkiG9w0BAQEF -AAOBjQAwgYkCgYEA3OVNj9ijzMewvDeZYzgCWoKtyjclyIHxrQfHZpcexaKbxUap -1MtF6L0ayjtRWpiBYuPteUSy/Ja4Oh6zZz8K6z5rVgXhmy3xPIYuOoWaTKEOhb0Z -oHTBtGh8aWWai1XWw37HIm2FP8cmfgdH4lZwVvpTZIUxYidsyqyjB9IrhiMCAwEA -AaOByzCByDAdBgNVHQ4EFgQU4CcQcIvEhJC0tqHlNFMkv6MlDN4wgZgGA1UdIwSB -kDCBjYAU4CcQcIvEhJC0tqHlNFMkv6MlDN6hYqRgMF4xCzAJBgNVBAYTAkFVMRMw +AAOBjQAwgYkCgYEA5JK77+1zFatj8xeItZaDW5XaU+ssc5jq2Ww4ANaxJi+wdRVU +qVLauEJPKEXC51fuYHa7U8yoSTgJZA7JL07cdSxgsVj8RR4Uf5k4Jf5Vdz5w8+TT +W33I3zurA2xB+wfup2VPmS8Alg07w6POrzlQYgtcUcELZhjcdypk96NOdPECAwEA +AaOByzCByDAdBgNVHQ4EFgQUTWM20msyZUcNEYOyNbgevBPIoF8wgZgGA1UdIwSB +kDCBjYAUTWM20msyZUcNEYOyNbgevBPIoF+hYqRgMF4xCzAJBgNVBAYTAkFVMRMw EQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0 eSBMdGQxFzAVBgNVBAMTDmxvZ2luLmxpdmUuY29tghEAsLcTPtCW+bVvrpHIdL06 -wDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAMNzIStXDNSNQ8ayxrcj -4RrUMsHWUG/6XPrgfYqCP5TfPGAa5qBfNb9LfUbiS4b0flJVN1RlHVwwRo0yf9v4 -LGg0dSuPQAOWlLeUR1GminO1jHZw7E4dYfR7QEmiiOgaQU+CbxLsf5vCaKInN9Gu -jv/5xytVCbMoLoZ4EBVb0tka +wDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACQqnu1KywflnNiqIU01 +95z/qjmZTvSWafM/HLOFUg8ls7g32l5gCCrsc8ypiCff+S3+9teYQOII7oW3hzw4 +BH10m0LTRxGig5U9XVkH4076SALkPoky1z+onMmLk7AE96kSJ+rq30VvcSSl9BaW +DwcQGIhCZANgZrNW9AJ+cweQ -----END CERTIFICATE----- diff --git a/tests/auto/qsslcertificate/more-certificates/blacklisted9.pem b/tests/auto/qsslcertificate/more-certificates/blacklisted9.pem index d179b29..cc99b08 100644 --- a/tests/auto/qsslcertificate/more-certificates/blacklisted9.pem +++ b/tests/auto/qsslcertificate/more-certificates/blacklisted9.pem @@ -2,18 +2,18 @@ MIIDDjCCAnegAwIBAgIRANjzX063hystqwaS4xU4L7AwDQYJKoZIhvcNAQEFBQAw XjELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGElu dGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEXMBUGA1UEAxMOZ2xvYmFsIHRydXN0ZWUw -HhcNMTEwMzI0MTMxMTM3WhcNMTEwNDIzMTMxMTM3WjBeMQswCQYDVQQGEwJBVTET +HhcNMTEwODMwMTAyMzI1WhcNMjEwODI3MTAyMzI1WjBeMQswCQYDVQQGEwJBVTET MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ dHkgTHRkMRcwFQYDVQQDEw5nbG9iYWwgdHJ1c3RlZTCBnzANBgkqhkiG9w0BAQEF -AAOBjQAwgYkCgYEArHCVym7AEZDBhDkrUSG3Q94a+caNcCk5fE6ltZHiZHv096xr -cixHYvSGvms780bkI+oot2xI/e9awwkV+7VjWNvr0HrajzBWeimwk+myjP+3ddMY -Kmr0eI6bmvmPHtOFJE5Ar8/62FwD0wlLogRIx56JtXcCpkiUQktJVPz2gtMCAwEA -AaOByzCByDAdBgNVHQ4EFgQUUJwC/qSGBmcB+DVrd43ovRLdLmQwgZgGA1UdIwSB -kDCBjYAUUJwC/qSGBmcB+DVrd43ovRLdLmShYqRgMF4xCzAJBgNVBAYTAkFVMRMw +AAOBjQAwgYkCgYEAw0CpZXrd6oI8/PHo8/bnNwB7UA7OKsRFuqKljr9F5lCJAVkT +zRDlXuTDeXGfQiYhJTF7GRunPRJ7O5SsflwoxktH/F91yFpgxY5DqRZ1ZHdZgW3b +W0uweBxJv9684ihXY4YR3Yznf0js7YAgVd8a3qhOUODiC/Beb8tmDBNL2c0CAwEA +AaOByzCByDAdBgNVHQ4EFgQU/rUvQ2rG7pg2muUiLm6V93ZgmGcwgZgGA1UdIwSB +kDCBjYAU/rUvQ2rG7pg2muUiLm6V93ZgmGehYqRgMF4xCzAJBgNVBAYTAkFVMRMw EQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0 eSBMdGQxFzAVBgNVBAMTDmdsb2JhbCB0cnVzdGVlghEA2PNfTreHKy2rBpLjFTgv -sDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACAYxI+r3+JNelL6SBB0 -Pda3LkbCm+schP64NBYDdGl2Kus2b2QZ83T7xENBFEhyNoXvc6pRI4/Oh6JDxmG1 -7WmqOVStS/4JeAu6ygiyI1ImRKq2/MvJx/kaKh6IiXanB5nW1U+fhDV6kMOEfpwV -i6FBibpHboPQoqzPPRe7qHSL +sDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBALvmmUx47DcUAIsPkI0Y +DTvcXV6k2JHwdrdlPsrn9A5TLppfxPNrDMiweitr8cMkKEtkm6LRTt2yvDFcMIwy +/+F5+XO0k9sKde6xHfWvOvndIycj3Lt4tIRW8jUauJENyMa4M57qpqkgkJEmflkI +/pb9fQZbfg70o9wvbNK0RONo -----END CERTIFICATE----- -- cgit v0.12 From 6b1a8129623e3716f2fc075608b260ce7c381fe2 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Tue, 30 Aug 2011 13:10:06 +0200 Subject: QSslCertificate: also check common name for blacklisted certificates ... to reduce the possibility of blacklisting valid certificates that happen to have the same serial number as a blacklisted one, which is unlikely, but possible. Reviewed-by: Richard J. Moore <rich@kde.org> --- src/network/ssl/qsslcertificate.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index 8bf1fb7..ab09932 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -783,23 +783,24 @@ QList<QSslCertificate> QSslCertificatePrivate::certificatesFromDer(const QByteAr // These certificates are known to be fraudulent and were created during the comodo // compromise. See http://www.comodo.com/Comodo-Fraud-Incident-2011-03-23.html static const char *certificate_blacklist[] = { - "04:7e:cb:e9:fc:a5:5f:7b:d0:9e:ae:36:e1:0c:ae:1e", - "f5:c8:6a:f3:61:62:f1:3a:64:f5:4f:6d:c9:58:7c:06", - "d7:55:8f:da:f5:f1:10:5b:b2:13:28:2b:70:77:29:a3", - "39:2a:43:4f:0e:07:df:1f:8a:a3:05:de:34:e0:c2:29", - "3e:75:ce:d4:6b:69:30:21:21:88:30:ae:86:a8:2a:71", - "e9:02:8b:95:78:e4:15:dc:1a:71:0a:2b:88:15:44:47", - "92:39:d5:34:8f:40:d1:69:5a:74:54:70:e1:f2:3f:43", - "b0:b7:13:3e:d0:96:f9:b5:6f:ae:91:c8:74:bd:3a:c0", - "d8:f3:5f:4e:b7:87:2b:2d:ab:06:92:e3:15:38:2f:b0", - "05:e2:e6:a4:cd:09:ea:54:d6:65:b0:75:fe:22:a2:56", + "04:7e:cb:e9:fc:a5:5f:7b:d0:9e:ae:36:e1:0c:ae:1e", "mail.google.com", // Comodo + "f5:c8:6a:f3:61:62:f1:3a:64:f5:4f:6d:c9:58:7c:06", "www.google.com", // Comodo + "d7:55:8f:da:f5:f1:10:5b:b2:13:28:2b:70:77:29:a3", "login.yahoo.com", // Comodo + "39:2a:43:4f:0e:07:df:1f:8a:a3:05:de:34:e0:c2:29", "login.yahoo.com", // Comodo + "3e:75:ce:d4:6b:69:30:21:21:88:30:ae:86:a8:2a:71", "login.yahoo.com", // Comodo + "e9:02:8b:95:78:e4:15:dc:1a:71:0a:2b:88:15:44:47", "login.skype.com", // Comodo + "92:39:d5:34:8f:40:d1:69:5a:74:54:70:e1:f2:3f:43", "addons.mozilla.org", // Comodo + "b0:b7:13:3e:d0:96:f9:b5:6f:ae:91:c8:74:bd:3a:c0", "login.live.com", // Comodo + "d8:f3:5f:4e:b7:87:2b:2d:ab:06:92:e3:15:38:2f:b0", "global trustee", // Comodo + "05:e2:e6:a4:cd:09:ea:54:d6:65:b0:75:fe:22:a2:56", "*.google.com", // DigiNotar 0 }; bool QSslCertificatePrivate::isBlacklisted(const QSslCertificate &certificate) { for (int a = 0; certificate_blacklist[a] != 0; a++) { - if (certificate.serialNumber() == certificate_blacklist[a]) + if (certificate.serialNumber() == certificate_blacklist[a++] && + certificate.subjectInfo(QSslCertificate::CommonName) == QString::fromUtf8(certificate_blacklist[a])) return true; } return false; -- cgit v0.12