Repository.mk                                                   |    1 
 desktop/Extension_test-crashextension.mk                        |   24 +
 desktop/Library_crashextension.mk                               |   28 +
 desktop/Module_desktop.mk                                       |    8 
 desktop/README.md                                               |   15 
 desktop/Rdb_crashextension.mk                                   |   12 
 desktop/test/deployment/crashextension/Addons.xcu               |   62 ++++
 desktop/test/deployment/crashextension/META-INF/manifest.xml    |   21 +
 desktop/test/deployment/crashextension/ProtocolHandler.xcu      |   20 +
 desktop/test/deployment/crashextension/crash.png                |binary
 desktop/test/deployment/crashextension/crashextension.component |   16 +
 desktop/test/deployment/crashextension/crashextension.cxx       |  152 
++++++++++
 desktop/test/deployment/crashextension/description.xml          |   21 +
 13 files changed, 380 insertions(+)

New commits:
commit 82f8a96065194913a6f452bd8fe0ac2ad26a4be0
Author:     Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
AuthorDate: Thu Jan 27 10:55:58 2022 +0100
Commit:     Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
CommitDate: Mon Feb 14 21:39:35 2022 +0100

    Add LibreOffice Crash extension
    
    This extension crashes LibreOffice.
    It is to be used to test the crashreporter setup.
    
    Change-Id: I494cdcd746dd49a4f566507712c601494a0bbfac
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128906
    Tested-by: Jenkins
    Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>

diff --git a/Repository.mk b/Repository.mk
index 0573cb2e51e1..aa654ce9c80d 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -774,6 +774,7 @@ $(eval $(call 
gb_Helper_register_libraries_for_install,UNOVERLIBS,ure, \
 $(eval $(call gb_Helper_register_libraries,EXTENSIONLIBS, \
        active_native \
        passive_native \
+       crashextension \
 ))
 
 ifneq ($(ENABLE_JAVA),)
diff --git a/desktop/Extension_test-crashextension.mk 
b/desktop/Extension_test-crashextension.mk
new file mode 100644
index 000000000000..aa525f72b8b2
--- /dev/null
+++ b/desktop/Extension_test-crashextension.mk
@@ -0,0 +1,24 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 
100 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call 
gb_Extension_Extension,test-crashextension,desktop/test/deployment/crashextension,nodeliver))
+
+$(eval $(call 
gb_Extension_add_file,test-crashextension,platform.components,$(call 
gb_Rdb_get_target,crashextension)))
+
+$(eval $(call gb_Extension_add_files,test-crashextension,, \
+    $(SRCDIR)/desktop/test/deployment/crashextension/Addons.xcu \
+    $(SRCDIR)/desktop/test/deployment/crashextension/ProtocolHandler.xcu \
+    $(SRCDIR)/desktop/test/deployment/crashextension/crash.png \
+))
+
+$(eval $(call gb_Extension_add_libraries,test-crashextension, \
+    crashextension \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/desktop/Library_crashextension.mk 
b/desktop/Library_crashextension.mk
new file mode 100644
index 000000000000..ae18412688a6
--- /dev/null
+++ b/desktop/Library_crashextension.mk
@@ -0,0 +1,28 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 
100 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Library_Library,crashextension))
+
+$(eval $(call gb_Library_add_exception_objects,crashextension, \
+    desktop/test/deployment/crashextension/crashextension \
+))
+
+$(eval $(call 
gb_Library_set_componentfile,crashextension,desktop/test/deployment/crashextension/crashextension,crashextension))
+
+$(eval $(call gb_Library_set_external_code,crashextension))
+
+$(eval $(call gb_Library_use_libraries,crashextension, \
+    cppu \
+    cppuhelper \
+    sal \
+))
+
+$(eval $(call gb_Library_use_sdk_api,crashextension))
+
+# vim: set noet sw=4 ts=4:
diff --git a/desktop/Module_desktop.mk b/desktop/Module_desktop.mk
index d160bc6128dc..fff879c83b0c 100644
--- a/desktop/Module_desktop.mk
+++ b/desktop/Module_desktop.mk
@@ -124,6 +124,14 @@ $(eval $(call gb_Module_add_targets,desktop, \
 ))
 endif
 
+ifneq (,$(filter Extension_test-crashextension,$(MAKECMDGOALS)))
+$(eval $(call gb_Module_add_targets,desktop, \
+    Extension_test-crashextension \
+    Library_crashextension \
+    Rdb_crashextension \
+))
+endif
+
 $(eval $(call gb_Module_add_check_targets,desktop, \
     CppunitTest_desktop_app \
     CppunitTest_desktop_version \
diff --git a/desktop/README.md b/desktop/README.md
index 1474f11e2718..88bed9658369 100644
--- a/desktop/README.md
+++ b/desktop/README.md
@@ -39,3 +39,18 @@ separated from each other by two-byte `NUL` code units.
 
 ### oosplash
 Splash screen for the LibreOffice `soffice` binary.
+
+
+## Extensions
+
+The directory `test/deployment` contains some extensions to be used for 
testing:
+
+* `test/deployment/crashextension`: C++ extension to make LibreOffice crash. 
Useful for testing Crashreporter.
+  * Build with `Extension_test-crashextension`.
+  * Extension can be found in `workdir/Extension/test-crashextension.oxt`
+* `test/deployment/passive`: C++, Java and Python extension samples with 
passive registration.
+  * Build with `make Extension_test-passive`.
+  * Extension can be found in `workdir/Extension/test-passive.oxt`
+* `test/deployment/active`: C++, Java and Python extension samples with active 
registration.
+  * Build with `make Extension_test-active`.
+  * Extension can be found in `workdir/Extension/test-active.oxt`
diff --git a/desktop/Rdb_crashextension.mk b/desktop/Rdb_crashextension.mk
new file mode 100644
index 000000000000..9229fe4b904d
--- /dev/null
+++ b/desktop/Rdb_crashextension.mk
@@ -0,0 +1,12 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 
100 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Rdb_Rdb,crashextension))
+
+# vim: set noet sw=4 ts=4:
diff --git a/desktop/test/deployment/crashextension/Addons.xcu 
b/desktop/test/deployment/crashextension/Addons.xcu
new file mode 100644
index 000000000000..114518a4c414
--- /dev/null
+++ b/desktop/test/deployment/crashextension/Addons.xcu
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+
+<o:items xmlns:o="http://openoffice.org/2001/registry";>
+  <item o:path="/org.openoffice.Office.Addons">
+    <node o:name="AddonUI">
+      <node o:name="Images">
+        <node 
o:name="org.libreoffice.test.desktop.deployment.crashextension.imageCrash" 
o:op="replace">
+          <prop o:name="URL">
+            
<value>vnd.org.libreoffice.test.desktop.deployment.crashextension:</value>
+          </prop>
+          <node o:name="UserDefinedImages">
+            <prop o:name="ImageSmallURL">
+              <value>%origin%/crash.png</value>
+            </prop>
+            <prop o:name="ImageBigURL">
+              <value>%origin%/crash.png</value>
+            </prop>
+          </node>
+        </node>
+      </node>
+      <node oor:name="OfficeToolbarMerging">
+        <node 
oor:name="org.libreoffice.test.desktop.deployment.crashextension.toolbarmerge" 
oor:op="replace">
+          <node oor:name="T1" oor:op="replace">
+            <prop oor:name="MergeToolBar">
+              <value>standardbar</value>
+            </prop>
+            <prop oor:name="MergePoint">
+              <value>.uno:HelpIndex</value>
+            </prop>
+            <prop oor:name="MergeCommand">
+              <value>AddAfter</value>
+            </prop>
+            <prop oor:name="MergeFallback">
+              <value>AddLast</value>
+            </prop>
+            <prop oor:name="MergeContext">
+              <value/>
+            </prop>
+            <node oor:name="ToolBarItems">
+              <node oor:name="B1" oor:op="replace">
+                <prop oor:name="URL">
+                  
<value>vnd.org.libreoffice.test.desktop.deployment.crashextension:</value>
+                </prop>
+                <prop oor:name="Title">
+                  <value xml:lang="en-US">Crash LibreOffice</value>
+                </prop>
+              </node>
+            </node>
+          </node>
+        </node>
+      </node>
+    </node>
+  </item>
+</o:items>
diff --git a/desktop/test/deployment/crashextension/META-INF/manifest.xml 
b/desktop/test/deployment/crashextension/META-INF/manifest.xml
new file mode 100644
index 000000000000..cbb801947363
--- /dev/null
+++ b/desktop/test/deployment/crashextension/META-INF/manifest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+
+<m:manifest xmlns:m="http://openoffice.org/2001/manifest";>
+  <m:file-entry m:media-type="application/vnd.sun.star.configuration-data"
+      m:full-path="Addons.xcu"/>
+  <m:file-entry m:media-type="application/vnd.sun.star.configuration-data"
+      m:full-path="ProtocolHandler.xcu"/>
+    <m:file-entry m:media-type="application/vnd.sun.star.configuration-data"
+      m:full-path="ToolbarMerge.xcu"/>
+  <m:file-entry
+      
m:media-type="application/vnd.sun.star.uno-components;platform=@PLATFORM@"
+      m:full-path="platform.components"/>
+</m:manifest>
diff --git a/desktop/test/deployment/crashextension/ProtocolHandler.xcu 
b/desktop/test/deployment/crashextension/ProtocolHandler.xcu
new file mode 100644
index 000000000000..f4011743bf5e
--- /dev/null
+++ b/desktop/test/deployment/crashextension/ProtocolHandler.xcu
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+
+<o:component-data xmlns:o="http://openoffice.org/2001/registry";
+    o:package="org.openoffice.Office" o:name="ProtocolHandler">
+  <node o:name="HandlerSet">
+    <node o:name="org.libreoffice.test.desktop.deployment.crashextension" 
o:op="replace">
+      <prop o:name="Protocols">
+        
<value>vnd.org.libreoffice.test.desktop.deployment.crashextension:*</value>
+      </prop>
+    </node>
+  </node>
+</o:component-data>
diff --git a/desktop/test/deployment/crashextension/crash.png 
b/desktop/test/deployment/crashextension/crash.png
new file mode 100644
index 000000000000..693df038c355
Binary files /dev/null and b/desktop/test/deployment/crashextension/crash.png 
differ
diff --git a/desktop/test/deployment/crashextension/crashextension.component 
b/desktop/test/deployment/crashextension/crashextension.component
new file mode 100644
index 000000000000..2597e444a8ea
--- /dev/null
+++ b/desktop/test/deployment/crashextension/crashextension.component
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+
+<component loader="com.sun.star.loader.SharedLibrary"
+    xmlns="http://openoffice.org/2010/uno-components";>
+  <implementation 
name="org.libreoffice.test.desktop.deployment.crashextension.impl">
+    <service name="org.libreoffice.test.desktop.deployment.crashextension"/>
+  </implementation>
+</component>
diff --git a/desktop/test/deployment/crashextension/crashextension.cxx 
b/desktop/test/deployment/crashextension/crashextension.cxx
new file mode 100644
index 000000000000..2e64f3af024b
--- /dev/null
+++ b/desktop/test/deployment/crashextension/crashextension.cxx
@@ -0,0 +1,152 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; 
fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cassert>
+#include <cstddef>
+
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/frame/DispatchDescriptor.hpp>
+#include <com/sun/star/frame/XDispatch.hpp>
+#include <com/sun/star/frame/XDispatchProvider.hpp>
+#include <com/sun/star/frame/XStatusListener.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/uno/DeploymentException.hpp>
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/uno/XInterface.hpp>
+#include <com/sun/star/util/URL.hpp>
+#include <cppuhelper/implbase3.hxx>
+#include <cppuhelper/implementationentry.hxx>
+#include <cppuhelper/supportsservice.hxx>
+#include <rtl/ustring.hxx>
+#include <uno/lbnames.h>
+
+namespace
+{
+class Provider : public cppu::WeakImplHelper3<css::lang::XServiceInfo,
+                                              css::frame::XDispatchProvider, 
css::frame::XDispatch>
+{
+public:
+    Provider(const Provider&) = delete;
+    const Provider& operator=(const Provider&) = delete;
+
+    static css::uno::Reference<css::uno::XInterface>
+        SAL_CALL 
static_create(css::uno::Reference<css::uno::XComponentContext> const& xContext)
+    {
+        return static_cast<cppu::OWeakObject*>(new Provider(xContext));
+    }
+
+    static rtl::OUString SAL_CALL static_getImplementationName();
+
+    static css::uno::Sequence<rtl::OUString> SAL_CALL 
static_getSupportedServiceNames();
+
+private:
+    explicit Provider(css::uno::Reference<css::uno::XComponentContext> const& 
context)
+        : context_(context)
+    {
+        assert(context.is());
+    }
+
+    virtual ~Provider() {}
+
+    virtual rtl::OUString SAL_CALL getImplementationName() override
+    {
+        return static_getImplementationName();
+    }
+
+    virtual sal_Bool SAL_CALL supportsService(rtl::OUString const& 
ServiceName) override
+    {
+        return cppu::supportsService(this, ServiceName);
+    }
+
+    virtual css::uno::Sequence<rtl::OUString> SAL_CALL 
getSupportedServiceNames() override
+    {
+        return static_getSupportedServiceNames();
+    }
+
+    virtual css::uno::Reference<css::frame::XDispatch>
+        SAL_CALL queryDispatch(css::util::URL const&, rtl::OUString const&, 
sal_Int32) override;
+
+    virtual css::uno::Sequence<css::uno::Reference<css::frame::XDispatch>> 
SAL_CALL
+    queryDispatches(css::uno::Sequence<css::frame::DispatchDescriptor> const& 
Requests) override;
+
+    virtual void SAL_CALL dispatch(css::util::URL const&,
+                                   
css::uno::Sequence<css::beans::PropertyValue> const&) override;
+
+    virtual void SAL_CALL 
addStatusListener(css::uno::Reference<css::frame::XStatusListener> const&,
+                                            css::util::URL const&) override
+    {
+    }
+
+    virtual void SAL_CALL removeStatusListener(
+        css::uno::Reference<css::frame::XStatusListener> const&, 
css::util::URL const&) override
+    {
+    }
+
+    css::uno::Reference<css::uno::XComponentContext> context_;
+};
+
+rtl::OUString Provider::static_getImplementationName()
+{
+    return 
rtl::OUString("org.libreoffice.test.desktop.deployment.crashextension.impl");
+}
+
+css::uno::Sequence<rtl::OUString> Provider::static_getSupportedServiceNames()
+{
+    rtl::OUString 
name("org.libreoffice.test.desktop.deployment.crashextension");
+    return css::uno::Sequence<rtl::OUString>(&name, 1);
+}
+
+css::uno::Reference<css::frame::XDispatch> 
Provider::queryDispatch(css::util::URL const&,
+                                                                   
rtl::OUString const&, sal_Int32)
+{
+    return this;
+}
+
+css::uno::Sequence<css::uno::Reference<css::frame::XDispatch>>
+Provider::queryDispatches(css::uno::Sequence<css::frame::DispatchDescriptor> 
const& Requests)
+{
+    css::uno::Sequence<css::uno::Reference<css::frame::XDispatch>> 
s(Requests.getLength());
+    for (sal_Int32 i = 0; i < s.getLength(); ++i)
+    {
+        s[i]
+            = queryDispatch(Requests[i].FeatureURL, Requests[i].FrameName, 
Requests[i].SearchFlags);
+    }
+    return s;
+}
+
+void Provider::dispatch(css::util::URL const&, 
css::uno::Sequence<css::beans::PropertyValue> const&)
+{
+    // Crash LibreOffice
+    *((char*)NULL) = 0;
+}
+
+cppu::ImplementationEntry const services[]
+    = { { &Provider::static_create, &Provider::static_getImplementationName,
+          &Provider::static_getSupportedServiceNames, 
&cppu::createSingleComponentFactory, NULL,
+          0 },
+        { NULL, NULL, NULL, NULL, NULL, 0 } };
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT void*
+component_getFactory(char const* pImplName, void* pServiceManager, void* 
pRegistryKey)
+{
+    return cppu::component_getFactoryHelper(pImplName, pServiceManager, 
pRegistryKey, services);
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT void
+component_getImplementationEnvironment(char const** ppEnvTypeName, 
uno_Environment**)
+{
+    *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/desktop/test/deployment/crashextension/description.xml 
b/desktop/test/deployment/crashextension/description.xml
new file mode 100644
index 000000000000..3084b17ae4a2
--- /dev/null
+++ b/desktop/test/deployment/crashextension/description.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+
+<d:description xmlns:d="http://openoffice.org/extensions/description/2006";>
+  <d:identifier
+      value="org.libreoffice.test.desktop.deployment.crashextension"/>
+  <d:version value="1.0"/>
+  <d:display-name>
+    <d:name lang="en">Crash LibreOffice</d:name>
+  </d:display-name>
+  <d:dependencies>
+    <d:OpenOffice.org-minimal-version d:name="OpenOffice.org 3.4" value="3.4"/>
+  </d:dependencies>
+</d:description>

Reply via email to