qtwebenginecore.cpp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. // Copyright (C) 2022 The Qt Company Ltd.
  2. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
  3. // @snippet qwebenginecookiestore-functor
  4. struct QWebEngineCookieFilterFunctor : public Shiboken::PyObjectHolder
  5. {
  6. using Shiboken::PyObjectHolder::PyObjectHolder;
  7. bool operator()(const QWebEngineCookieStore::FilterRequest& filterRequest) const;
  8. };
  9. bool QWebEngineCookieFilterFunctor::operator()(const QWebEngineCookieStore::FilterRequest &
  10. filterRequest) const
  11. {
  12. Shiboken::GilState state;
  13. Shiboken::AutoDecRef arglist(PyTuple_New(1));
  14. PyTuple_SetItem(arglist, 0,
  15. %CONVERTTOPYTHON[QWebEngineCookieStore::FilterRequest](filterRequest));
  16. Shiboken::AutoDecRef ret(PyObject_CallObject(object(), arglist));
  17. return ret.object() == Py_True;
  18. }
  19. // @snippet qwebenginecookiestore-functor
  20. // @snippet qwebenginecookiestore-setcookiefilter
  21. %CPPSELF.%FUNCTION_NAME(QWebEngineCookieFilterFunctor(%PYARG_1));
  22. // @snippet qwebenginecookiestore-setcookiefilter
  23. // @snippet qwebengineprofile-functor
  24. struct QWebEngineNotificationFunctor : public Shiboken::PyObjectHolder
  25. {
  26. using Shiboken::PyObjectHolder::PyObjectHolder;
  27. void operator()(std::unique_ptr<QWebEngineNotification> webEngineNotification);
  28. };
  29. void QWebEngineNotificationFunctor::operator()
  30. (std::unique_ptr<QWebEngineNotification> webEngineNotification)
  31. {
  32. Shiboken::GilState state;
  33. Shiboken::AutoDecRef arglist(PyTuple_New(1));
  34. auto *notification = webEngineNotification.release();
  35. PyTuple_SetItem(arglist.object(), 0,
  36. %CONVERTTOPYTHON[QWebEngineNotification*](notification));
  37. Shiboken::AutoDecRef ret(PyObject_CallObject(object(), arglist));
  38. };
  39. // @snippet qwebengineprofile-functor
  40. // @snippet qwebengineprofile-setnotificationpresenter
  41. %CPPSELF.%FUNCTION_NAME(QWebEngineNotificationFunctor(%PYARG_1));
  42. // @snippet qwebengineprofile-setnotificationpresenter
  43. // @snippet qwebenginepage-javascriptprompt-virtual-redirect
  44. std::pair<bool, QString> resultPair = javaScriptPromptPyOverride(gil, pyOverride.object(), securityOrigin, msg, defaultValue);
  45. result->assign(resultPair.second);
  46. return resultPair.first;
  47. // @snippet qwebenginepage-javascriptprompt-virtual-redirect
  48. // @snippet qwebenginepage-javascriptprompt-return
  49. QString str;
  50. %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, &str);
  51. %PYARG_0 = PyTuple_New(2);
  52. PyTuple_SetItem(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](retval_));
  53. PyTuple_SetItem(%PYARG_0, 1, %CONVERTTOPYTHON[QString](str));
  54. // @snippet qwebenginepage-javascriptprompt-return
  55. // @snippet qwebenginepage-findtext
  56. auto callable = %PYARG_3;
  57. auto callback = [callable](const QWebEngineFindTextResult &result)
  58. {
  59. Shiboken::GilState state;
  60. Shiboken::AutoDecRef arglist(PyTuple_New(1));
  61. PyTuple_SetItem(arglist, 0, %CONVERTTOPYTHON[QWebEngineFindTextResult](result));
  62. Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist));
  63. Py_DECREF(callable);
  64. };
  65. Py_INCREF(callable);
  66. %CPPSELF.%FUNCTION_NAME(%1, %2, callback);
  67. // @snippet qwebenginepage-findtext
  68. // @snippet qwebenginepage-print
  69. auto printer = %PYARG_1;
  70. auto callable = %PYARG_2;
  71. auto callback = [printer, callable](bool succeeded)
  72. {
  73. if (!PyCallable_Check(callable)) {
  74. qWarning("Argument 2 of %FUNCTION_NAME must be a callable.");
  75. return;
  76. }
  77. Shiboken::GilState state;
  78. Shiboken::AutoDecRef arglist(PyTuple_New(1));
  79. PyTuple_SetItem(arglist, 0, %CONVERTTOPYTHON[bool](succeeded));
  80. Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist));
  81. Py_DECREF(callable);
  82. Py_DECREF(printer);
  83. };
  84. Py_INCREF(printer); // Add a reference to the printer until asynchronous printing has finished
  85. Py_INCREF(callable);
  86. %CPPSELF.%FUNCTION_NAME(%1, callback);
  87. // @snippet qwebenginepage-print
  88. // @snippet qwebenginepage-convertto
  89. auto callable = %PYARG_1;
  90. auto callback = [callable](const QString &text)
  91. {
  92. Shiboken::GilState state;
  93. Shiboken::AutoDecRef arglist(PyTuple_New(1));
  94. PyTuple_SetItem(arglist, 0, %CONVERTTOPYTHON[QString](text));
  95. Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist));
  96. Py_DECREF(callable);
  97. };
  98. Py_INCREF(callable);
  99. %CPPSELF.%FUNCTION_NAME(callback);
  100. // @snippet qwebenginepage-convertto
  101. // @snippet qwebenginepage-runjavascript-2
  102. using RunJavascriptCallback = std::function<void(const QVariant &)>;
  103. if (%PYARG_2 != nullptr && %PYARG_2 != Py_None) {
  104. %CPPSELF.%FUNCTION_NAME(%1, RunJavascriptCallback(RunJavascriptFunctor(%PYARG_2)));
  105. } else {
  106. %CPPSELF.%FUNCTION_NAME(%1, 0, RunJavascriptCallback{});
  107. }
  108. // @snippet qwebenginepage-runjavascript-2
  109. // @snippet qwebenginepage-runjavascript-3
  110. using RunJavascriptCallback = std::function<void(const QVariant &)>;
  111. if (%PYARG_3 != nullptr && %PYARG_3 != Py_None) {
  112. %CPPSELF.%FUNCTION_NAME(%1, %2, RunJavascriptCallback(RunJavascriptFunctor(%PYARG_3)));
  113. } else {
  114. %CPPSELF.%FUNCTION_NAME(%1, %2, RunJavascriptCallback{});
  115. }
  116. // @snippet qwebenginepage-runjavascript-3
  117. // @snippet qwebenginepage-printtopdf
  118. using PrintToPdfCallback = std::function<void(const QByteArray &)>;
  119. %CPPSELF.%FUNCTION_NAME(PrintToPdfCallback(PrintToPdfFunctor(%PYARG_1)), %2, %3);
  120. // @snippet qwebenginepage-printtopdf
  121. // @snippet qwebenginepage-findframebyname
  122. auto frameOptional = %CPPSELF.%FUNCTION_NAME(%1);
  123. if (frameOptional.has_value()) {
  124. const %RETURN_TYPE &frame = frameOptional.value();
  125. %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](frame);
  126. } else {
  127. Py_INCREF(Py_None);
  128. %PYARG_0 = Py_None;
  129. }
  130. // @snippet qwebenginepage-findframebyname
  131. // @snippet qwebengineframe-printtopdf
  132. using PrintToPdfCallback = std::function<void(const QByteArray &)>;
  133. %CPPSELF.%FUNCTION_NAME(PrintToPdfCallback(PrintToPdfFunctor(%PYARG_1)));
  134. // @snippet qwebengineframe-printtopdf