2012-07-06 Lucas Forschler Merge 116381 2012-04-02 Mark Rowe Merge r112801. 2012-03-31 Anders Carlsson 32-bit plug-ins need to opt into magnified mode https://bugs.webkit.org/show_bug.cgi?id=82837 Reviewed by Simon Fraser. * PluginProcess/mac/PluginProcessMainMac.mm: (WebKit::PluginProcessMain): 2012-03-16 Lucas Forschler Merge 106977 2012-02-06 Anders Carlsson ScrollableAreaSet should be moved from Page to FrameView https://bugs.webkit.org/show_bug.cgi?id=62762 Reviewed by Beth Dakin. * WebProcess/Plugins/PDF/BuiltInPDFView.cpp: (WebKit::BuiltInPDFView::initialize): Call FrameView::addScrollableArea instead. (WebKit::BuiltInPDFView::destroy): Call FrameView::removeScrollableArea instead. * WebProcess/Plugins/PDF/BuiltInPDFView.h: Remove disconnectFromPage since it no longer exists on ScrollableArea. 2012-03-16 Lucas Forschler Merge 103880 2012-01-01 Dan Bernstein EnvironmentUtilities::stripValuesEndingWithString enters an infinite loop if the search value occurs a component other than the first. Reviewed by Anders Carlsson. * Platform/unix/EnvironmentUtilities.cpp: (WebKit::EnvironmentUtilities::stripValuesEndingWithString): Changed to start the search for the next colon after the current colon. 2012-03-16 Lucas Forschler Merge 103843 2011-12-30 Dan Bernstein EnvironmentUtilities::stripValuesEndingWithString fails when the variable ends with the search value https://bugs.webkit.org/show_bug.cgi?id=75389 Reviewed by Anders Carlsson. * Platform/unix/EnvironmentUtilities.cpp: (WebKit::EnvironmentUtilities::stripValuesEndingWithString): Fixed an off-by-1 error when examining the character after the match. 2012-03-14 Lucas Forschler Merge 107307 2012-02-09 Matthew Delaney HiDPI: WebKit2's drag images are blurry https://bugs.webkit.org/show_bug.cgi?id=67779 Use the proper deviceScaleFactor() instead of accessing _intrinsicDeviceScaleFactor Reviewed by Beth Dakin. * UIProcess/API/mac/WKView.mm: (-[WKView _setDragImage:at:linkDrag:]): 2012-03-14 Lucas Forschler Merge 107267 2012-02-09 Matthew Delaney HiDPI: WebKit2's link-dragging images are blurry https://bugs.webkit.org/show_bug.cgi?id=67779 Reviewed by Beth Dakin. Teach startDrag about the deviceScaleFactor so that it creates an appropriately scaled bitmap image to ship over. * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: (WebKit::WebDragClient::startDrag): (WebKit::convertImageToBitmap): Have setDragImage assume that it's receiving a bitmap image scaled up by the deviceScaleFactor that it sees. * UIProcess/API/mac/WKView.mm: (-[WKView _setDragImage:at:linkDrag:]): 2012-02-15 Anders Carlsson Mouse input events in plug-ins have a vertical offset when the page is zoomed Do apply the scale factor to mouse events. This was removed in r102540, but it's needed on the branch since we don't do the same coordinate conversion inside NetscapePluginMac.mm on the branch that we do in ToT. * Shared/WebEvent.h: * Shared/WebMouseEvent.cpp: (WebKit::WebMouseEvent::WebMouseEvent): * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::handleEvent): 2011-02-13 Lucas Forschler Rollout r105763. 2012-01-18 Anders Carlsson REGRESSION: Incomplete repaint on Flash element after pinch to zoom Make sure to apply the scale factor before converting the location to window coordinates, and then unapply it. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::viewGeometryDidChange): 2011-02-13 Lucas Forschler Rollout r105100 and r104070. 2011-02-06 Lucas Forschler Merge 106678 2012-02-03 Beth Dakin https://bugs.webkit.org/show_bug.cgi?id=77691 Fix PlatformScreen layering violation and PlatformScreenMac's incorrect use of device scale Reviewed by Andy Estes. toUserSpace() and toDeviceSpace() don't need to take device scale. * UIProcess/API/mac/WKView.mm: (-[WKView _convertToDeviceSpace:]): (-[WKView _convertToUserSpace:]): 2011-02-02 Lucas Forschler Merge 106508 2012-02-01 Anders Carlsson REGRESSION (r104727): Strange graphics corruption opening a new tab in Safari https://bugs.webkit.org/show_bug.cgi?id=77578 Reviewed by Dan Bernstein. Resizing a window will always invalidate the window backing store, so make sure to set _data->_windowHasValidBackingStore to NO whenever that happens. * UIProcess/API/mac/WKView.mm: (-[WKView addWindowObserversForWindow:]): Use separate methods for the NSWindowDidMoveNotification and NSWindowDidResizeNotification notifications. (-[WKView _windowDidMove:]): Call -[WKView _updateWindowAndViewFrames]. (-[WKView _windowDidResize:]): Call -[WKView _updateWindowAndViewFrames] and mark the window backing store as invalid. 2011-02-01 Lucas Forschler Merge 106271 2012-01-30 Beth Dakin https://bugs.webkit.org/show_bug.cgi?id=77263 PlatformScreenMac should not rely on NSWindow for important bits of data Reviewed by Geoff Garen. toUserSpace() and toDeviceSpace() now take a parameter for the deviceScaleFactor. * UIProcess/API/mac/WKView.mm: (-[WKView _convertToDeviceSpace:]): (-[WKView _convertToUserSpace:]): 2012-01-26 Mark Rowe Merge r102507. 2011-12-09 Mark Rowe Fix the Snow Leopard build some more. Move the #if to a location where it will do some good. * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.mm: 2012-01-26 Mark Rowe Merge r102504. 2011-12-09 Mark Rowe Fix the Snow Leopard build. Wrap some code that is only applicable to Lion and newer in the appropriate #if's. * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.h: * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.mm: * UIProcess/Launcher/mac/ProcessLauncherMac.mm: (WebKit::ProcessLauncher::launchProcess): 2012-01-26 Mark Rowe Merge r102497. 2011-12-07 Mark Rowe WebProcess and PluginProcess should inherit environment variables provided in LC_DYLD_ENVIRONMENT of main executable binary. Reviewed by Darin Adler. * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.h: Added. * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.mm: Added. (WebKit::DynamicLinkerEnvironmentExtractor::DynamicLinkerEnvironmentExtractor): (WebKit::DynamicLinkerEnvironmentExtractor::processEnvironmentVariable): Parse out the name and value from the environment string and add an entry to our variable map if the variable is one that dyld would respect in LC_DYLD_ENVIRONMENT. (WebKit::DynamicLinkerEnvironmentExtractor::processLoadCommand): Look for a LC_DYLD_ENVIRONMENT load command and extract any environment string that we find within. (WebKit::DynamicLinkerEnvironmentExtractor::processLoadCommands): Iterate over each load command in the Mach-O file. (WebKit::DynamicLinkerEnvironmentExtractor::processSingleArchitecture): Determine whether the Mach-O file is of the correct architecture, and if so then process the load commands found within. (WebKit::DynamicLinkerEnvironmentExtractor::processFatFile): Process each architecture of the Mach-O file in turn. (WebKit::DynamicLinkerEnvironmentExtractor::getExtractedEnvironmentVariables): Add our extracted variables to the passed-in EnvironmentVariables object. We skip adding any variables that already exist so as to allow variables passed in the environment to override those that we extract from the executable file. * UIProcess/Launcher/mac/ProcessLauncherMac.mm: (WebKit::ProcessLauncher::launchProcess): Extract the environment variables from the main binary and add them to the launch environment of our subprocess. * WebKit2.xcodeproj/project.pbxproj: 2012-01-25 Mark Rowe Merge r105942. 2012-01-25 Mark Rowe Build in to an alternate location when USE_STAGING_INSTALL_PATH is set. Adopt USE_STAGING_INSTALL_PATH Reviewed by David Kilzer. * Configurations/BaseTarget.xcconfig: Define NORMAL_WEBKIT2_FRAMEWORKS_DIR, which contains the path where WebKit is normally installed. Update WEBKIT2_FRAMEWORKS_DIR to point to the staged frameworks directory when USE_STAGING_INSTALL_PATH is set. Update UMBRELLA_FRAMEWORKS_DIR so we can find WebCore at the top level of the staged frameworks directory when USE_STAGING_INSTALL_PATH is set, rather than finding it embedded inside of WebKit.framework. * Configurations/PluginProcess.xcconfig: Set our install path based on WEBKIT2_FRAMEWORKS_DIR. * Configurations/WebKit2.xcconfig: Set our install path based on WEBKIT2_FRAMEWORKS_DIR. Always set the framework's install name based on the normal framework location. This prevents an incorrect install name from being used when installing in to the staged frameworks directory. * Configurations/WebProcess.xcconfig: Set our install path based on WEBKIT2_FRAMEWORKS_DIR. 2011-01-25 Lucas Forschler Merge 102819 2011-12-14 Mark Rowe NPN_GetValueForURL returns wrong value for NPNURLVProxy Reviewed by Anders Carlsson. * PluginProcess/PluginControllerProxy.cpp: (WebKit::PluginControllerProxy::proxiesForURL): Fix a copy-paste error. 2011-01-24 Lucas Forschler Merge 105558 2012-01-20 Steve Falkenburg Reviewed by Alexey Proskuryakov. Drag/drop of a file into a WebView on Windows needs to allow access to that file https://bugs.webkit.org/show_bug.cgi?id=76753 The Windows drag/drop code path was missing the code to open a file read exception. Added code to match the Mac version, while allowing directories and multiple files to also be dragged (matching our previous behavior). * UIProcess/win/WebView.cpp: (WebKit::maybeCreateSandboxExtensionFromDragData): Added. (WebKit::WebView::Drop): Add a universal read exception if we're dragging a file into a WebView to open it. 2012-01-18 Anders Carlsson REGRESSION: Incomplete repaint on Flash element after pinch to zoom Make sure to apply the scale factor before converting the location to window coordinates, and then unapply it. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::viewGeometryDidChange): 2012-01-18 Lucas Forschler * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::viewGeometryDidChange): 2012-01-17 Mark Rowe Merge r104727. 2012-01-11 Anders Carlsson Webpages flash white when switching between windows https://bugs.webkit.org/show_bug.cgi?id=76080 Reviewed by Dan Bernstein. Introduce a _windowHasValidBackingStore boolean and only paint the background (white or clear) if it's false. * UIProcess/API/mac/WKView.mm: (-[WKView setFrameSize:]): Set _windowHasValidBackingStore to false if the new size is different from the old size. (-[WKView viewDidMoveToWindow]): Set _windowHasValidBackingStore to false. (-[WKView _windowDidMiniaturize:]): Set _windowHasValidBackingStore to false. (-[WKView _windowDidChangeBackingProperties:]): Set _windowHasValidBackingStore to false. (-[WKView drawRect:]): Only call drawPageBackground if _windowHasValidBackingStore is false. Set it to true after painting. 2012-01-17 Anders Carlsson REGRESSION: Incomplete repaint on Flash element after pinch to zoom Pass the frame rect as the clip rect in the wantsWindowRelativeCoordinates() case as well, since clip rect computation is broken for transformed plug-ins. This matches the !wantsWindowRelativeCoordinates() case. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::viewGeometryDidChange): 2012-01-16 Mark Rowe Merge r103860. 2011-12-31 Dan Bernstein Cannot print USPS shipping labels http://webkit.org/b/72801 Reviewed by Anders Carlsson and Alexey Proskuryakov. * WebProcess/Plugins/PDF/BuiltInPDFView.cpp: (appendValuesInPDFNameSubtreeToVector): Copied from WebKit/mac/WebView/WebPDFDocumentExtras.mm. (getAllValuesInPDFNameTree): Ditto. (getAllScriptsInPDFDocument): Copied allScriptsInPDFDocument() from WebPDFDocumentExtras.mm and changed it to append to a Vector >. (WebKit::BuiltInPDFView::create): Changed to take a WebFrame* rather than a Page*. (WebKit::BuiltInPDFView::BuiltInPDFView): Ditto. Updated initializer accordingly. (WebKit::BuiltInPDFView::pdfDocumentDidLoad): Copied and adapted code from -[WebPDFRepresentation finishedLoadingWithDataSource:] to run scripts from the PDF with a Doc object as the this object. (WebKit::BuiltInPDFView::initialize): Adapted for the change from having a Page* to having a WebFrame*. (WebKit::BuiltInPDFView::destroy): Ditto. (WebKit::BuiltInPDFView::isActive): Ditto. (WebKit::jsPDFDocInitialize): Added. Refs the BuiltInPDFView which is the private object for this Doc. (WebKit::jsPDFDocFinalize): Added. Derefs the BuiltInPDFView for this Doc. (WebKit::BuiltInPDFView::jsPDFDocPrint): Added. Calls WebCore::Chrome::print(). (WebKit::BuiltInPDFView::makeJSPDFDoc): Copied from WebKit/mac/WebView/WebJSPDFDoc.mm and modified to use this BuiltInPDFView as the private object of the Doc being made. * WebProcess/Plugins/PDF/BuiltInPDFView.h: (WebKit::BuiltInPDFView::disconnectFromPage): Adapted for the change from having a Page* to having a WebFrame*. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::createPlugin): Pass the WebFrame to WebPage::createPlugin(). * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::createPlugin): Added a WebFrame* parameter, which is used when creating a BuiltInPDFView. * WebProcess/WebPage/WebPage.h: 2012-01-16 Mark Rowe Merge r104049. 2012-01-04 Alexey Proskuryakov First sentence is missing or clipped when printing a inline PDF https://bugs.webkit.org/show_bug.cgi?id=75514 Reviewed by Dan Bernstein. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::headerHeight): (WebKit::WebPageProxy::footerHeight): (WebKit::WebPageProxy::drawHeader): (WebKit::WebPageProxy::drawFooter): Do not ask the client about headers and footers when printing a PDF. 2012-01-16 Mark Rowe Merge r103925. 2012-01-02 Dan Bernstein Fixed a typo I made in r103871. Fixes Inline PDF doesn't preview correctly when attempting to print its frame * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::drawRectToPDF): Changed USE(GC) to USE(CG). 2012-01-16 Mark Rowe Merge r103871. 2011-12-31 Dan Bernstein Continue trying to fix the ASSERT-enabled Windows build after r103858. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::drawRectToPDF): (WebKit::WebPage::drawPagesToPDF): 2012-01-16 Mark Rowe Merge r103869. 2011-12-31 Dan Bernstein Start trying to fix the Windows build after r103858. * WebProcess/WebPage/WebPage.cpp: (WebKit::drawPDFPage): 2012-01-16 Mark Rowe Merge r103858. 2011-12-31 Dan Bernstein REGRESSION (WebKit2): Printing a subframe containing a PDF prints the on-screen view instead of the entire PDF document Reviewed by Alexey Proskuryakov. * UIProcess/API/C/WKPage.cpp: (WKPageDrawPagesToPDF): Added WKPrintInfo parameter, which is passed through as a PrintInfo to the WebPageProxy. * UIProcess/API/C/WKPagePrivate.h: * UIProcess/API/mac/WKPrintingView.mm: (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]): Changed to pass the PrintInfo down to WebPageProxy::drawPagesToPDF. (-[WKPrintingView _drawPreview:]): Changed to pass the PrintInfo down to WebPageProxy::drawRectToPDF. * UIProcess/API/mac/WKView.mm: (-[WKView canChangeFrameLayout:]): Changed to use WebFrameProxy::isDisplayingPDFDocument, which works for subframes as well. (-[WKView printOperationWithPrintInfo:forFrame:]): Added a FIXME. * UIProcess/WebFrameProxy.cpp: (WebKit::WebFrameProxy::isDisplayingPDFDocument): Added. * UIProcess/WebFrameProxy.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::drawRectToPDF): Added a PrintInfo parameter, which is passed through to the Web process. (WebKit::WebPageProxy::drawPagesToPDF): Ditto. * UIProcess/WebPageProxy.h: * WebProcess/Plugins/PDF/BuiltInPDFView.h: Added an override of pdfDocumentForPrinting() which returns the PDFDocument. * WebProcess/Plugins/Plugin.h: (WebKit::Plugin::pdfDocumentForPrinting): Added. This base class implementation returns 0. * WebProcess/Plugins/PluginView.h: (WebKit::PluginView::pdfDocumentForPrinting): Added. Calls through to the Plugin. * WebProcess/WebPage/WebPage.cpp: (WebKit::pdfDocumentForPrintingFrame): Added this helper function. If the frame is displaying a plug-in document, allows the plug-in to provide a PDF document for printing. (WebKit::WebPage::beginPrinting): Added an early return if the frame provides a PDF document for printing. (WebKit::WebPage::computePagesForPrinting): If the frame provides a PDF document for printing, create for each page in the PDF document a page rect with the size available for printing. (WebKit::drawPDFPage): Added this helper function, which draws a page from the PDF document into one of the aforementioned page rects. It rotates the PDF page 90 degrees if necessary to better match the aspect ratio of the paper, then it centers it on the paper. This matches the behavior of a PDFView when printed with default settings. (WebKit::WebPage::drawRectToPDF): If the frame provides a PDF document for printing, draw the PDF pages falling within the requested rect. (WebKit::WebPage::drawPagesToPDF): If the frame provides a PDF document for printing, draw the requested pages. * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: Added a PrintInfo parameter to DrawRectToPDF and DrawPagesToPDF. 2012-01-16 Mark Rowe Merge r102540. 2011-12-11 Andreas Kling WK2/NetscapePlugin: Incorrect mouse event coordinates when frameScaleFactor != 1. and Reviewed by Anders Carlsson. * Shared/WebEvent.h: * Shared/WebMouseEvent.cpp: Remove the WebMouseEvent "copy" constructor that applied a scale factor to the coordinates of an existing event. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::handleEvent): Pass the WebMouseEvent through to the plugin unmodified. (WebKit::PluginView::viewGeometryDidChange): Plumb a complex translate+scale transform through to the plugin, so coordinate space transformations in will behave correctly with scale factors other than 1. 2012-01-16 Mark Rowe Merge r96014. 2011-09-26 Alexey Proskuryakov REGRESSION (r95747): Activating the web inspector causes the web process to be killed https://bugs.webkit.org/show_bug.cgi?id=68762 Reviewed by Anders Carlsson. * UIProcess/WebInspectorProxy.cpp: (WebKit::WebInspectorProxy::createInspectorPage): Tell Web process that loading resources from WebCore resources directory is OK. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::loadHTMLString): (WebKit::WebPageProxy::loadAlternateHTMLString): * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::assumeReadAccessToBaseURL): * UIProcess/WebProcessProxy.h: Renamed willLoadHTMLStringWithBaseURL to more generic assumeReadAccessToBaseURL. * UIProcess/WebInspectorProxy.h: * UIProcess/efl/WebInspectorEfl.cpp: (WebKit::WebInspectorProxy::inspectorBaseURL): * UIProcess/gtk/WebInspectorGtk.cpp: (WebKit::WebInspectorProxy::inspectorBaseURL): * UIProcess/mac/WebInspectorProxyMac.mm: (WebKit::WebInspectorProxy::inspectorBaseURL): * UIProcess/qt/WebInspectorProxyQt.cpp: (WebKit::WebInspectorProxy::inspectorBaseURL): * UIProcess/win/WebInspectorProxyWin.cpp: (WebKit::WebInspectorProxy::inspectorBaseURL): Report what base directory Inspector has access to. 2012-01-16 Mark Rowe Merge r104663. 2012-01-10 Mark Rowe REGRESSION (r104377): All pages print blank on Snow Leopard / We need to explicitly load PDFKit.framework before using PDFDocument and friends. On SnowLeopard the framework is not necessarily loaded by anything else before we print, which would lead to us failing to allocate the PDFDocument that we use for drawing the content from the web process. Reviewed by Dan Bernstein. * UIProcess/API/mac/WKPrintingView.mm: (pdfKitFrameworkPath): Construct the path to the PDFKit framework. (classFromPDFKit): Ensure that the PDFKit framework is loaded, and then retrieve the given class from it. (pdfAnnotationLinkClass): ASSERT that we found the class. (pdfDocumentClass): Ditto. 2012-01-16 Mark Rowe Merge r104377. 2012-01-06 Mark Rowe REGRESSION (WebKit2): Save as PDF no longer generates links to URLs / WebKit2 printing works by having the web process render the page content to a PDF. The PDF data is then shipped to the UI process which will render it in to the printing graphics context. Links were being lost because the API used to do the rendering of the PDF in to the printing graphics context, CGContextDrawPDFPage, did not preserve the links that were present in the PDF content received from the web process. To fix this we switch to using PDFKit for drawing the PDF in to the printing graphics context. PDFKit provides the ability for us to iterate over the links in the PDF content ourselves and add links in to the printing graphics context. Reviewed by Alexey Proskuryakov. * UIProcess/API/mac/WKPrintingView.h: * UIProcess/API/mac/WKPrintingView.mm: (pdfAnnotationLinkClass): Look up the PDFAnnotationLink class from PDFKit as WebKit2 loads PDFKit lazily. (pdfDocumentClass): Ditto. (-[WKPrintingView _drawPDFDocument:page:atPoint:]): Switch to using the PDFKit equivalents of several types. Iterate over the annotations present in the PDFPage, calling CGPDFContextSetURLForRect for each PDFAnnotationLink that we find. (-[WKPrintingView _drawPreview:]): Create an NSData to feed to PDFDocument. (-[WKPrintingView drawRect:]): Ditto. * WebKit2Prefix.h: Add the usual workaround to make Objective-C exceptions compile when C++ exception handling is disabled. 2011-1-13 Lucas Forschler Merge 104269 2012-01-05 Dan Bernstein Update copyright strings Reviewed by Mark Rowe. * Info.plist: * PluginProcess/Info.plist: * WebProcess/Info.plist: 2011-1-13 Lucas Forschler Merge 104239 2012-01-05 Anders Carlsson Crash when trying to invalidate the NPRuntimeObjectMap for a plug-in in a subframe https://bugs.webkit.org/show_bug.cgi?id=75667 Reviewed by Kevin Decker. NPRuntimeObjectMap::invalidate is called whenever a plug-in view is destroyed. If invalidate is called for an object map whose plug-in has a null frame, we'd crash. The plug-in will have a null frame if the plug-in view is destroyed because its containing frame has been removed from the document, and if the plug-in view is being destroyed asynchronously due to the plug-in itself calling JavaScript that will remove the frame (see PluginView::unprotectPluginFromDestruction). The reason NPRuntimeObjectMap::invalidate will crash when the frame is null is because we were trying to access the frame's global object, causing a null dereference. The reason we were trying to get at the frame's global object was to create a Strong handle to a JSNPObject so we could stick the object in a vector so we could later iterate over the vector elements and call invalidate() on each JSNPObject which will end up releasing the underlying NPObject. However, it turns out that we don't need to stick the JSNPObject in a vector; we can just get the underlying NPObject directly and stick that in a vector and then iterate over the NPObjects, releasing them. * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp: (WebKit::NPRuntimeObjectMap::invalidate): 2011-1-12 Lucas Forschler Merge 102024 2011-12-03 Jer Noble