[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677
mjs
mjs at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 07:59:56 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit 5ea58b66ef787698df52634a4317418fcaa6ca24
Author: mjs <mjs at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Wed Oct 8 21:23:49 2003 +0000
Reviewed by Ken.
Start on blocking Cocoa exceptions when calling ObjC from C++ to
avoid unreproducible crashes when this happens.
* kwq/KWQExceptions.h: Added. Helper macros for exception blocking.
* WebCore.pbproj/project.pbxproj: Add new header
In all these files, block exceptions when calling ObjC from C++,
or explain why not.
* kwq/KWQAccObjectCache.mm:
* kwq/KWQApplication.mm:
* kwq/KWQButton.mm:
(QButton::QButton):
(QButton::~QButton):
(QButton::setText):
(QButton::text):
(QButton::clicked):
(QButton::simulateClick):
(QButton::setFont):
(QButton::focusPolicy):
* kwq/KWQCheckBox.mm:
(QCheckBox::QCheckBox):
(QCheckBox::setChecked):
(QCheckBox::isChecked):
(QCheckBox::dimensions):
* kwq/KWQColor.mm:
* kwq/KWQComboBox.mm:
(QComboBox::QComboBox):
(QComboBox::~QComboBox):
(QComboBox::insertItem):
(QComboBox::sizeHint):
(QComboBox::setCurrentItem):
(QComboBox::updateCurrentItem):
(QComboBox::setFont):
(QComboBox::dimensions):
* kwq/KWQCursor.mm:
* kwq/KWQFile.mm:
* kwq/KWQFileButton.mm:
(KWQFileButton::KWQFileButton):
(KWQFileButton::~KWQFileButton):
(KWQFileButton::setFilename):
(KWQFileButton::sizeForCharacterWidth):
(KWQFileButton::frameGeometry):
(KWQFileButton::setFrameGeometry):
(KWQFileButton::baselinePosition):
(KWQFileButton::filenameChanged):
* kwq/KWQKCookieJar.mm:
(KWQKCookieJar::cookie):
(KWQKCookieJar::setCookie):
(KWQKCookieJar::cookieEnabled):
* kwq/KWQKHTMLPartBrowserExtension.mm:
(KHTMLPartBrowserExtension::createNewWindow):
(KHTMLPartBrowserExtension::setIconURL):
(KHTMLPartBrowserExtension::setTypedIconURL):
* kwq/KWQKHistoryProvider.mm:
(KParts::HistoryProvider::contains):
* kwq/KWQKPartsBrowserInterface.mm:
(KParts::BrowserInterface::callMethod):
* kwq/KWQKStandardDirs.mm:
* kwq/KWQKURL.mm:
* kwq/KWQKWinModule.mm:
(KWinModule::workArea):
* kwq/KWQObject.mm:
* kwq/KWQString.mm:
(QString::getNSString):
* kwq/KWQTimer.mm:
* kwq/KWQWindowWidget.mm:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@5147 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index 15d6028..1f2afce 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,75 @@
+2003-10-08 Maciej Stachowiak <mjs at apple.com>
+
+ Reviewed by Ken.
+
+ Start on blocking Cocoa exceptions when calling ObjC from C++ to
+ avoid unreproducible crashes when this happens.
+
+ * kwq/KWQExceptions.h: Added. Helper macros for exception blocking.
+ * WebCore.pbproj/project.pbxproj: Add new header
+
+ In all these files, block exceptions when calling ObjC from C++,
+ or explain why not.
+
+ * kwq/KWQAccObjectCache.mm:
+ * kwq/KWQApplication.mm:
+ * kwq/KWQButton.mm:
+ (QButton::QButton):
+ (QButton::~QButton):
+ (QButton::setText):
+ (QButton::text):
+ (QButton::clicked):
+ (QButton::simulateClick):
+ (QButton::setFont):
+ (QButton::focusPolicy):
+ * kwq/KWQCheckBox.mm:
+ (QCheckBox::QCheckBox):
+ (QCheckBox::setChecked):
+ (QCheckBox::isChecked):
+ (QCheckBox::dimensions):
+ * kwq/KWQColor.mm:
+ * kwq/KWQComboBox.mm:
+ (QComboBox::QComboBox):
+ (QComboBox::~QComboBox):
+ (QComboBox::insertItem):
+ (QComboBox::sizeHint):
+ (QComboBox::setCurrentItem):
+ (QComboBox::updateCurrentItem):
+ (QComboBox::setFont):
+ (QComboBox::dimensions):
+ * kwq/KWQCursor.mm:
+ * kwq/KWQFile.mm:
+ * kwq/KWQFileButton.mm:
+ (KWQFileButton::KWQFileButton):
+ (KWQFileButton::~KWQFileButton):
+ (KWQFileButton::setFilename):
+ (KWQFileButton::sizeForCharacterWidth):
+ (KWQFileButton::frameGeometry):
+ (KWQFileButton::setFrameGeometry):
+ (KWQFileButton::baselinePosition):
+ (KWQFileButton::filenameChanged):
+ * kwq/KWQKCookieJar.mm:
+ (KWQKCookieJar::cookie):
+ (KWQKCookieJar::setCookie):
+ (KWQKCookieJar::cookieEnabled):
+ * kwq/KWQKHTMLPartBrowserExtension.mm:
+ (KHTMLPartBrowserExtension::createNewWindow):
+ (KHTMLPartBrowserExtension::setIconURL):
+ (KHTMLPartBrowserExtension::setTypedIconURL):
+ * kwq/KWQKHistoryProvider.mm:
+ (KParts::HistoryProvider::contains):
+ * kwq/KWQKPartsBrowserInterface.mm:
+ (KParts::BrowserInterface::callMethod):
+ * kwq/KWQKStandardDirs.mm:
+ * kwq/KWQKURL.mm:
+ * kwq/KWQKWinModule.mm:
+ (KWinModule::workArea):
+ * kwq/KWQObject.mm:
+ * kwq/KWQString.mm:
+ (QString::getNSString):
+ * kwq/KWQTimer.mm:
+ * kwq/KWQWindowWidget.mm:
+
2003-10-07 David Hyatt <hyatt at apple.com>
Fix for link dragging regression in the titles of links. More accessibility
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index 15d6028..1f2afce 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,75 @@
+2003-10-08 Maciej Stachowiak <mjs at apple.com>
+
+ Reviewed by Ken.
+
+ Start on blocking Cocoa exceptions when calling ObjC from C++ to
+ avoid unreproducible crashes when this happens.
+
+ * kwq/KWQExceptions.h: Added. Helper macros for exception blocking.
+ * WebCore.pbproj/project.pbxproj: Add new header
+
+ In all these files, block exceptions when calling ObjC from C++,
+ or explain why not.
+
+ * kwq/KWQAccObjectCache.mm:
+ * kwq/KWQApplication.mm:
+ * kwq/KWQButton.mm:
+ (QButton::QButton):
+ (QButton::~QButton):
+ (QButton::setText):
+ (QButton::text):
+ (QButton::clicked):
+ (QButton::simulateClick):
+ (QButton::setFont):
+ (QButton::focusPolicy):
+ * kwq/KWQCheckBox.mm:
+ (QCheckBox::QCheckBox):
+ (QCheckBox::setChecked):
+ (QCheckBox::isChecked):
+ (QCheckBox::dimensions):
+ * kwq/KWQColor.mm:
+ * kwq/KWQComboBox.mm:
+ (QComboBox::QComboBox):
+ (QComboBox::~QComboBox):
+ (QComboBox::insertItem):
+ (QComboBox::sizeHint):
+ (QComboBox::setCurrentItem):
+ (QComboBox::updateCurrentItem):
+ (QComboBox::setFont):
+ (QComboBox::dimensions):
+ * kwq/KWQCursor.mm:
+ * kwq/KWQFile.mm:
+ * kwq/KWQFileButton.mm:
+ (KWQFileButton::KWQFileButton):
+ (KWQFileButton::~KWQFileButton):
+ (KWQFileButton::setFilename):
+ (KWQFileButton::sizeForCharacterWidth):
+ (KWQFileButton::frameGeometry):
+ (KWQFileButton::setFrameGeometry):
+ (KWQFileButton::baselinePosition):
+ (KWQFileButton::filenameChanged):
+ * kwq/KWQKCookieJar.mm:
+ (KWQKCookieJar::cookie):
+ (KWQKCookieJar::setCookie):
+ (KWQKCookieJar::cookieEnabled):
+ * kwq/KWQKHTMLPartBrowserExtension.mm:
+ (KHTMLPartBrowserExtension::createNewWindow):
+ (KHTMLPartBrowserExtension::setIconURL):
+ (KHTMLPartBrowserExtension::setTypedIconURL):
+ * kwq/KWQKHistoryProvider.mm:
+ (KParts::HistoryProvider::contains):
+ * kwq/KWQKPartsBrowserInterface.mm:
+ (KParts::BrowserInterface::callMethod):
+ * kwq/KWQKStandardDirs.mm:
+ * kwq/KWQKURL.mm:
+ * kwq/KWQKWinModule.mm:
+ (KWinModule::workArea):
+ * kwq/KWQObject.mm:
+ * kwq/KWQString.mm:
+ (QString::getNSString):
+ * kwq/KWQTimer.mm:
+ * kwq/KWQWindowWidget.mm:
+
2003-10-07 David Hyatt <hyatt at apple.com>
Fix for link dragging regression in the titles of links. More accessibility
diff --git a/WebCore/WebCore.pbproj/project.pbxproj b/WebCore/WebCore.pbproj/project.pbxproj
index 3ca57a1..87194af 100644
--- a/WebCore/WebCore.pbproj/project.pbxproj
+++ b/WebCore/WebCore.pbproj/project.pbxproj
@@ -511,6 +511,7 @@
BE983D96052A2E0A00892D85,
55998A5E052B59CC0017A6C1,
55998A60052B59CC0017A6C1,
+ 65A640F10533BB1F0085E777,
);
isa = PBXHeadersBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
@@ -1003,6 +1004,30 @@
//552
//553
//554
+//650
+//651
+//652
+//653
+//654
+ 65A640F00533BB1F0085E777 = {
+ expectedFileType = sourcecode.c.h;
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = KWQExceptions.h;
+ refType = 4;
+ sourceTree = "<group>";
+ };
+ 65A640F10533BB1F0085E777 = {
+ fileRef = 65A640F00533BB1F0085E777;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+//650
+//651
+//652
+//653
+//654
//840
//841
//842
@@ -2269,6 +2294,7 @@
354F248A02EE28590ACA2ACA,
931C8A160380288B008635CE,
931C8A170380288B008635CE,
+ 65A640F00533BB1F0085E777,
93CCF7D4033BD43C008635CE,
93CCF7D5033BD43C008635CE,
9394E0A903AA60FB008635CE,
diff --git a/WebCore/kwq/KWQAccObjectCache.mm b/WebCore/kwq/KWQAccObjectCache.mm
index a8359cf..65e073b 100644
--- a/WebCore/kwq/KWQAccObjectCache.mm
+++ b/WebCore/kwq/KWQAccObjectCache.mm
@@ -26,6 +26,8 @@
#include "KWQAccObjectCache.h"
#include "KWQAccObject.h"
+// The simple Cocoa calls in this file can't throw.
+
KWQAccObjectCache::KWQAccObjectCache()
{
accCache = NULL;
diff --git a/WebCore/kwq/KWQApplication.mm b/WebCore/kwq/KWQApplication.mm
index efbdbb1..d12ff22 100644
--- a/WebCore/kwq/KWQApplication.mm
+++ b/WebCore/kwq/KWQApplication.mm
@@ -26,6 +26,9 @@
#import "KWQApplication.h"
#import "KWQLogging.h"
+// The NSScreen Cocoa calls in this file should never throw, so
+// there's no need to block exceptions.
+
QPalette QApplication::palette(const QWidget *p)
{
static QPalette pal;
diff --git a/WebCore/kwq/KWQButton.mm b/WebCore/kwq/KWQButton.mm
index b0bb6b4..79e3016 100644
--- a/WebCore/kwq/KWQButton.mm
+++ b/WebCore/kwq/KWQButton.mm
@@ -27,6 +27,7 @@
#import "KWQAssertions.h"
#import "KWQCheckBox.h"
+#import "KWQExceptions.h"
#import "KWQKHTMLPart.h"
#import "KWQNSViewExtras.h"
#import "WebCoreBridge.h"
@@ -139,36 +140,54 @@
QButton::QButton()
: m_clicked(this, SIGNAL(clicked()))
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
KWQButton *button = [[KWQButton alloc] initWithQButton:this];
+ setView(button);
+ [button release];
[button setTarget:button];
[button setAction:@selector(action:)];
-
+
[button setTitle:@""];
[[button cell] setControlSize:NSSmallControlSize];
[button setFont:[NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
- setView(button);
-
- [button release];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
QButton::~QButton()
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
NSButton *button = (NSButton *)getView();
[button setTarget:nil];
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
void QButton::setText(const QString &s)
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
NSButton *button = (NSButton *)getView();
[button setTitle:s.getNSString()];
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
QString QButton::text() const
{
+ QString result;
+
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
NSButton *button = (NSButton *)getView();
- return QString::fromNSString([button title]);
+ result = QString::fromNSString([button title]);
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
+ return result;
}
void QButton::clicked()
@@ -179,6 +198,8 @@ void QButton::clicked()
// 3) clicked
// Proper behavior of check boxes, at least, depends on this order.
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
KWQButton *button = (KWQButton *)getView();
[button sendConsumedMouseUpIfNeeded];
@@ -186,22 +207,32 @@ void QButton::clicked()
if ([button target]) {
m_clicked.call();
}
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
void QButton::simulateClick()
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
KWQButton *button = (KWQButton *)getView();
[button simulateClick];
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
void QButton::setFont(const QFont &f)
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
QWidget::setFont(f);
const NSControlSize size = KWQNSControlSizeForFont(f);
NSControl * const button = static_cast<NSControl *>(getView());
[[button cell] setControlSize:size];
[button setFont:[NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:size]]];
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
NSControlSize KWQNSControlSizeForFont(const QFont &f)
@@ -223,12 +254,16 @@ NSControlSize KWQNSControlSizeForFont(const QFont &f)
QWidget::FocusPolicy QButton::focusPolicy() const
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
// Add an additional check here.
// For now, buttons are only focused when full
// keyboard access is turned on.
if ([KWQKHTMLPart::bridgeForWidget(this) keyboardUIMode] != WebCoreFullKeyboardAccess)
return NoFocus;
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
return QWidget::focusPolicy();
}
diff --git a/WebCore/kwq/KWQCheckBox.mm b/WebCore/kwq/KWQCheckBox.mm
index 0e39ef9..da6c270 100644
--- a/WebCore/kwq/KWQCheckBox.mm
+++ b/WebCore/kwq/KWQCheckBox.mm
@@ -24,6 +24,7 @@
*/
#import "KWQCheckBox.h"
+#import "KWQExceptions.h"
enum {
topMargin,
@@ -38,8 +39,12 @@ enum {
QCheckBox::QCheckBox(QWidget *w)
: m_stateChanged(this, SIGNAL(stateChanged(int)))
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
NSButton *button = (NSButton *)getView();
[button setButtonType:NSSwitchButton];
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
QSize QCheckBox::sizeHint() const
@@ -64,14 +69,26 @@ void QCheckBox::setFrameGeometry(const QRect &r)
void QCheckBox::setChecked(bool isChecked)
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
NSButton *button = (NSButton *)getView();
[button setState:isChecked ? NSOnState : NSOffState];
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
bool QCheckBox::isChecked()
{
+ volatile bool result = false;
+
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
NSButton *button = (NSButton *)getView();
- return [button state] == NSOnState;
+ result = [button state] == NSOnState;
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
+ return result;
}
void QCheckBox::clicked()
@@ -100,5 +117,11 @@ const int *QCheckBox::dimensions() const
{ 4, 3, 3, 3, 2, 10, 10 },
};
NSControl * const button = static_cast<NSControl *>(getView());
- return w[[[button cell] controlSize]];
+ volatile NSControlSize size = NSSmallControlSize;
+
+ KWQ_BLOCK_NS_EXCEPTIONS;
+ size = [[button cell] controlSize];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
+ return w[size];
}
diff --git a/WebCore/kwq/KWQColor.mm b/WebCore/kwq/KWQColor.mm
index e184409..baff496 100644
--- a/WebCore/kwq/KWQColor.mm
+++ b/WebCore/kwq/KWQColor.mm
@@ -29,6 +29,8 @@
#import "KWQString.h"
#import "KWQAssertions.h"
+// NSColor calls don't throw, so no need to block Cocoa exceptions in this file
+
// Turn off inlining to avoid warning with newer gcc.
#undef __inline
#define __inline
diff --git a/WebCore/kwq/KWQComboBox.mm b/WebCore/kwq/KWQComboBox.mm
index 96ec7ae..c82f363 100644
--- a/WebCore/kwq/KWQComboBox.mm
+++ b/WebCore/kwq/KWQComboBox.mm
@@ -26,11 +26,12 @@
#import "KWQComboBox.h"
#import "KWQButton.h"
+#import "KWQExceptions.h"
+#import "KWQKHTMLPart.h"
#import "KWQView.h"
#import "KWQKHTMLPart.h"
#import "KWQNSViewExtras.h"
#import "WebCoreBridge.h"
-
#import "khtmlview.h"
#import "render_replaced.h"
@@ -68,11 +69,16 @@ enum {
@end
QComboBox::QComboBox()
- : _adapter([[KWQComboBoxAdapter alloc] initWithQComboBox:this])
+ : _adapter(0)
, _widthGood(false)
, _activated(this, SIGNAL(activated(int)))
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
+ _adapter = [[KWQComboBoxAdapter alloc] initWithQComboBox:this];
KWQPopUpButton *button = [[KWQPopUpButton alloc] init];
+ setView(button);
+ [button release];
KWQPopUpButtonCell *cell = [[KWQPopUpButtonCell alloc] initWithWidget:this];
[button setCell:cell];
@@ -84,22 +90,28 @@ QComboBox::QComboBox()
[[button cell] setControlSize:NSSmallControlSize];
[button setFont:[NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
- setView(button);
-
- [button release];
-
updateCurrentItem();
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
QComboBox::~QComboBox()
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
KWQPopUpButton *button = (KWQPopUpButton *)getView();
[button setTarget:nil];
[_adapter release];
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
-void QComboBox::insertItem(const QString &text, int index)
+void QComboBox::insertItem(const QString &text, int i)
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
+ int index = i;
+
KWQPopUpButton *button = (KWQPopUpButton *)getView();
int numItems = [button numberOfItems];
if (index < 0) {
@@ -116,10 +128,16 @@ void QComboBox::insertItem(const QString &text, int index)
_widthGood = false;
updateCurrentItem();
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
QSize QComboBox::sizeHint() const
{
+ NSSize size = {0,0};
+
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
KWQPopUpButton *button = (KWQPopUpButton *)getView();
float width;
@@ -141,8 +159,12 @@ QSize QComboBox::sizeHint() const
_widthGood = true;
}
+ size = [[button cell] cellSize];
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
return QSize((int)_width + dimensions()[widthNotIncludingText],
- (int)[[button cell] cellSize].height - (dimensions()[topMargin] + dimensions()[bottomMargin]));
+ (int)size.height - (dimensions()[topMargin] + dimensions()[bottomMargin]));
}
QRect QComboBox::frameGeometry() const
@@ -177,15 +199,26 @@ void QComboBox::clear()
void QComboBox::setCurrentItem(int index)
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
KWQPopUpButton *button = (KWQPopUpButton *)getView();
[button selectItemAtIndex:index];
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
updateCurrentItem();
}
bool QComboBox::updateCurrentItem() const
{
KWQPopUpButton *button = (KWQPopUpButton *)getView();
- int i = [button indexOfSelectedItem];
+
+ volatile int i = 0;
+
+ KWQ_BLOCK_NS_EXCEPTIONS;
+ i = [button indexOfSelectedItem];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
if (_currentItem == i) {
return false;
}
@@ -206,11 +239,16 @@ void QComboBox::setFont(const QFont &f)
const NSControlSize size = KWQNSControlSizeForFont(f);
NSControl * const button = static_cast<NSControl *>(getView());
+
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
if (size != [[button cell] controlSize]) {
[[button cell] setControlSize:size];
[button setFont:[NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:size]]];
_widthGood = false;
}
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
const int *QComboBox::dimensions() const
@@ -223,7 +261,13 @@ const int *QComboBox::dimensions() const
{ 0, 0, 1, 1, 2, 32, 0 }
};
NSControl * const button = static_cast<NSControl *>(getView());
- return w[[[button cell] controlSize]];
+
+ volatile NSControlSize size = NSSmallControlSize;
+ KWQ_BLOCK_NS_EXCEPTIONS;
+ size = [[button cell] controlSize];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
+ return w[size];
}
QWidget::FocusPolicy QComboBox::focusPolicy() const
diff --git a/WebCore/kwq/KWQCursor.mm b/WebCore/kwq/KWQCursor.mm
index eb7b9bf..dbfda65 100644
--- a/WebCore/kwq/KWQCursor.mm
+++ b/WebCore/kwq/KWQCursor.mm
@@ -26,6 +26,8 @@
#import "KWQCursor.h"
#import "KWQLogging.h"
+// The NSCursor cocoa calls here can't fail, so no need to block Cocoa exceptions
+
QCursor::QCursor()
: cursor(nil)
{
diff --git a/WebCore/kwq/WebCoreImageRendererFactory.m b/WebCore/kwq/KWQExceptions.h
similarity index 76%
copy from WebCore/kwq/WebCoreImageRendererFactory.m
copy to WebCore/kwq/KWQExceptions.h
index e2a0005..ead0257 100644
--- a/WebCore/kwq/WebCoreImageRendererFactory.m
+++ b/WebCore/kwq/KWQExceptions.h
@@ -23,26 +23,19 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#import "WebCoreImageRendererFactory.h"
+#import <Foundation/NSException.h>
#import "KWQAssertions.h"
- at implementation WebCoreImageRendererFactory
+#define KWQ_BLOCK_NS_EXCEPTIONS NS_DURING
-static WebCoreImageRendererFactory *sharedFactory;
+#define KWQ_UNBLOCK_NS_EXCEPTIONS NS_HANDLER \
+ if (ASSERT_DISABLED) { \
+ NSLog(@"Uncaught exception - %@\n", localException); \
+ } else { \
+ ASSERT_WITH_MESSAGE(@"Uncaught exception - %@", localException); \
+ } \
+NS_ENDHANDLER
-+ (WebCoreImageRendererFactory *)sharedFactory
-{
- return sharedFactory;
-}
+#define KWQ_UNBLOCK_RETURN_VALUE(val,type) NS_VALUERETURN(val,type)
-- init
-{
- [super init];
-
- ASSERT(!sharedFactory);
- sharedFactory = [self retain];
-
- return self;
-}
-
- at end
+#define KWQ_UNBLOCK_RETURN NS_VOIDRETURN
diff --git a/WebCore/kwq/KWQFile.mm b/WebCore/kwq/KWQFile.mm
index a76ca9a..60530b6 100644
--- a/WebCore/kwq/KWQFile.mm
+++ b/WebCore/kwq/KWQFile.mm
@@ -25,6 +25,7 @@
#import "KWQFile.h"
+// This NSString call can't throw so no need to block exceptions
QFile::QFile(const QString &n) : name(strdup(n.isEmpty() ? "" : [n.getNSString() fileSystemRepresentation])), fd(-1)
{
}
diff --git a/WebCore/kwq/KWQFileButton.mm b/WebCore/kwq/KWQFileButton.mm
index 40b5833..0dd4352 100644
--- a/WebCore/kwq/KWQFileButton.mm
+++ b/WebCore/kwq/KWQFileButton.mm
@@ -26,6 +26,7 @@
#import "KWQFileButton.h"
#import "KWQAssertions.h"
+#import "KWQExceptions.h"
#import "KWQKHTMLPart.h"
#import "WebCoreBridge.h"
@@ -43,54 +44,91 @@ NSString *WebCoreFileButtonClicked = @"WebCoreFileButtonClicked";
@end
KWQFileButton::KWQFileButton(KHTMLPart *part)
- : QWidget([KWQ(part)->bridge() fileButton])
- , _clicked(this, SIGNAL(clicked()))
+ : _clicked(this, SIGNAL(clicked()))
, _textChanged(this, SIGNAL(textChanged(const QString &)))
- , _adapter([[KWQFileButtonAdapter alloc] initWithKWQFileButton:this])
+ , _adapter(0)
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
+ setView([KWQ(part)->bridge() fileButton]);
+ _adapter = [[KWQFileButtonAdapter alloc] initWithKWQFileButton:this];
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
KWQFileButton::~KWQFileButton()
{
_adapter->button = 0;
+ KWQ_BLOCK_NS_EXCEPTIONS;
[_adapter release];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
void KWQFileButton::setFilename(const QString &f)
{
NSView <WebCoreFileButton> *button = getView();
+
+ KWQ_BLOCK_NS_EXCEPTIONS;
[button setFilename:f.getNSString()];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
QSize KWQFileButton::sizeForCharacterWidth(int characters) const
{
ASSERT(characters > 0);
NSView <WebCoreFileButton> *button = getView();
- return QSize([button bestVisualFrameSizeForCharacterCount:characters]);
+
+ NSSize size = {0,0};
+ KWQ_BLOCK_NS_EXCEPTIONS;
+ size = [button bestVisualFrameSizeForCharacterCount:characters];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
+ return QSize(size);
}
QRect KWQFileButton::frameGeometry() const
{
NSView <WebCoreFileButton> *button = getView();
- return QRect([button visualFrame]);
+
+ NSRect frame = {{0,0},{0,0}};
+ KWQ_BLOCK_NS_EXCEPTIONS;
+ frame = [button visualFrame];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
+ return QRect(frame);
}
void KWQFileButton::setFrameGeometry(const QRect &rect)
{
NSView <WebCoreFileButton> *button = getView();
+
+ KWQ_BLOCK_NS_EXCEPTIONS;
[button setVisualFrame:rect];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
int KWQFileButton::baselinePosition() const
{
NSView <WebCoreFileButton> *button = getView();
- return (int)([button frame].origin.y + [button baseline] - [button visualFrame].origin.y);
+
+ volatile int position = 0;
+ KWQ_BLOCK_NS_EXCEPTIONS;
+ position = (int)([button frame].origin.y + [button baseline] - [button visualFrame].origin.y);
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
+ return position;
}
void KWQFileButton::filenameChanged()
{
NSView <WebCoreFileButton> *button = getView();
- _textChanged.call(QString::fromNSString([button filename]));
+
+ QString filename;
+ KWQ_BLOCK_NS_EXCEPTIONS;
+ filename = QString::fromNSString([button filename]);
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
+ _textChanged.call();
}
void KWQFileButton::clicked()
diff --git a/WebCore/kwq/KWQKCookieJar.mm b/WebCore/kwq/KWQKCookieJar.mm
index 6bdd638..ac3a103 100644
--- a/WebCore/kwq/KWQKCookieJar.mm
+++ b/WebCore/kwq/KWQKCookieJar.mm
@@ -25,14 +25,21 @@
#import "KWQKCookieJar.h"
-#import "WebCoreCookieAdapter.h"
+#import "KWQExceptions.h"
#import "KWQKURL.h"
+#import "WebCoreCookieAdapter.h"
+#import <Foundation/NSString.h>
QString KWQKCookieJar::cookie(const KURL &url)
{
- NSString *result = [[WebCoreCookieAdapter sharedAdapter] cookiesForURL:url.url().getNSString()];
+ volatile NSString * volatile result = nil;
+
+ KWQ_BLOCK_NS_EXCEPTIONS;
+ result = [[WebCoreCookieAdapter sharedAdapter] cookiesForURL:url.url().getNSString()];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
if (result != nil) {
- return QString::fromNSString(result);
+ return QString::fromNSString((NSString *)result);
} else {
return QString();
}
@@ -40,11 +47,21 @@ QString KWQKCookieJar::cookie(const KURL &url)
void KWQKCookieJar::setCookie(const KURL &url, const KURL &policyBaseURL, const QString &cookie)
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
[[WebCoreCookieAdapter sharedAdapter] setCookies:cookie.getNSString()
- forURL:url.url().getNSString() policyBaseURL:policyBaseURL.url().getNSString()];
+ forURL:url.url().getNSString() policyBaseURL:policyBaseURL.url().getNSString()];
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
bool KWQKCookieJar::cookieEnabled()
{
- return [[WebCoreCookieAdapter sharedAdapter] cookiesEnabled];
+ volatile bool enabled = false;
+
+ KWQ_BLOCK_NS_EXCEPTIONS;
+ enabled = [[WebCoreCookieAdapter sharedAdapter] cookiesEnabled];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
+ return enabled;
}
diff --git a/WebCore/kwq/KWQKHTMLPartBrowserExtension.mm b/WebCore/kwq/KWQKHTMLPartBrowserExtension.mm
index 22f6c13..6afe2fd 100644
--- a/WebCore/kwq/KWQKHTMLPartBrowserExtension.mm
+++ b/WebCore/kwq/KWQKHTMLPartBrowserExtension.mm
@@ -24,8 +24,10 @@
*/
#import "KWQKHTMLPartBrowserExtension.h"
-#import "khtml_part.h"
+
+#import "KWQExceptions.h"
#import "WebCoreBridge.h"
+#import "khtml_part.h"
KHTMLPartBrowserExtension::KHTMLPartBrowserExtension(KHTMLPart *part)
: _part(KWQ(part)), _browserInterface(_part)
@@ -78,10 +80,12 @@ void KHTMLPartBrowserExtension::createNewWindow(const KURL &url,
const KParts::WindowArgs &winArgs,
KParts::ReadOnlyPart **partResult)
{
- NSString *frameName = urlArgs.frameName.length() == 0 ? nil : urlArgs.frameName.getNSString();
+ KWQ_BLOCK_NS_EXCEPTIONS;
+ NSString *frameName = urlArgs.frameName.length() == 0 ? nil : urlArgs.frameName.getNSString();
+
WebCoreBridge *bridge;
-
+
if (frameName != nil) {
bridge = [_part->bridge() findFrameNamed:frameName];
if (bridge != nil) {
@@ -89,11 +93,13 @@ void KHTMLPartBrowserExtension::createNewWindow(const KURL &url,
[bridge loadURL:url.getNSURL() referrer:[_part->bridge() referrer] reload:urlArgs.reload onLoadEvent:false target:nil triggeringEvent:nil form:nil formValues:nil];
}
[bridge focusWindow];
- *partResult = [bridge part];
- return;
+ if (partResult) {
+ *partResult = [bridge part];
+ }
+ KWQ_UNBLOCK_RETURN;
}
}
-
+
bridge = [_part->bridge() createWindowWithURL:url.getNSURL() frameName:frameName];
if (!winArgs.toolBarsVisible) {
@@ -115,7 +121,7 @@ void KHTMLPartBrowserExtension::createNewWindow(const KURL &url,
if (winArgs.xSet || winArgs.ySet || winArgs.widthSet || winArgs.heightSet) {
NSRect frame = [bridge windowFrame];
NSRect contentRect = [bridge windowContentRect];
-
+
if (winArgs.xSet) {
frame.origin.x = winArgs.x;
}
@@ -140,15 +146,28 @@ void KHTMLPartBrowserExtension::createNewWindow(const KURL &url,
[bridge showWindow];
- *partResult = [bridge part];
+ if (partResult) {
+ *partResult = [bridge part];
+ }
+ KWQ_UNBLOCK_RETURN;
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
+ if (partResult) {
+ *partResult = NULL;
+ }
}
void KHTMLPartBrowserExtension::setIconURL(const KURL &url)
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
[_part->bridge() setIconURL:url.getNSURL()];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
void KHTMLPartBrowserExtension::setTypedIconURL(const KURL &url, const QString &type)
{
+ KWQ_BLOCK_NS_EXCEPTIONS;
[_part->bridge() setIconURL:url.getNSURL() withType:type.getNSString()];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
}
diff --git a/WebCore/kwq/KWQKHistoryProvider.mm b/WebCore/kwq/KWQKHistoryProvider.mm
index 8096b24..b44c716 100644
--- a/WebCore/kwq/KWQKHistoryProvider.mm
+++ b/WebCore/kwq/KWQKHistoryProvider.mm
@@ -25,6 +25,7 @@
#import "KWQKPartsHistoryProvider.h"
+#import "KWQExceptions.h"
#import "KWQKURL.h"
#import "WebCoreHistory.h"
@@ -43,7 +44,15 @@ void HistoryProvider::insert(const QString &s)
bool HistoryProvider::contains(const QString &s) const
{
- return [[WebCoreHistory historyProvider] containsItemForURLString: KURL(s).canonicalURL().getNSString()];
+ volatile bool result = false;
+
+ KWQ_BLOCK_NS_EXCEPTIONS;
+
+ result = [[WebCoreHistory historyProvider] containsItemForURLString: KURL(s).canonicalURL().getNSString()];
+
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
+
+ return result;
}
} // namespace KParts
diff --git a/WebCore/kwq/KWQKPartsBrowserInterface.mm b/WebCore/kwq/KWQKPartsBrowserInterface.mm
index c515b07..c1eb7e7 100644
--- a/WebCore/kwq/KWQKPartsBrowserInterface.mm
+++ b/WebCore/kwq/KWQKPartsBrowserInterface.mm
@@ -26,6 +26,7 @@
#import "KWQKPartsBrowserInterface.h"
#import "KWQAssertions.h"
+#import "KWQExceptions.h"
#import "KWQKHTMLPart.h"
#import "WebCoreBridge.h"
@@ -44,7 +45,9 @@ void BrowserInterface::callMethod(const char *name, const QVariant &argument)
{
if (strcmp(name, "goHistory(int)") == 0) {
int distance = argument.toInt();
- [_part->bridge() goBackOrForward:distance];
+ KWQ_BLOCK_NS_EXCEPTIONS;
+ [_part->bridge() goBackOrForward:distance];
+ KWQ_UNBLOCK_NS_EXCEPTIONS;
return;
}
ERROR("method %s not implemented", name);
diff --git a/WebCore/kwq/KWQKStandardDirs.mm b/WebCore/kwq/KWQKStandardDirs.mm
index 498b585..d731ac8 100644
--- a/WebCore/kwq/KWQKStandardDirs.mm
+++ b/WebCore/kwq/KWQKStandardDirs.mm
@@ -25,6 +25,9 @@
#import "KWQKStandardDirs.h"
+// The NSBundle calls in this file can't throw, so no need to block
+// Cocoa exceptions.
+
@interface KWQKStandardDirsBundleDummy : NSObject { }
@end
@implementation KWQKStandardDirsBundleDummy
diff --git a/WebCore/kwq/KWQKURL.mm b/WebCore/kwq/KWQKURL.mm
index 045c166..bb21e9d 100644
--- a/WebCore/kwq/KWQKURL.mm
+++ b/WebCore/kwq/KWQKURL.mm
@@ -28,6 +28,9 @@
#import "KWQAssertions.h"
#import "KWQTextCodec.h"
+// The simple Cocoa calls to NSString, NSURL and NSData can't throw so
+// no need to block NSExceptions here.
+
typedef enum {
// alpha
SchemeFirstChar = 1 << 0,
diff --git a/WebCore/kwq/KWQKWinModule.mm b/WebCore/kwq/KWQKWinModule.mm
index 1807a09..878dc8c 100644
--- a/WebCore/kwq/KWQKWinModule.mm
+++ b/WebCore/kwq/KWQKWinModule.mm
@@ -27,6 +27,8 @@
QRect KWinModule::workArea() const
{
+ // No need to block exceptions because these simple NSScreen calls can't throw.
+
NSRect visibleRect = [[NSScreen mainScreen] visibleFrame];
NSRect rect = [[NSScreen mainScreen] frame];
return QRect((int)visibleRect.origin.x,
diff --git a/WebCore/kwq/KWQObject.mm b/WebCore/kwq/KWQObject.mm
index a716afa..79551f7 100644
--- a/WebCore/kwq/KWQObject.mm
+++ b/WebCore/kwq/KWQObject.mm
@@ -28,6 +28,10 @@
#import "KWQVariant.h"
#import "KWQAssertions.h"
+// The Foundation-level Cocoa calls here (NSTimer, NSDate, NSArray,
+// NSDictionary) should be exception-free, so no need to block
+// exceptions.
+
const QObject *QObject::_sender;
bool QObject::_defersTimers;
diff --git a/WebCore/kwq/KWQString.mm b/WebCore/kwq/KWQString.mm
index a208440..79b83c4 100644
--- a/WebCore/kwq/KWQString.mm
+++ b/WebCore/kwq/KWQString.mm
@@ -680,6 +680,9 @@ QString QString::fromNSString(NSString *nss)
NSString *QString::getNSString() const
{
+ // The Cocoa calls in this method don't need exceptions blocked
+ // because they are simple NSString calls that can't throw.
+
if (dataHandle[0]->_isUnicodeValid) {
return [NSString stringWithCharacters:(const unichar *)unicode() length:dataHandle[0]->_length];
}
diff --git a/WebCore/kwq/KWQTimer.mm b/WebCore/kwq/KWQTimer.mm
index 4aeada0..665fe08 100644
--- a/WebCore/kwq/KWQTimer.mm
+++ b/WebCore/kwq/KWQTimer.mm
@@ -27,6 +27,10 @@
#import "KWQAssertions.h"
+// We know the Cocoa calls in this file are safe because they are all
+// to the simple ObjC class defined here, or simple NSTimer calls that
+// can't throw.
+
@interface KWQTimerTarget : NSObject
{
QTimer *timer;
diff --git a/WebCore/kwq/KWQWindowWidget.mm b/WebCore/kwq/KWQWindowWidget.mm
index 4198188..76bb897 100644
--- a/WebCore/kwq/KWQWindowWidget.mm
+++ b/WebCore/kwq/KWQWindowWidget.mm
@@ -29,6 +29,9 @@
#import <Cocoa/Cocoa.h>
+// The NSScreen calls in this file can't throw, so no need to block
+// Cocoa exceptions.
+
class KWQWindowWidgetPrivate
{
public:
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list