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 @@
+
+
+
+
+ -
+
+
+
+
+ vnd.org.libreoffice.test.desktop.deployment.crashextension:
+
+
+
+ %origin%/crash.png
+
+
+ %origin%/crash.png
+
+
+
+
+
+
+
+
+ standardbar
+
+
+ .uno:HelpIndex
+
+
+ AddAfter
+
+
+ AddLast
+
+
+
+
+
+
+
+ vnd.org.libreoffice.test.desktop.deployment.crashextension:
+
+
+ Crash LibreOffice
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+ vnd.org.libreoffice.test.desktop.deployment.crashextension:*
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
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
+
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace
+{
+class Provider : public cppu::WeakImplHelper3
+{
+public:
+ Provider(const Provider&) = delete;
+ const Provider& operator=(const Provider&) = delete;
+
+ static css::uno::Reference
+ SAL_CALL static_create(css::uno::Reference const& xContext)
+ {
+ return static_cast(new Provider(xContext));
+ }
+
+ static rtl::OUString SAL_CALL static_getImplementationName();
+
+ static css::uno::Sequence SAL_CALL static_getSupportedServiceNames();
+
+private:
+ explicit Provider(css::uno::Reference 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 SAL_CALL getSupportedServiceNames() override
+ {
+ return static_getSupportedServiceNames();
+ }
+
+ virtual css::uno::Reference
+ SAL_CALL queryDispatch(css::util::URL const&, rtl::OUString const&, sal_Int32) override;
+
+ virtual css::uno::Sequence> SAL_CALL
+ queryDispatches(css::uno::Sequence const& Requests) override;
+
+ virtual void SAL_CALL dispatch(css::util::URL const&,
+ css::uno::Sequence const&) override;
+
+ virtual void SAL_CALL addStatusListener(css::uno::Reference const&,
+ css::util::URL const&) override
+ {
+ }
+
+ virtual void SAL_CALL removeStatusListener(
+ css::uno::Reference const&, css::util::URL const&) override
+ {
+ }
+
+ css::uno::Reference context_;
+};
+
+rtl::OUString Provider::static_getImplementationName()
+{
+ return rtl::OUString("org.libreoffice.test.desktop.deployment.crashextension.impl");
+}
+
+css::uno::Sequence Provider::static_getSupportedServiceNames()
+{
+ rtl::OUString name("org.libreoffice.test.desktop.deployment.crashextension");
+ return css::uno::Sequence(&name, 1);
+}
+
+css::uno::Reference Provider::queryDispatch(css::util::URL const&,
+ rtl::OUString const&, sal_Int32)
+{
+ return this;
+}
+
+css::uno::Sequence>
+Provider::queryDispatches(css::uno::Sequence const& Requests)
+{
+ css::uno::Sequence> 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 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 @@
+
+
+
+
+
+
+
+ Crash LibreOffice
+
+
+
+
+