From 72cddaa366b2d76f9aec7c6e912f8a597cac2261 Mon Sep 17 00:00:00 2001 From: Cameron Kaiser Date: Tue, 12 Feb 2019 21:25:32 -0800 Subject: [PATCH] #164: fix static variables for anonymous methods ; implement plaintext of <> --- .../Contents/Resources/scripting.sdef.in | 4 +- .../applescript/src/MacScripting.mm | 58 +++++++++++++------ 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/browser/app/macbuild/Contents/Resources/scripting.sdef.in b/browser/app/macbuild/Contents/Resources/scripting.sdef.in index 4727ed8c5..e23a396df 100644 --- a/browser/app/macbuild/Contents/Resources/scripting.sdef.in +++ b/browser/app/macbuild/Contents/Resources/scripting.sdef.in @@ -302,10 +302,10 @@ - + - + diff --git a/toolkit/components/applescript/src/MacScripting.mm b/toolkit/components/applescript/src/MacScripting.mm index f65d68be3..04b59f4f0 100644 --- a/toolkit/components/applescript/src/MacScripting.mm +++ b/toolkit/components/applescript/src/MacScripting.mm @@ -107,8 +107,6 @@ typedef unsigned int NSUInteger; struct objc_method remoMeth; struct objc_method openMeth; struct objc_method_list methodList; - BOOL didInit; - NSUInteger openExpected; } + (GeckoScriptingRoot*)sharedScriptingRoot; @@ -208,6 +206,8 @@ void SetupMacScripting(void) { #pragma mark - static GeckoScriptingRoot *sharedScriptingRoot = nil; +static NSUInteger openExpected = 1; // we always start with a window +static BOOL didInit = NO; @implementation GeckoScriptingRoot @@ -222,9 +222,6 @@ static GeckoScriptingRoot *sharedScriptingRoot = nil; - (id)init { self = [super init]; - if (self) - didInit = NO; - openExpected = 0; return self; } @@ -277,6 +274,7 @@ static GeckoScriptingRoot *sharedScriptingRoot = nil; class_addMethods([application class], &methodList); didInit = YES; + openExpected = 1; } - (NSArray*)scriptWindows { @@ -676,12 +674,8 @@ static GeckoScriptingRoot *sharedScriptingRoot = nil; nsCOMPtr pdoc = piWindow->GetDoc(); if (!pdoc) return @""; - nsCOMPtr p = pdoc->GetShell(); - if (!p) - return @""; - nsIDocument* doc = p->GetDocument(); - if (doc) { - nsCOMPtr htmlDocument(do_QueryInterface(doc)); + if (pdoc) { + nsCOMPtr htmlDocument(do_QueryInterface(pdoc)); if (htmlDocument) { nsAutoString title; if (NS_SUCCEEDED(htmlDocument->GetTitle(title))) { @@ -763,24 +757,54 @@ static GeckoScriptingRoot *sharedScriptingRoot = nil; - (NSString*)source { #if(0) - nsCOMPtr document; - if (NS_SUCCEEDED(mContentWindow->GetDocument(getter_AddRefs(document))) && document) { + NS_WARNING("AppleScript: tab title"); + nsCOMPtr piWindow = do_QueryInterface(mContentWindow); + if (!piWindow) + return @""; + nsCOMPtr pdoc = piWindow->GetDoc(); + if (pdoc) { nsCOMPtr serializer(do_CreateInstance(NS_XMLSERIALIZER_CONTRACTID)); if (serializer) { nsAutoString source; - if (NS_SUCCEEDED(serializer->SerializeToString(document, source))) { + if (NS_SUCCEEDED(serializer->SerializeToString(pdoc, source))) { return [NSString stringWithUTF8String:NS_ConvertUTF16toUTF8(source).get()]; } } } -#endif return @""; +#endif } - (NSString*)text { + NS_WARNING("AppleScript: tab text"); + nsresult rv; + + nsCOMPtr piWindow = do_QueryInterface(mContentWindow); + if (!piWindow) + return @""; + nsCOMPtr pdoc = piWindow->GetDoc(); + if (!pdoc) + return @""; + nsCOMPtr domdoc = do_QueryInterface(pdoc); + if (!domdoc) + return @""; + + nsAutoString outbuf; + nsCOMPtr encoder = do_CreateInstance( + "@mozilla.org/layout/documentEncoder;1?type=text/plain"); + rv = encoder->Init(domdoc, NS_LITERAL_STRING("text/plain"), 0 | + nsIDocumentEncoder::SkipInvisibleContent | + nsIDocumentEncoder::OutputFormatted | + nsIDocumentEncoder::OutputLFLineBreak | + nsIDocumentEncoder::OutputFormatFlowed | + 0); + if (NS_FAILED(rv)) + return @""; + if (NS_SUCCEEDED(encoder->EncodeToString(outbuf))) { + return [NSString stringWithUTF8String:NS_ConvertUTF16toUTF8(outbuf).get()]; + } #if(0) - nsCOMPtr document; - if (NS_SUCCEEDED(mContentWindow->GetDocument(getter_AddRefs(document))) && document) { + if (pdoc) { nsresult rv = NS_OK; nsCAutoString formatType(NS_DOC_ENCODER_CONTRACTID_BASE);