Skip to content

Commit afd6e83

Browse files
metsmamrts
authored andcommitted
Add additional parameter when Safari extension starts application and bring in JavaScript changes from WebExtension
Refs WE2-92 Signed-off-by: Raul Metsma <[email protected]>
1 parent 8cc0cc3 commit afd6e83

File tree

4 files changed

+45
-28
lines changed

4 files changed

+45
-28
lines changed

src/controller/application.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ Application::Application(int& argc, char** argv, const QString& name) : QApplica
5050
setApplicationVersion(QStringLiteral(PROJECT_VERSION));
5151
setOrganizationDomain(QStringLiteral("web-eid.eu"));
5252
setOrganizationName(QStringLiteral("RIA"));
53+
setQuitOnLastWindowClosed(false);
5354

5455
translator = new QTranslator(this);
5556
QApplication::installTranslator(translator);

src/mac/main.mm

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636

3737
@implementation NSApplication (MacController)
3838

39-
+ (QVariant)toQVariant:(id)data {
39+
+ (QVariant)toQVariant:(id)data
40+
{
4041
if (data == nil) {
4142
return {};
4243
}
@@ -55,7 +56,8 @@ + (QVariant)toQVariant:(id)data {
5556
return {};
5657
}
5758

58-
+ (QVariantList)toQVariantList:(NSArray *)data {
59+
+ (QVariantList)toQVariantList:(NSArray*)data
60+
{
5961
QVariantList result;
6062
if (data == nil) {
6163
return result;
@@ -66,7 +68,8 @@ + (QVariantList)toQVariantList:(NSArray *)data {
6668
return result;
6769
}
6870

69-
+ (QVariantMap)toQVariantMap:(NSDictionary *)data {
71+
+ (QVariantMap)toQVariantMap:(NSDictionary*)data
72+
{
7073
QVariantMap result;
7174
if (data == nil) {
7275
return result;
@@ -77,7 +80,8 @@ + (QVariantMap)toQVariantMap:(NSDictionary *)data {
7780
return result;
7881
}
7982

80-
+ (id)toID:(const QVariant&)data {
83+
+ (id)toID:(const QVariant&)data
84+
{
8185
switch (data.type()) {
8286
case QVariant::String: return data.toString().toNSString();
8387
case QVariant::Map: return [NSApplication toNSDictionary:data.toMap()];
@@ -86,23 +90,26 @@ + (id)toID:(const QVariant&)data {
8690
}
8791
}
8892

89-
+ (NSArray*)toNSArray:(const QVariantList&)data {
93+
+ (NSArray*)toNSArray:(const QVariantList&)data
94+
{
9095
NSMutableArray *result = [[NSMutableArray alloc] init];
91-
for (const QVariant &item: data) {
96+
for (const QVariant& item : data) {
9297
[result addObject:[NSApplication toID:item]];
9398
}
9499
return result;
95100
}
96101

97-
+ (NSDictionary*)toNSDictionary:(const QVariantMap&)data {
102+
+ (NSDictionary*)toNSDictionary:(const QVariantMap&)data
103+
{
98104
NSMutableDictionary *result = [[NSMutableDictionary alloc] init];
99105
for (QVariantMap::const_iterator i = data.cbegin(); i != data.cend(); ++i) {
100106
result[i.key().toNSString()] = [NSApplication toID:i.value()];
101107
}
102108
return result;
103109
}
104110

105-
- (void)notificationEvent:(NSNotification *)notification {
111+
- (void)notificationEvent:(NSNotification*)notification
112+
{
106113
NSString *nonce = notification.object;
107114
NSDictionary *req = takeValue(nonce);
108115
NSLog(@"web-eid-safari: msg from extension nonce (%@) request: %@", nonce, req);
@@ -111,13 +118,16 @@ - (void)notificationEvent:(NSNotification *)notification {
111118
}
112119

113120
NSDictionary *resp;
114-
if([@"status" isEqualToString:req[@"command"]]) {
115-
resp = [NSApplication toNSDictionary:{{QStringLiteral("version"), qApp->applicationVersion()}}];
121+
if ([@"status" isEqualToString:req[@"command"]]) {
122+
resp = [NSApplication
123+
toNSDictionary: {{QStringLiteral("version"), qApp->applicationVersion()}}];
116124
} else {
117125
try {
118-
const auto argumentJson = QJsonDocument::fromJson(QByteArray::fromNSData(req[@"arguments"]));
119-
Controller controller(std::make_unique<CommandWithArguments>(commandNameToCommandType(QString::fromNSString(req[@"command"])),
120-
argumentJson.object().toVariantMap()));
126+
const auto argumentJson =
127+
QJsonDocument::fromJson(QByteArray::fromNSData(req[@"arguments"]));
128+
Controller controller(std::make_unique<CommandWithArguments>(
129+
commandNameToCommandType(QString::fromNSString(req[@"command"])),
130+
argumentJson.object().toVariantMap()));
121131
controller.run();
122132
QEventLoop e;
123133
QObject::connect(&controller, &Controller::quit, &e, &QEventLoop::quit);
@@ -144,22 +154,19 @@ Controller controller(std::make_unique<CommandWithArguments>(commandNameToComman
144154

145155
bool isSafariExtensionContainingApp() override { return true; }
146156
bool isSafariExtensionEnabled() override { return safariExtensionEnabled; }
147-
void showSafariSettings() override {
148-
[SFSafariApplication showPreferencesForExtensionWithIdentifier:WebEidExtension completionHandler:nil];
149-
}
150-
void setSafariExtensionEnabled(bool value) {
151-
safariExtensionEnabled = value;
157+
void showSafariSettings() override
158+
{
159+
[SFSafariApplication showPreferencesForExtensionWithIdentifier:WebEidExtension
160+
completionHandler:nil];
152161
}
162+
void setSafariExtensionEnabled(bool value) { safariExtensionEnabled = value; }
153163

154164
private:
155165
bool safariExtensionEnabled = false;
156166
};
157167

158168
int main(int argc, char* argv[])
159169
{
160-
id starting = takeValue(WebEidStarting);
161-
NSLog(@"web-eid-safari: is starting %@", starting);
162-
163170
Q_INIT_RESOURCE(web_eid_resources);
164171
Q_INIT_RESOURCE(translations);
165172

@@ -172,6 +179,16 @@ int main(int argc, char* argv[])
172179
appPtr->setSafariExtensionEnabled(bool(state.enabled));
173180
}];
174181

182+
id starting = [getUserDefaults() objectForKey:WebEidStarting];
183+
NSLog(@"web-eid-safari: is starting %@", starting);
184+
if ([(NSNumber*)starting boolValue]) {
185+
QTimer::singleShot(0, appPtr, [] {
186+
id starting = takeValue(WebEidStarting);
187+
NSLog(@"web-eid-safari: started %@", starting);
188+
});
189+
return QApplication::exec();
190+
}
191+
175192
try {
176193
if (auto args = app.parseArgs()) {
177194
NSLog(@"web-eid-safari: running with arguments");
@@ -192,8 +209,5 @@ int main(int argc, char* argv[])
192209
qCritical() << error;
193210
}
194211

195-
if (![(NSNumber*)starting boolValue]) {
196-
WebEidDialog::showAboutPage();
197-
}
198-
return QApplication::exec();
212+
return -1;
199213
}

src/mac/safari-extension.mm

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ - (BOOL)execNativeApp {
7878
return NO;
7979
}
8080
NSLog(@"web-eid-safari-extension: started app");
81-
for (int i = 0; i < 10 && [getUserDefaults() boolForKey:WebEidStarting]; ++i) {
82-
[NSThread sleepForTimeInterval:1.0];
81+
for (int i = 0; i < 20 && [getUserDefaults() boolForKey:WebEidStarting]; ++i) {
82+
[NSThread sleepForTimeInterval:0.5];
8383
NSLog(@"web-eid-safari-extension: waiting to be running %@", [getUserDefaults() objectForKey:WebEidStarting]);
8484
}
8585
if ([(NSNumber*)takeValue(WebEidStarting) boolValue]) {
@@ -103,6 +103,8 @@ - (void)beginRequestWithExtensionContext:(NSExtensionContext *)context
103103
return;
104104
}
105105

106+
NSLog(@"web-eid-safari-extension: sending message to app %@", message);
107+
106108
// Save context
107109
NSString *nonce = [[[NSUUID alloc] init] UUIDString];
108110
contexts[nonce] = context;

0 commit comments

Comments
 (0)